QMainWindowを使用して、実行時の外観を変更することができます。つまり、ユーザーがボタンをクリックしたときです。 QtDesignerによって生成された異なるUIクラスへの参照を保持することに加えて、これを行う別の方法はありますか?たぶんレイアウトに各UIを格納することによって?どう思いますか ?QMainWindowに複数のUIを追加するにはどうすればよいですか?
答えて
私は今それを得たと思う。
QMainWindowがあり、特定のイベントがトリガされたときに、特定のウィンドウの外観を変更したい場合、いくつかのボタンを削除するか、ツリービューウィジェットを追加するか、そうでないものを追加します。
まあまあのアプローチは、手作業で行い、いくつかのウィジェットを削除し、通常のC++コードを使って新しいものを追加することです。 Qt Designerに慣れていれば、これは難しいことです。
他の方法として、Qt Designerを使用して他の外観のコードを生成し、それを特別な機能にコピーする方法が考えられます。 Qt Designerによって生成されるコードは、通常、「ui_classname.h」というヘッダーファイルにあり、理解しにくいものではありません。しかし、すべてが必要ではないので、いくつかを削除する必要があります。
Qt Designerから生成されたコードをコピーする代わりに、単にそれを呼び出すこともできます。通常、あなたのウィジェットは、生成されたクラスへのポインタを持っており、あなたのウィジェットのコンストラクタで、あなたはこのような何かを参照してください。
MyWindow::MyWindow(QWidget *parent) : QMainWindow(parent), m_ui(new Ui::MyWindow)
{
m_ui->setupUi(this);
}
を、対応するヘッダファイルで:
class MyWindow : public QMainWindow {
...
private:
Ui::MyWindow *m_ui;
};
あなたはのための追加生成されたクラスを追加することができます他の外見はあなたのイベントがトリガするときに使用します。
それは次のようになります。
class MyWindow : public QMainWindow {
...
private:
void changeAppearance(int id);
Ui::MyWindow *m_ui;
Ui::MyWindowFirstAppearance *m_uiFirst;
Ui::MyWindowSecondAppearance *m_uiSecond;
...
};
void MyWindow::changeAppearance(int id)
{
// some code to remove the current appearance, basically the opposite of what setupUi is doing
if (id == 0)
m_ui->setupUi(this);
else...
m_uiFirst->setupUi(this);
...
}
これは、あなたがQtのデザイナーで行うすべての変更は、あなたのメインウィンドウへの変更を必要とせず、直接生成されたクラスを使用することの利点を持っています。問題は、setupUiを複数回呼び出すことが合法であるかどうか、ウィジェットのコンストラクタ以外の場所ではわからないため、(setupUi関数で何が起きているのかを見て)チェックする必要があります。
実行時に動的にUIレイアウトを読み込むことができます。 QUiLoaderクラスについてはQt documentationをチェックしてください。
これにより、1行のコードを変更せずにUIレイアウトをアップグレードすることもできます。
解決策ですが、非常に遅いです。これを達成する他の方法を考えてもいいですか? – Geo
残念ながら。あなたはいつでもqtcentre.orgで尋ねることができます。 –
私がこの権利を得ている場合は、style sheetsで略奪したいと思うかもしれません。 CSSと同様に、ウィジェットに「スキン」を持たせることができます。
私がこの権利を得ておらず、実行中の.uiファイルを生成し、QUiLoaderを使用してウィジェットを作成するとしたら、おそらくこれは間違った方法です通常のアプリケーションではそれが必要な理由を考えることができません。
それをある種のタブ区画と考えてください。ただ、別のUIを同じタブに表示しなければならないということです。 – Geo
私が正しく理解していれば、#1タブでいくつかのチェックボックスを選択し、次のタブの内容が変わります。その場合は –
にQWizardが適切に鳴ります。 –
変更するメインウィンドウの量はどれくらいですか? QStackWidget
を変更したい場所を使用し、ボタンを押したときにウィジェットの表示ページを変更することができます。これは速やかに変更されますが、大規模で複雑なUIの場合は、両方のUIのウィジェットを同時に作成するため、起動時に若干遅くなることがあります。 (これを変更する方法もかなり簡単ですが、ほとんどの人にとっては簡単なことに複雑なものが加わります。)また、両方のレイアウトで同じデータを別の場所に配置する必要がある場合は、プログラムの実行中に両方のUIセットを最新の状態に保つオーバーヘッドが発生します。
すべてのUIを変更したいと思います。同じウインドウ寸法(幅/高さ)を持つ、完全に異なるスクリーンと考えてください。 – Geo
は私がやっていることは...、二つの異なるQFrames下2つのUIを設計QMainWindowで一緒にレイアウトで2 QFramesを入れ、その後、(隠し)とshow()あなたが欲しい正しいQFrameことです
QTabWidget
を使用してボタンを非表示にすることができます。その後、tabWidget
の別のウィンドウで各GUIを設計できます。フレームを隠すことよりも、Qt Creatorウィンドウを乱雑にしないという利点があります。
- 1. eclipseでListSelectionDialogに複数の列を追加するにはどうすればよいですか?
- 2. Googleマップに複数のマーカーをプログラムで追加するにはどうすればよいですか?
- 3. Chromeプラグインのcontent_security_policyに複数のドメインを追加するにはどうすればよいですか?
- 4. PDFの下部(フッター)に複数の行を追加するにはどうすればよいですか?
- 5. 1つのファイルに複数の機能を追加するにはどうすればよいですか?
- 6. iOS用の素材に複数のカードビューを追加するにはどうすればよいですか?
- 7. 複数の行に2つの文字列を追加するにはどうすればよいですか?
- 8. perlスクリプトの最後に複数のPODを追加するにはどうすればよいですか?
- 9. 複数のコード行の先頭に#を追加するにはどうすればよいですか?
- 10. xcode4内の複数のターゲットにフレームワークを追加するにはどうすればよいですか?
- 11. MVCエンティティフレームワークのストアプロシージャに複数のパラメータを追加するにはどうすればよいですか?
- 12. eclipse heliosのブレークポイントに複数の条件を追加するにはどうすればよいですか?
- 13. 複数のOutlookアカウントのカテゴリをマスターカテゴリリストに追加するにはどうすればよいですか?
- 14. 複数の項目をC++の文字列に追加するにはどうすればよいですか?
- 15. 1つの入力に複数のセルを追加するにはどうすればよいですか?
- 16. 複数のRecycleviews/GridViewを1つのアクティビティに追加するにはどうすればよいですか?
- 17. テーブルに複数の列を追加し、それらのいずれかにデフォルトの制約を追加するにはどうすればよいですか?
- 18. 複数の名前空間宣言をXDocumentに追加するにはどうすればよいですか?
- 19. 複数のリソースをXAMLウィンドウに追加するにはどうすればよいですか?
- 20. 複数のレポートを一緒に追加するにはどうすればよいですか?
- 21. 複数のINTをデータベースに追加するにはどうすればよいですか?
- 22. ナビゲーションバーに複数のコントロールを追加するにはどうすればよいですか?
- 23. UIViewControllerに複数のUITableViewを追加するにはどうすればよいですか?
- 24. 複数のコールバックをjavascriptメソッドに追加するにはどうすればよいですか?
- 25. NSOperation Queueに複数の操作を追加するにはどうすればよいですか?
- 26. アレイに複数のユーザー入力を追加するにはどうすればよいですか?
- 27. UINavigationBarに複数のUIBarButtonItemを追加するにはどうすればよいですか?
- 28. IOSアプリケーションに複数のページを追加するにはどうすればよいですか?
- 29. 複数のシリーズをRazor Helper Chartに追加するにはどうすればよいですか?
- 30. 複数の内蔵リボンタブ(vsto)にグループを追加するにはどうすればよいですか?
これは私がこれまで使用してきたアプローチですが、そのことは外観に言及する必要があることです。ありがとう! – Geo