Qt5のアーキテクチャでよくわからない点が有ります。次にその内容を書いてみますので、もし何か情報をお持ちの方コメントいただけないでしょうか。
実行時にQt5が警告のようなメッセージを出力しますが、これは問題なのでしょうか?
Qt5を使って、QMainWindow派生のMainWindowクラスを作成しました。
このプログラムを実行すると、QLayout: Attempting to add QLayout "" to MainWindow "", which already has a layout
という警告のようなメッセージが表示されます。
コンストラクタ(ポイントになるコード)は以下のようになっています。
c++
1MainWindow::MainWindow(QWidget *parent) : 2 QMainWindow(parent) 3{ 4 auto *mainLayout = new QVBoxLayout(this); //この行がポイントです 5 auto mainWidget = new QWidget(this); 6 auto *pushButton = new QPushButton(tr("A button")); 7 mainLayout->addWidget(pushButton); 8 mainWidget->setLayout(mainLayout); 9 10 setCentralWidget(mainWidget); 11}
プログラムを実行すると、次のようなメッセージが出力されます。
bash
1QLayout: Attempting to add QLayout "" to MainWindow "", which already has a layout
QVBoxLayout生成時に親を指定する場合と、親を指定しない場合にはどういう違いがあるのでしょうか?
自らオブジェクト解放コードをコーディングするのではなく、Qt5で使用後のオブジェクトを開放してほしい(これはQt5を使うメリットだと思っています)ので、親オブジェクトを指定してnewしたのですが、
警告?メッセージは無い方が良い(何か私がQt5の流儀に反している)と考え、以下のようなコードに変更したところ、先述したメッセージがなくなりました。
c++
1MainWindow::MainWindow(QWidget *parent) : 2 QMainWindow(parent) 3{ 4 auto *mainLayout = new QVBoxLayout(); //差異は親の指定を止めただけです。 5 auto mainWidget = new QWidget(this); 6 auto *pushButton = new QPushButton(tr("A button")); 7 mainLayout->addWidget(pushButton); 8 mainWidget->setLayout(mainLayout); 9 10 setCentralWidget(mainWidget); 11}
なぜ、QVBoxLayoutオブジェクト生成時に親を指定すると先述した警告?メッセージが出力されるのでしょうか?
警告メッセージが表示される理由は何なのでしょうか?(どこが拙いのでしょうか?)
実行環境
- Linux CentOS 7.9、Ubuntu 18.04
- Qt5.10
- GCC 4.8.5
以上
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/17 21:33
2021/11/18 21:13