QDialog 去掉标题栏

6

网络上充斥着类似的问题,但是我所看到的都不能解决手头的问题。

我的QT-C++应用程序中有一个主窗口表单和一些功能,其中有一个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();
}

作为结果,mainwindow 已经变成了 - enter image description here 对于 dialog.cpp 窗口,我已经设置 -
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的标题栏仍然存在,它看起来像这样 - enter image description here 我错在哪里?有没有办法去掉关闭按钮和标题栏?

可能是如何隐藏QDialog窗口的标题栏?的重复问题。 - jww
4个回答

6

我需要做与这个问题相同的事情,但是我想在对话框上加一个边框而不是窗口栏。解决方案实际上非常简单。只需将对话框的标志设置为Qt :: CustomizeWindowHint:

dialog.setWindowFlags(Qt::CustomizeWindowHint);

您还可以与特定标志一起使用,以进一步自定义窗口外观,如文档中所述。

设置后,窗口无法拖动,如何实现通过在空白区域按下鼠标左键来拖动窗口? - Wade Wang

4

在一位朋友的帮助下解决了这个问题,现在将答案发布出来,以供需要的人参考 ---

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

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

这就是解决方法—— enter image description here 以及对话框—— enter image description here

很好,它帮助我解决了一个非常不同的问题。谢谢 :) - Javid
这个解决方案的问题在于它不允许您移动或调整对话框大小,以防您需要这样做。我知道它是一个对话框,所以也许调整大小并不是必要的,但是在屏幕上移动它很重要。但也许在 Mac 上表现不同。我说的是 Windows。 - santahopar

2
Dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);


1
这不是一个很好的答案,如果您能详细说明会更有帮助。请参考https://stackoverflow.com/help/how-to-answer。 - shirleyquirk

2

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

void  MyDialog::resizeEvent(QResizeEvent*)
{
    this->setMask(QRegion(this->rect()));
}

你是怎么调用这个函数的? - Yunus Temurlenk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接