QDialog去掉标题栏

QDialog remove title bar

网络上充斥着类似的问题,但我没有看到任何适合解决手头问题的东西。

在我的 QT-C++ 应用程序中,我有一个带有一些功能的主window 表单,有一个 QPushButton,按下它会打开一个 QDialog。现在,表单中的所有功能都可以正常工作,但我希望最终应用程序没有任何顶部标题栏。即没有关闭/最小化/最大化按钮。

在我的main.cpp我做了--

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
    w.show();
    return a.exec();
}

结果主要window变成了-

对于dialog.cppwindow,我设置了-

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    //QDialog Dialog(0, Qt::CustomizeWindowHint|Qt::WindowTitleHint);  --- used this also; no use

    QDialog Dialog(0, Qt::FramelessWindowHint | Qt::Dialog);

但是QDialog的标题栏还在,看起来像-

我哪里错了???关于如何删除关闭按钮和标题栏的任何想法???

在朋友的帮助下解决了,张贴答案以供有需要的人参考---

在 mainwindow.cpp 中,当按下 Fetch 按钮时,qdialog 打开,我在那里设置了属性;

void MainWindow::on_pushButton_2_clicked()
{
    Dialog dialog;
    dialog.setModal(true);
    dialog.setWindowFlags(Qt::FramelessWindowHint);
    dialog.exec();
}

这成功了 --

和对话框 --

我需要为对话框做与这个问题相同的事情,但我想要对话框上的边框没有 window 栏。解决方案其实很简单。只需将对话框的标志设置为 Qt::CustomizeWindowHint:

dialog.setWindowFlags(Qt::CustomizeWindowHint);

您还可以将其与特定标志进行 OR 操作,以进一步自定义 windows 外观,如文档中所述。

我在设置 Qt::FramelessWindowHint 标志时遇到了一些问题,所以我最终覆盖了 resizeEvent 而不是设置这个标志:

void  MyDialog::resizeEvent(QResizeEvent*)
{
    this->setMask(QRegion(this->rect()));
}
Dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);