数秒間非アクティブになった後、アプリケーションでマウスを自動的に非表示にしようとしています。これを処理するコードを以下に示します。子ウィンドウを開くまで、すべてがうまく機能します。子ウィンドウの上にマウスを移動するまで、マウスは再表示されません。MyMainWindow::eventFilter() ですべてのイベントを監視すると、子ウィンドウが開いている間、親ウィンドウのイベントは表示されません。アプリケーションのすべてのウィンドウにqApp->installEventFilter()
イベントフィルターを追加したと思いました。考え?
私のプラットフォームは Windows 7 と Qt 4.8 です。アプリケーションは、キオスク コンピューターでフル スクリーンで実行されます。つまり、私のアプリケーション以外にコンピューター上で実行されるものはありません。
MyMainWindow::MyMainWindow( QWidget *parent ) :
QMainWindow( parent ),
ui( new Ui::MyMainWindow )
{
// all the other setup...
hideMouseTimer.start( HideMouseDelay_ms );
connect( &hideMouseTimer, SIGNAL(timeout()), this, SLOT(hideMouseTimerExpiry()) );
if( qApp )
{
qApp->installEventFilter( this );
}
}
bool MyMainWindow::eventFilter( QObject *obj, QEvent *event )
{
/*
* Monitor mouse movement. If the mouse has been hidden, show it and start
* the timer for the next check for hiding it.
*/
if( event->type() == QEvent::MouseMove )
{
qApp->restoreOverrideCursor();
hideMouseTimer.start( HideMouseDelay_ms );
}
return QWidget::eventFilter( obj, event );
}
void MyMainWindow::hideMouseTimerExpiry()
{
qApp->setOverrideCursor( QCursor( Qt::BlankCursor ) );
hideMouseTimer.stop();
}
void MyMainWindow::on_dialog_clicked()
{
myDiaglog *d = new myDialog();
d->exec();
delete d;
}