QT对话框窗口禁用ewerningOntonop会导致窗口关闭

Qt Dialog Window disabling alwaysontop leads to window closing

本文关键字:窗口 ewerningOntonop 对话框 QT      更新时间:2023-10-16

我正在用这些标志创建一个对话框窗口:

this->setWindowFlags(this->windowFlags() ^ Qt::WindowContextHelpButtonHint);
this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint);
ui.setupUi(this);

考虑到创建的对话框窗口,最适合的

按要求在顶部停留。但是,对话框窗口还具有一个复选框,其目的是让用户禁用其ewloctOntop属性,为此,这些代码行中存在于类构造函数中:

QObject::connect(ui.cbAlwaysOnTop, &QCheckBox::clicked, this, &SearchWindow::IsSetOnTop);

,功能是:

void IsSetOnTop() {
    if (ui.cbAlwaysOnTop->checkState())
        this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint);
    else
        this->setWindowFlags(this->windowFlags() ^ Qt::WindowStaysOnTopHint);//^ Qt::WindowStaysOnTopHint
}

问题在于,一旦Checkbox EnversionOntop未经选中,窗口就简单地消失了(看来它不再存在)。知道我做错了什么?

记录在窗口上调用 setWindowFlags(),以使窗口隐藏:

此功能更改窗口的标志时调用setParent(),从而导致窗口部件被隐藏。您必须致电show()才能使小部件再次可见。

使用setWindowFlags()后,您只需要致电show(),这是一个最小的示例:

#include <QtWidgets>
int main(int argc, char* argv[]){
    QApplication a(argc, argv);
    QWidget w;
    QVBoxLayout layout(&w);
    QCheckBox cb("always on top check box.");
    layout.addWidget(&cb);
    QObject::connect(&cb, &QCheckBox::toggled, &w, [&](){
        if(cb.isChecked())
            w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint);
        else
            w.setWindowFlags(w.windowFlags() & ~Qt::WindowStaysOnTopHint);
        //call show() after changing window flags
        w.show();
        //^^^^^^^
    });
    w.show();
    return a.exec();
}

请查看窗口标志的示例,并注意show()在那里呼叫。