我有1 QListWidget
和1 QStackedWidget
。QstackedWidget
选择 上的条目后,将显示三个不同的小部件QListWidget
。
问题:当我选择第一个选项时,没有任何反应,如果我选择第二个选项,也没有任何反应,但是当我选择最后一个选项时,我会在QStackedWidget
. 此小部件不属于第三个小部件,但它属于第一个小部件。
[QListWidget::currentRowChanged( C++ - QListWidget select first item ) 的信号似乎没有被正确触发。为什么会这样?基本上似乎只触发了最后一个选择而不是所有其他选择。
在代码片段下方:
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
组合,但尽管如此,我只能展示第三个选择。