在Qt中打开子窗口时监视父窗口中的事件

时间:2013-03-16 00:12:12

标签: qt events kiosk childwindow kiosk-mode

我试图在几秒钟不活动后自动隐藏我的应用程序中的鼠标,并使用下面的代码来处理这个问题。一切都很好直到我打开一个子窗口:鼠标不会重新出现,直到我将鼠标移到子窗口上。如果我监视MyMainWindow :: eventFilter()中的所有事件,我在子窗口打开时看不到父窗口的任何事件。我认为qApp->installEventFilter()为应用程序的所有窗口添加了事件过滤器。想法?

我的平台是Windows 7和Qt 4.8。应用程序在kiosked计算机上全屏运行 - 即除了我的应用程序之外,计算机上没有其他任何东西在运行。

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;
}

0 个答案:

没有答案