Я создаю 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
флаг, чтобы удалить «всю границу окна», но это не моя цель, так как я просто хочу отключить кнопку закрытия.
Какой флаг окна я могу использовать, чтобы отключить / заблокировать QProgressBar
кнопка закрытия на OS X?
Подкласс диалогового окна и повторно реализовать 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 скрыть кнопки сворачивания, разворачивания и закрытия