按照论坛上提供的方法,将窗口设置为前端显示了: setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);同时我重新实现了closeEvent()
void MainWindow::closeEvent(QCloseEvent *event)
{
QMessageBox message(QMessageBox::Question,tr("警告"), tr("要退出吗?"), QMessageBox::Yes | QMessageBox::No,NULL);
if(message.exec() == QMessageBox::Yes)
event->accept();
else
event->ignore();
}
由于主窗口总在最前,把close时弹出的确认窗口都挡住了,同时主窗口也僵死无反应了。我想要的效果是主窗口在所有窗口的最前面,同时不挡住程序本身产生的所有提示框,该怎么办呢?
解决:把message的最后一个参数从NULL改成this,即
QMessageBox message(QMessageBox::Question,tr("警告"), tr("要退出吗?"), QMessageBox::Yes | QMessageBox::No, this);
在Qt应用程序中,使用`Qt::WindowStaysOnTopHint`标志可以使窗口始终位于最前端,但会导致自身弹出的QMessageBox被挡住。通过将QMessageBox的父对象设置为当前窗口(`this`),可以确保消息框正确显示且不会被主窗口覆盖。问题已通过修改QMessageBox的构造函数参数解决。
5440

被折叠的 条评论
为什么被折叠?



