簡體   English   中英

如何在OS X上阻止QProgressDialog的“本機關閉按鈕”?

[英]How to block the 'native close button' of a QProgressDialog on OS X?

我正在創建一個QProgressDialog ,如下所示:

QProgressDialog progressDialog = new QProgressDialog(tr("Calculating..."), NULL, 0, 100, this);
progressDialog->setAutoClose(true);
progressDialog->setValue(0);
progressDialog->setWindowTitle(tr("Calculate Weights"));
progressDialog->setWindowFlags(progressDialog->windowFlags() & ~Qt::WindowCloseButtonHint);
progressDialog->show();

請注意,我正在使用Qt::WindowCloseButtonHint標志禁用“本地關閉按鈕”。 它似乎在Windows運行良好,但在OS X上卻不行(在OS X上 ,關閉按鈕仍然可用,用戶可以關閉QProgressDialog )。

我還測試了其他標志(例如Qt::WindowSystemMenuHintQt::WindowTransparentForInput ),但是沒有一個解決了我的問題。

當然,我可以使用Qt::FramelessWindowHint標志刪除“窗口的整個邊框”,但這不是我的目標,因為我只想禁用關閉按鈕。

我可以使用哪個窗口標志來禁用/阻止OS X上的QProgressBar關閉按鈕?

子類化對話框,然后重新實現QCloseEvent

http://doc.qt.io/qt-5/qcloseevent.html

這樣一來,您可以停止並忽略,或者以“您確定”的方式回應。

請參閱http://doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html#close-event-handler

// in your MyProgressDialog.h
protected:
    void closeEvent(QCloseEvent *event) override;

// In your MyProgressDialog.cpp
void MyProgressDialog::closeEvent(QCloseEvent *event)
{
    //if (maybeSave()) {
    //    writeSettings();
    //    event->accept();
    //} else {
    //    event->ignore();
    //}
    if(event->spontaneous())// this might work, or you can just use an else on the next if statement instead.
        event->ignore();
    else if(m_progress == 100 || m_isDone)
        event->accept();
}

希望能有所幫助。

如@phyatt所述,它是通過使用以下標志組合來解決的:

progressDialog->setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint);

如這里的回答: Qt hide最小化,最大化和關閉按鈕

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM