Qt 中的主应用程序窗口和对话交互

Posted

技术标签:

【中文标题】Qt 中的主应用程序窗口和对话交互【英文标题】:Main application window and a dialog interaction in Qt 【发布时间】:2011-08-08 10:56:39 【问题描述】:

美好的一天!

有一个问题:主窗口(例如 MyApp)在后台(在所有其他窗口或托盘中)工作,不需要在不需要的情况下显示它。一段时间后,会出现一些提醒的 StayOnTop 对话框(父级 = 0,不绑定到主窗口)并要求进行一些用户交互。对话框关闭后,我想保持当前正在使用的应用程序窗口用户处于活动状态,并且用户继续做他的工作而不是切换到 MyApp。然而,与上述行为不同的是,MyApp 主窗口出现并且用户强制切换回他的窗口(作业)——不方便。

如何防止关闭对话框后出现MyApp主窗口?需要安装一些事件过滤器或访问 OS API? Mac、Windows、Linux 中存在问题。

【问题讨论】:

【参考方案1】:

您可以尝试重新实现主窗口的showEvent 并忽略该事件,以防其他窗口可见。

void main_window::showEvent( QShowEvent* e )

    if( /*one or more of its children are visible */ )
    
        // nothing to do
    
    else
    
        QMainWindow::showEvent( e );
    

【讨论】:

想了想,只需要在关闭对话框后检查主窗口是否有显示事件。但是您的条件将不起作用,因为对话框将在主窗口获取显示事件之前关闭。需要考虑其他条件。但是会检查两个提议的变体。 条件是指你提到的job-windows。如果它们是!isHidden(),则主窗口应保持隐藏状态。你知道我的意思吗? 不,主窗口应在对话框关闭后保持隐藏。没关系,这无论如何都不起作用,因为 void MyWindow::showEvent( QShowEvent * event ) 永远无法控制,我尝试了以下操作:void MyWindow::showEvent( QShowEvent * event ) if(!event->spontaneous()) QMainWindow::showEvent(event); else event->ignore(); 那是窗口管理器的问题:KDE 或 Mac。在 Gnome 或 Windows 中运行良好。【参考方案2】:

也许只是尝试在对话框调用后调用隐藏方法?其他可能性 - 尝试设置: http://doc.qt.io/qt-4.8/qwidget.html#windowFlags-prop 到 Qt::Popup

【讨论】:

Qt::Popup 不起作用,因为它使对话框模式化并立即显示主窗口。将尝试隐藏对话框。 隐藏也会导致主窗口出现,看来那家伙是对的:developer.qt.nokia.com/forums/viewthread/8495/#49421

以上是关于Qt 中的主应用程序窗口和对话交互的主要内容,如果未能解决你的问题,请参考以下文章

QT Qdialog

QT模态对话框及非模态对话框

QT笔记之模态对话框及非模态对话框

Qt中的弹出窗口

QT开发(二十)——QT对话框

Qt中的主窗口之菜单栏