У меня есть 1 QListWidget
и 1 QStackedWidget
. У QstackedWidget
есть три разных виджета, которые будут отображаться после выбора записей на QListWidget
.
Проблема: при выборе первого варианта ничего не происходит и ничего не происходит, если я выбираю второй вариант, но когда я выбираю последний вариант, я вижу виджет на QStackedWidget
. Этот виджет не появляется на третьем виджете, но он связан с первым виджетом.
Сигналы [QListWidget :: currentRowChanged ( C ++ - QListWidget выберите первый элемент ), похоже, не сработали правильно. Почему это происходит? В основном, кажется, что срабатывает только последний выбор вместо всех остальных.
Ниже фрагмента кода:
1 решение: работает частично, потому что из трех вариантов я могу см. только последнее QWidget
, отображаемое в решении QStackedWidget
:
OptionsDialog::OptionsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::OptionsDialog)
{
ui->setupUi(this);
mVesPos = new VesselPosSystemWidget;
mSonar = new SonarForm;
mOutput = new OutputForm;
ui->stackedWidget->addWidget(mVesPos);
ui->stackedWidget->addWidget(mSonar);
ui->stackedWidget->addWidget(mOutput);
ui->horizontalLayout->addWidget(ui->stackedWidget);
setLayout(ui->horizontalLayout);
QObject::connect(ui->listWidget, &QListWidget::currentRowChanged,
ui->stackedWidget, &QStackedWidget::setCurrentIndex);
}
OptionsDialog::~OptionsDialog()
{
delete ui;
}
2: работает частично, поскольку из трех вариантов я вижу только последнее QWidget
, отображаемое на QStackedWidget
. Это решение было взято из официальной документации QStackedWidget :
OptionsDialog::OptionsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::OptionsDialog)
{
ui->setupUi(this);
mVesPos = new VesselPosSystemWidget;
mSonar = new SonarForm;
mOutput = new OutputForm;
ui->stackedWidget->addWidget(mVesPos);
ui->stackedWidget->addWidget(mSonar);
ui->stackedWidget->addWidget(mOutput);
ui->horizontalLayout->addWidget(ui->stackedWidget);
setLayout(ui->horizontalLayout);
connect(ui->listWidget, QOverload<int>::of(&QListWidget::currentRowChanged),
ui->stackedWidget, &QStackedWidget::setCurrentIndex);
}
OptionsDialog::~OptionsDialog()
{
delete ui;
}
3: тот же точный эффект, показан только третий QWidget
:
OptionsDialog::OptionsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::OptionsDialog)
{
ui->setupUi(this);
mVesPos = new VesselPosSystemWidget;
mSonar = new SonarForm;
mOutput = new OutputForm;
ui->stackedWidget->addWidget(mVesPos);
ui->stackedWidget->addWidget(mSonar);
ui->stackedWidget->addWidget(mOutput);
ui->horizontalLayout->addWidget(ui->stackedWidget);
setLayout(ui->horizontalLayout);
connect(ui->listWidget, &QListWidget::currentRowChanged,
[=](int index) { on_listWidget_currentRowChanged(index); });
}
OptionsDialog::~OptionsDialog()
{
delete ui;
}
void OptionsDialog::on_listWidget_currentRowChanged(int currentRow)
{
ui->stackedWidget->setCurrentIndex(currentRow);
}
Я не знаю, что еще можно сделать, чтобы переключить формы .ui
после выбора элемента в QListWidget
. Есть ли что-то, что мне не хватает? Я перепробовал все возможные комбинации connect
, но, несмотря на это, могу показать только третий вариант.