gpt4 book ai didi

c++ - 如何使用 Qt 将两个 QComboBoxes 与 C++ 互连

转载 作者:行者123 更新时间:2023-11-28 05:11:09 25 4
gpt4 key购买 nike

我正在尝试改进我的 UI 以将两个组合框相互链接。

我的 xml 文件包含:

<DBInfo>
<Info Org_Id="4" Database="ORACLE~orcl206~sample~2B3F1084DC06~~" />
<Info Org_Id="5" Database="ORACLE~sample1~sample1~20E786F40DF7~~" />
</DBInfo>

我正在从 xml 文件中读取数据,并将所有 org_Id (4, 5) 放在一个 QStringList orgidlst 中,并将所有数据库用户名(sample、sample1)放在另一个 QStringList dbnamelst。我使用这些字符串列表将项目添加到两个 QComboBoxes:

orgidcombobox.additems(orgidlst);
DBNamecombobox.additems(dbnamelst);

到目前为止工作正常,但现在如果我想将 DBNamecombobox 中的项目名称更改为 sample1,则 orgidcombobox 应为 5,如果我将 orgidcombobox 更改为 4,则 DBNamecombobox 应更改为 sample 反之亦然.

最佳答案

ni1ight 的评论是一个很好的解决方案(为了完整起见,我在最后复制了它)。另一方面,如果您的组合框已排序,那么您必须使用更复杂的东西。我发现使用项目数据存储数据库键很有用,然后使用它来查找任何元素,即使索引不再匹配:

for (int ii = 0; ii < orgidlst.count(); ++ii) {
comboBox1->addItem(orgidlst[ii], orgidlst[ii]);
comboBox2->addItem(dbnamelst[ii], orgidlst[ii]);
}

connect(comboBox1, SIGNAL(currentIndexChanged(int)), SLOT(onComboIndexChanged(int)));
connect(comboBox2, SIGNAL(currentIndexChanged(int)), SLOT(onComboIndexChanged(int)));

公共(public)插槽可能看起来像下面的代码,魔法存在于 QComboBox::findData 中方法:

void YourClass::onComboIndexChanged(int) {
// Find the current and the other combo
auto the_combo = qobject_cast<QComboBox*>(sender());
if (combo1 == nullptr) return;
auto the_other_combo = the_combo == comboBox1 ? comboBox2 : comboBox1;

const int the_other_index = the_combo->findData(the_combo->currentData());
the_other_combo->setCurrentIndex(the_other_index);
}

ni1ight 解决方案

如果两个组合框都保留元素顺序则有效:

connect(comboBox1, SIGNAL(currentIndexChanged(int)), comboBox2, SLOT(setCurrentIndex(int)));
connect(comboBox2, SIGNAL(currentIndexChanged(int)), comboBox1, SLOT(setCurrentIndex(int)));

关于c++ - 如何使用 Qt 将两个 QComboBoxes 与 C++ 互连,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43472386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com