我有附加到非QT应用程序的DLL。在DLL中,我创建QThread和QApplication实例并运行事件循环。我有QDialog和QTimer在4秒后隐藏对话框。 我也重写了mousePressEvent,但它无法正常工作。仅在调整对话框大小时才调用重写函数。如果我没有进行大小调整,则会隐藏对话框并且mousePressEvent函数没有调用。
主题:
void MThread::run()
{
MThread::_app = new QApplication(_argc, _argv);
_main_window = new SongTitle();
_main_window->SetTitle(QString::fromLocal8Bit("lalala"));
_main_window->ShowTitle();
MThread::_app->exec();
}
鼠标事件:
void SongTitle::mouseReleaseEvent(QMouseEvent *event)
{
MessageBoxW(0, L"in mouse event",L"",0);
switch (event->button()){
case Qt::LeftButton:
MessageBoxW(0, L"left",L"",0);
break;
case Qt::RightButton:
MessageBoxW(0, L"right",L"",0);
break;
default:
QDialog::mousePressEvent(event);
break;
}
}
如何解决此问题?
答案 0 :(得分:0)
您似乎重写了鼠标释放事件,而不是新闻事件。当您获得MessageBox
之类的Qt等价物时,也没有理由使用像QMessageBox
这样的Windows API。
最有可能的是,您会错过这样一个事实:窗口小部件只能获取其他窗口小部件已经用完的事件。您的SongTitle
对话框可能包含子窗口小部件,而您点击的是这些窗口小部件,而不是SongTitle
本身。
如果您希望获得鼠标事件,因为它们来自所有窗口小部件的子项,您可以在所有子窗口小部件上安装事件过滤器。该事件过滤器将在它们进入时接收所有事件。