Как правильно отобразить правильный пользовательский интерфейс на QStacked Widget
в зависимости от выбора на QListWidget
?
Ниже у меня есть QDialog
, который содержит:
1 QListWidget
1 QStackedWidget
В зависимости от выбранного варианта списка, например, Система позиционирования судна или Выход, интерфейс должен выглядеть следующим образом, но проблема в том, что к сожалению QStacked Widget
в настоящее время не меняет QWidgets
, так как я выбираю QListWidgets
, на самом деле ничего не показывает. Минимальный проверяемый пример можно найти здесь . Просто клонируйте его, и оно будет работать:
Ниже кода:
optionsdialog.h
#include <QDialog>
#include "vesselpossystemwidget.h"
#include "outputdialog.h"
#include "sonarsystem.h"
namespace Ui {
class OptionsDialog;
}
class OptionsDialog : public QDialog
{
Q_OBJECT
public:
explicit OptionsDialog(QWidget *parent = nullptr);
~OptionsDialog();
private:
Ui::OptionsDialog *ui;
VesselPosSystemWidget *mVesPos;
OutputDialog *mOutput;
SonarSystem *mSonar;
};
#endif // OPTIONSDIALOG_H
optionsdialog.h
#include "optionsdialog.h"
#include "ui_optionsdialog.h"
OptionsDialog::OptionsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::OptionsDialog)
{
ui->setupUi(this);
switch(ui->stackedWidget->currentIndex()){
case 0:
// Go to positioning system
mVesPos = new VesselPosSystemWidget();
mVesPos->show();
break;
case 1:
// Go to sonar set up...
mSonar = new SonarSystem();
mSonar->show();
break;
case 2:
// Go to output
mOutput = new OutputDialog();
mOutput->show();
break;
default:
break;
}
}
OptionsDialog::~OptionsDialog()
{
delete ui;
}
vesselposwidget.h
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class VesselPosSystemWidget; }
QT_END_NAMESPACE
class VesselPosSystemWidget : public QWidget
{
Q_OBJECT
public:
VesselPosSystemWidget(QWidget *parent = nullptr);
~VesselPosSystemWidget();
private:
Ui::VesselPosSystemWidget *ui;
};
#endif // VESSELPOSSYSTEMWIDGET_H
vesselposwidget. cpp
#include "vesselpossystemwidget.h"
#include "ui_vesselpossystemwidget.h"
VesselPosSystemWidget::VesselPosSystemWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::VesselPosSystemWidget)
{
ui->setupUi(this);
}
VesselPosSystemWidget::~VesselPosSystemWidget()
{
delete ui;
}
output.h
#include <QDialog>
namespace Ui {
class OutputDialog;
}
class OutputDialog : public QDialog
{
Q_OBJECT
public:
explicit OutputDialog(QWidget *parent = nullptr);
~OutputDialog();
private:
Ui::OutputDialog *ui;
};
#endif // OUTPUTDIALOG_H
output. cpp
#include "outputdialog.h"
#include "ui_outputdialog.h"
OutputDialog::OutputDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::OutputDialog)
{
ui->setupUi(this);
}
OutputDialog::~OutputDialog()
{
delete ui;
}
Что я уже сделали:
Я изучаю возможность использования QStacked Widget
, так как я не очень знаком с ним и хотел попрактиковаться с базовым c примером. Я исследовал этот источник , а также этот
Также из того же источника есть больше документации, которую я прочитал. Однако я не был полностью в состоянии ясно понять использование этого конкретного виджета.
В дополнение к этому я попробовал switch - case
l oop, как я показал выше в коде, но я не уверен, почему это не работает
Кто-нибудь может дать несколько советов о том, как правильно отображать правильный пользовательский интерфейс на QStacked Widget
в зависимости от выбора QListWidget
? Любое направление для решения этой проблемы приветствуется.