4

Designer を使用してウィザードを視覚的にデザインしたいプロジェクトがあります。

最初にこれを行ったとき、QWizard ウィジェットと各 QWizardPage を別々の .ui ファイルに入れてから、addPages() を呼び出してウィザードを作成しました。これは機能しましたが、私のプロジェクトがウィザードのページごとに .h/.cpp/.ui ファイルのセットを突然持っていたため、面倒でした。

次に、デザイナーが QWizardPage を QWizard 自体に追加し、ページを「昇格」して、独自のクラス機能を使用できることに気付きました。これで、QWizard 用の .ui ファイルが 1 つになり、.h/.cpp ファイルのセットが 2 つだけになりました (QWizard 用に 1 つ、各 QWizardPage 用に 1 つ)。

したがって、私のプロジェクトは次のようになります。

  • Wizard.ui - ウィザードおよび対応するページのすべての GUI 要素が含まれています。
  • Wizard.h/.cpp - QWizard 派生クラスのコードが含まれています
  • WizardPages.h/.cpp - 各 QWizardPage のコードが含まれています

これはうまくいきました!実装を追加し始めるまで。最初にやりたかったことは、最初のページ (たとえば、WizardPage1) にフィールドを登録することでした。

WizardPage1::WizardPage1(QWidget* parent)
    : QWizardPage(parent)
{
    this->registerField("text*", textLineEdit);
}

しかし、'textLineEdit' は実際には QWizard オブジェクトのメンバーです。そのため、QWizardPage の親を使用してフィールドを登録できると考えましたが、ui_Wizard.h ファイルで生成されたコードは親なしで QWizardPage オブジェクトを作成します。そして、私がこれを試すと:

Wizard::Wizard(QWidget *parent)
    : QWizard(parent)
{
    setupUi(this); // Wizard inherits QWizard and the deginer generated class

    // 'WizardPage1' is also the class name and variable name as
    // generated by Qt
    WizardPage1->setParent(this);
}

しかし、これを行うとクラッシュが発生します。

Wizard* wizard = new Wizard(this);
wizard->open(); // crashes

私が達成しようとしているようなことを試して、それを機能させた人はいますか?

4

0 に答える 0