我正在Linux中使用Qt Creator 4.6.0编写Qt控制台应用程序。我想展示一个QDialog,但我不希望它
我该怎么做?
我发现了类似的问题,但solutions对我不起作用,因为我似乎无法在控制台应用程序中使用this
。
这是我到目前为止显示对话框的内容,但它既不会将其隐藏在任务栏中,也不会阻止它隐藏焦点:
QDialog splash;
QVBoxLayout *laySplash = new QVBoxLayout(&splash);
splash.setAttribute(Qt::WA_ShowWithoutActivating);
splash.setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
QLabel *lblText = new QLabel;
laySplash->addWidget(lblText);
lblText->setText(QString::fromStdString("test"));
QTimer::singleShot(1000, &splash, SLOT(close()));
splash.exec();
答案 0 :(得分:1)
exec()
的设置参数似乎自相矛盾并且如果只是{{1},则不会阻止显示隐藏焦点的阻止模式对话框对话框而不是show()
,其他设置有效。下面的代码在exec()
上进行了测试,并取得了预期的结果
Debian Ubuntu 17.10
<强>更新强>
如果代码在主事件循环之前或之前(在调用int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//
QDialog splash;
QVBoxLayout *laySplash = new QVBoxLayout(&splash);
splash.setAttribute(Qt::WA_ShowWithoutActivating);
splash.setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
QLabel *lblText = new QLabel;
laySplash->addWidget(lblText);
lblText->setText(QString::fromStdString("test"));
QTimer::singleShot(5000, &splash, SLOT(close()));
splash.show();
//
return a.exec();
}
之前,甚至在没有调用a.exec()
之前)都可以工作,则需要输入一个事件循环来托管对话框,这个可以分别为每个附加代码重复;最终,您可以选择a.exec()
任意return
值,具体取决于您的代码。
int