2016-11-26 5 views
0

を閉じるウィンドウにつながる:要求されたとして、ダイアログウィンドウに上に作成した滞在を考慮し正常に動作しますQtのダイアログウィンドウ無効alwaysontopは、私はそれらのフラグとダイアログウィンドウを作成してい

this->setWindowFlags(this->windowFlags()^Qt::WindowContextHelpButtonHint); 
this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); 
ui.setupUi(this); 

を。

QObject::connect(ui.cbAlwaysOnTop, &QCheckBox::clicked, this, &SearchWindow::IsSetOnTop); 

と機能は次のとおりです:

しかし、ダイアログウィンドウには、この目的のために、コードのこれらの行は、クラスのコンストラクタに存在している、その目的は、ユーザがそのalwaysontopプロパティを無効にできるようにすることですチェックボックスを持っています
void IsSetOnTop() { 
    if (ui.cbAlwaysOnTop->checkState()) 
     this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); 
    else 
     this->setWindowFlags(this->windowFlags()^Qt::WindowStaysOnTopHint);//^ Qt::WindowStaysOnTopHint 
} 

問題は、チェックボックスalwaysontopがチェックされなくなると、ウィンドウが単に消滅してしまう(存在しないように見える)ことです。私が間違って何をしているのか?ウィンドウ上setWindowFlags()を呼び出す

+0

まだここにいらっしゃっていますが、私の質問は適切ではありませんか?もしそうなら、どんな情報を追加すればいいですか? –

答えて

1

hideに窓を引き起こすことdocumentedです:ウィンドウのフラグを変更するときに

この関数は、ウィジェットを非表示にする原因となる、setParent()を呼び出します。ウィジェットを再び表示させるには、show()に電話する必要があります。

は、あなただけのsetWindowFlags()を使用した後show()を呼び出す必要があり、ここでは最小限の例です:

#include <QtWidgets> 

int main(int argc, char* argv[]){ 
    QApplication a(argc, argv); 

    QWidget w; 
    QVBoxLayout layout(&w); 
    QCheckBox cb("always on top check box."); 
    layout.addWidget(&cb); 
    QObject::connect(&cb, &QCheckBox::toggled, &w, [&](){ 
     if(cb.isChecked()) 
      w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint); 
     else 
      w.setWindowFlags(w.windowFlags() & ~Qt::WindowStaysOnTopHint); 
     //call show() after changing window flags 
     w.show(); 
     //^^^^^^^ 
    }); 

    w.show(); 

    return a.exec(); 
} 

Window Flags Exampleを見てください、そしてあまりにもそこ show()コールに気づきます。

+0

ありがとう、これは確かに問題でした。 –

関連する問題