Qt::FramelessWindowHint setSizeConstraint sideffects on clos

Qt::FramelessWindowHint setSizeConstraint sideffects on closeevent

本文关键字:on clos sideffects setSizeConstraint FramelessWindowHint Qt      更新时间:2023-10-16

当使用Qt::FramelessWindowHint和setSizeConstraint时,我的小部件不再接收关闭事件,这是一个错误吗?最小测试示例:

QT       += core gui
TARGET = QT-BUG
TEMPLATE = app
SOURCES += main.cpp
        widget.cpp
HEADERS  += widget.h

小部件.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget(){}
};
#endif // WIDGET_H

小部件.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QDebug>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QCloseEvent>
Widget::Widget(QWidget *parent) : QWidget(parent)
{
    setWindowFlags(Qt::Tool
                   | Qt::FramelessWindowHint
                   | Qt::WindowStaysOnTopHint);
    QVBoxLayout *l2 = new QVBoxLayout(this);
    l2->setSizeConstraint(QLayout::SetFixedSize);
    this->setLayout(l2);
    QLineEdit* _inputLine = new QLineEdit(this);
    l2->addWidget(_inputLine);
}

主要.cpp

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

像关闭和最小化这样的窗口事件实际上与按钮的存在有关。 Qt人员的设计选择有点糟糕。

似乎Qt::FramelessWindowHint删除/禁用按钮,但您可以通过其他窗口提示重新启用它们(不显示它们)。 对于关闭事件,请添加Qt::WindowCloseButtonHint