Qt 隐藏最小化、最大化和关闭按钮。

17
你知道如何在Qt中隐藏标题栏的最小化、最大化和关闭按钮吗?我特别需要在QMainWindow上隐藏它。

1
你能说一下为什么需要这样做吗? - static_rtti
我不希望用户通过在角落按X关闭我的应用程序。我希望他在退出操作之前执行一些流程。 - ufukgun
6个回答

27

设置此窗口标志 Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint

请注意,在某些平台上,它可能会表现出不同的方式。例如,在 Mac OS X 上,它会禁用(而非隐藏)关闭/最小化/最大化按钮。


8

如果您正在使用Qt qml,那么要去掉最小化、最大化和关闭按钮,请在您的main.qml文件中的window函数中设置无边框窗口标志,如下所示:

flags: Qt.FramelessWindowHint

7

1
谢谢你,mosg。 我的主要问题是隐藏主窗口上的关闭按钮。 - ufukgun

2
这可以通过在MainWindow上使用QEvent :: Close事件的eventFilter来实现。
bool MainWindow::eventFilter(QObject *obj, QEvent *event) {

    if (event->type() == QEvent::Close) {
        event->ignore();
        doWhateverYouNeedToDoBeforeClosingTheApplication();
        return true;
    }
    return QMainWindow::eventFilter(obj, event);
}

void MainWindow::doWhateverYouNeedToDoBeforeClosingTheApplication() {
    // Do here what ever you need to do
    // ...
    // ...

    // and finally quit
    qApp->quit();
}

1

对于关闭按钮,您可以重写QMainWindow的closeEvent()方法。

class MainWindow(QMainWindow):    
    def closeEvent(self, event):
        event.ignore()
        return

0

标志: Qt.Dialog | Qt.WindowCancelButtonHint | Qt.WindowCloseButtonHint

这也适用于窗口项目

标志: Qt.Window | Qt.WindowTitleHint


根据这些名称,我不认为它们是正确的标志... 这就是为什么原帖作者找不到它的原因吗? - Taegost

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