1

最初の Qt ウィンドウにボタンがあります。ボタンをクリックすると、現在のウィンドウの ui が別の ui ファイルの UI に変更されます。現在、ボタンをクリックすると新しいウィンドウが開きますが、古いウィンドウがまだ開いています。現在のウィンドウの内容を別の内容に置き換える方法はありますか? または、単に別のウィンドウを開いて最初のウィンドウを破棄する方がよいでしょうか?

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    otherWindow = new OtherWindow();
    otherWindow->show();
}
4

1 に答える 1

0

理論的には、ある UI を別の UI に置き換えることは可能です。

次の手順に従う必要があります。

  1. コンストラクターの最初の UI によって作成されたすべての子オブジェクトを破棄します。
  2. 新しい UI のインスタンスを作成する
  3. setupUi(this)新しい UI で実行する

私が言ったように、これは理論的なものです。ただし、UI クラスは同じ基本クラスから派生する必要があり、新しい UI に接続すると最初の UI に関連するすべてのスロットが奇妙に動作する可能性があるため、実用的ではありません。

私が提案できるのは、Model-View-Controller (MVC)デザイン パターンに従うことです。ここに 1 つの提案がありますが、他の人にはより良い提案があるかもしれません。

  1. QWidgetクラスとして機能する の派生クラスを作成しますController。によって生成されたすべてのユーザー イベントを処理するすべての信号とスロットを設計しますView
  2. QtDesigner で UI を設計し、これをControllerクラスのプライベート メンバーにします。Controller クラスのコンストラクターですべての UI 要素を構築し、すべてのシグナルとスロットを接続します。これはView、設計パターンの として機能します。
  3. 永続的なデータが必要な場合は、 として機能するクラスまたはクラスのコレクションを作成するか、クラスにModel渡しますControllerViewこれを使用して、 UIで子ウィジェットのすべての値を設定します。
  4. ControllerQWidget をQMainWindow関数に渡しsetCentralWidget()て、ユーザーが表示できる UI として設定します。
  5. 必要な UI ごとに手順 1 ~ 4 を繰り返します。
  6. UI を交換する必要がある場合は、setCentralWidget()onQMainWindowを使用して適切な UI に変更してください。
于 2013-10-21T07:32:18.333 に答える