2017-07-30 21 views
-2

C++でQTで何かを作っています。whileループを使用しているときにウィンドウが表示されない

ただし、コードにwhile(1)ループを使用すると、ウィンドウが表示されません。ループの最後にQApplication::processEvents();を追加するなど、多くのことを試しましたが、機能しません。窓がありません。

ウィンドウを表示するにはどうすればよいですか?

例コード:

MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) { 
    _ui.setupUi(this); 

while(1){ 
} 

} 

おかげ

+1

わかるようにコードを貼り付ける必要があります。 –

+0

ループの前に 'QMainWindow :: show();'を追加し、ループ内に 'QApplication :: processEvents();'を追加するとこの問題は解決しますが、ウィンドウは閉じません。 –

+3

これは、GUIプログラムでイベントループをブロックしない理由の完全な例です。 – MrEricSir

答えて

3

すべてのウィジェットコンストラクタは、メインメッセージループを決してブロックするべきではありません!

メインメッセージループは、通常、次のようになります。

int main(int argc, char *argv[]) { 
    QApplication a(argc, argv); 
    MainWindow w(nullptr); 
    w.show(); 
    int r = a.exec(); 
    return r 
} 

あなたのケースでは、あなたのMainWindow ctorのはとてもw.show()が呼び出されないとa.exec()(メインmessgaeループ)が実行されることはありません、返すことはありません。

ブロッキングはメインウィンドウのctorで問題になるだけでなく、メインメッセージループが実行される前に生成されるシグナルも発生しません。メインウィンドウ内でのTCP/IP接続の設定例では、connected()シグナルと関連するスロットは決して生成されません。 * 1

少なくともメインウィンドウの作成がメインメッセージループが99%のように実行される前である場合。

0

ペイントメッセージが処理されるようにするには、ウィンドウの四角形や歩留まりを無効にしなければなりません。 whileループで続行します。プログレスバーウィンドウをコード化するだけです。

関連する問題