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

Какой флаг окна я могу использовать, чтобы отключить / заблокировать QProgressBar кнопка закрытия на OS X?

0

Решение

Подкласс диалогового окна и повторно реализовать 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();
}

Надеюсь, это поможет.

1

Другие решения

Как упомянуто @phyatt, это было решено с помощью следующей комбинации флагов:

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

Как ответили здесь: Qt скрыть кнопки сворачивания, разворачивания и закрытия

0

По вопросам рекламы [email protected]