2017-10-27 6 views
0

次のように私はQProgressDialogを作成しています:私は「ネイティブに近いボタン」を無効にするQt::WindowCloseButtonHintフラグを使用してい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(); 

注意を。 Windowsでは正常に動作しているようですが、OSXOS Xの場合でもクローズボタンは利用可能で、ユーザはQProgressDialogを閉じることができます)。

他のフラグ(例:Qt::WindowSystemMenuHintQt::WindowTransparentForInput)でもテストしましたが、私の問題は解決していません。

私はQt::FramelessWindowHintフラグを使用して 'ウィンドウの境界全体'を削除できますが、閉じるボタンを無効にしたいので、これは私の目的ではありません。

QProgressBar閉じるボタンを無効にする/ブロックするために使用できるウィンドウフラグOS X

+0

可能な重複HTTPS([Qtは、最小化、最大化と閉じるボタンを非表示します] ://stackoverflow.com/questions/3211272/qt-hide-minimize-maximize-and-close-buttons) – eyllanesc

答えて

1

ダイアログをサブクラス化し、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(); 
} 

役立ちます希望を参照してください。

+0

ありがとう@phyatt、それは素晴らしい解決策だと思われるが、私はもっと簡単なものを探していた**ウィンドウフラグ**。 ** OS X **上では不可能な場合は、私はおそらくあなたのヒントに従い、 'QProgressDialog'のサブクラスを作成します。 – KelvinS

+1

ウィンドウフラグ(http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html)とウィジェット属性(http://doc.qt.io/qt)を使用して、多くのカスタマイズが可能です。 -5/qt.html#WidgetAttribute-enum)、いくつかのコーナーケースの処理を開始すると、標準のサブクラス化ルートを使ってほぼ無限のカスタマイズができます。 – phyatt

+1

この組み合わせを試しましたか? https://stackoverflow.com/a/3216265/999943 – phyatt

0

それはフラグの以下の組み合わせを使用することによって解決した@phyattで述べたように:

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

としては、ここでは答え:のQt hide minimize, maximize and close buttons

関連する問題