![](/img/trans.png)
[英]How to stop/cancel a worker job using the cancel button of a 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::WindowSystemMenuHint
, Qt::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.