使用控制台应用程序没有QDialog的任务栏条目

时间:2018-03-28 20:27:25

标签: qt dialog focus taskbar

我正在Linux中使用Qt Creator 4.6.0编写Qt控制台应用程序。我想展示一个QDialog,但我不希望它

  1. 在任务栏上显示一个条目,
  2. 从其他窗口窃取焦点。
  3. 我该怎么做?

    我发现了类似的问题,但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();
    

1 个答案:

答案 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