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
私が達成しようとしているようなことを試して、それを機能させた人はいますか?