我试图在我的主窗口打开之前从 QSplashScreen 获取按键。我的启动类继承自 QSplashScreen 并覆盖了 keyPressEvent 方法。
下面的代码适用于 Windows,但在 OSX 上,在主窗口打开之前不会拦截按键。
有解决方法吗?
这是使用 Qt 5.2.1,但我认为这个问题也在早期(4.X)版本中。
飞溅.cpp:
...
void Splash::keyPressEvent(QKeyEvent *evt)
{
std::cout << evt->text().toStdString() << std::endl;
}
主.cpp:
...
void delay(float seconds)
{
QTime dieTime= QTime::currentTime().addSecs(seconds);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Splash *splash = new Splash;
splash->setPixmap(QPixmap(":/images/splash_loading.png"));
splash->show();
splash->grabKeyboard();
// on OSX no keypresses captured here, on Windows keypresses captured
delay(5.f);
MainWindow w;
w.show();
// keypresses captured here on OSX and Windows
delay(5.f);
splash->releaseKeyboard();
splash ->hide();
return a.exec();
}