QMainWindow インスタンスを別の QWidget 内に配置したいと思います (たとえば、別の QMainWindow の centralWidget)。
なぜうまくいかないのだろうか?QMainWindow は QWidget から直接継承します。別の QWidget 内に QWidget を配置すると、正常に動作します。
QMainWindow インスタンスを QTabBar に問題なく配置することがよくあります。
ps QMainWindow を使用する必要があるのはなぜですか? 垂直レイアウトを使用して、1 つのフォーム内に 2 つのウィジェットを配置したいと考えています。両方のウィジェットに、直接それらの上に個別のツールバーを配置したいと考えています。
QtCreator を使用してプレーン QWidgets 内にツールバーを配置する方法が他にあるのではないでしょうか?
編集
最初の例 (正常に動作します)
QWidget に基づいて新しいクラス/フォームを作成します。(QtCreator は、標準テンプレートに基づいて 3 つのファイル *.cpp、*.h、および *.ui を作成します)。
クラス宣言はこんな感じ
class NotesEditor : public QWidget
{
Q_OBJECT
public:
explicit NotesEditor(QWidget *parent = 0);
~NotesEditor();
private:
Ui::NotesEditor *ui;
};
このウィジェットを使用して別のウィジェット内に配置しようとすると、正常に動作します。qtcreator の "promote to ..." 機能を使用しました - ここでは問題ありません。
2 番目の例 (機能しません)
QMainWindow に基づいて新しいクラス/フォームを作成します。(QtCreator は、標準テンプレートに基づいて 3 つのファイル *.cpp、*.h、および *.ui を作成します)。
クラス宣言は次のようになります。
class Notes : public QMainWindow
{
Q_OBJECT
public:
explicit Notes(QWidget *parent = 0);
~Notes();
private:
Ui::Notes *ui;
};
そして今、このウィジェットを別のウィジェットに配置しようとすると、表示されません。以前と同じように、qtcreator の "promote to ..." 機能を使用しました。
両方のウィジェット (最初は QWidget に基づいており、2 番目は QMainWindow に基づいています) は、標準の qtcreator コード テンプレートに基づいた同じデフォルト構造を持っています。ここではあまり変更していません。フォーム デザイナーにいくつかのボタンを追加しただけです。
2 番目の例では、クラス インスタンスで setEnabled(true) と setVisible(true) を使用しようとしました。最初のものは結果を与えません。2 つ目は、このウィジェットを別のウィンドウで開きます。
大きな問題は、QMainWindow を別の QWidget 内にネストすることを禁止するものだと思います。前に書いたように、QMainWindow インスタンスは問題なく QTabWidgets 内に配置できます。