rrw*_*ick 5 user-interface qt window
我希望有一个Qt对话框窗口:
通过将对话框设置为模态,我已经可以实现1和3,并且可以通过使用Qt :: WindowStaysOnTopHint窗口标志来实现1和2。但是我无法使所有这三个都起作用-可能吗?
如果答案是特定于操作系统的,则我主要在Mac上工作,但我更喜欢也适用于Windows和Linux的解决方案。谢谢!
你可以尝试使用QGuiApplication::applicationStateChanged
. 这样,如果用户进入或离开您的应用程序,您就会收到通知。只需动态添加和删除Qt::WindowStaysOnTopHint
窗口的标志即可。如果您有多个窗口,可以QGuiApplication::focusWindowChanged
与第一个窗口一起使用。
编辑:要使对话框成为非模式对话框,请设置NULL
为它的父级,或者将 windowModality-Property 设置为并使用and not或Qt::NonModal
显示对话框show
open
exec
QDialog 子类中的示例代码:
connect(QApplication::instance(), SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(changeAlwaysOnTop(Qt::ApplicationState)));
...
void MyDialog::changeAlwaysOnTop(Qt::ApplicationState state)
{
if (state == Qt::ApplicationActive)
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
else
setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint);
show();
}
Run Code Online (Sandbox Code Playgroud)