gpt4 book ai didi

c++ - 如何强制多个 View 显示相同的模型行

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:52 25 4
gpt4 key购买 nike

我有多个 QComboboxes 共享同一个模型。通常他们可以在该模型中独立选择项目。在某些情况下,我希望强制这些组合框显示相同的模型行,即当一个更改选择时,应该反射(reflect)在其他组合中。

这可以通过(可能困惑的)信号和槽来完成,但我想知道是否有一种方法可以从模型端更干净地完成它。 IE。强制所有 View 显示同一行。

下面的评论指出在组合之间共享 selectionModel。我通过将我的组合收集到列表中并在其上设置模型来完成此操作:

QList<QComboBox*> my_combos;
// .. then populate my_combos .. then
QComboBox *combo;
foreach(combo, my_combos)
combo->setModel(&_my_model);

然后

QItemSelectionModel *selectionmodel = my_combos.at(0)->view()->selectionModel();
foreach(combo, my_combos)
{
if (combo == my_combos.at(0))
continue;
combo->view()->setSelectionModel(selectionmodel);
}

我是不是漏掉了一步?

最佳答案

选择的是红鲱鱼。 QComboBox 不允许选择多项。您所说的“选择”是当前索引。通过将 currentIndexChanged 信号连接到 setCurrentIndex,可以很容易地在组合框之间共享它:

// https://github.com/KubaO/stackoverflown/tree/master/questions/combo-shared-select-39247471
#include <QtWidgets>
#include <array>

int main(int argc, char ** argv) {
QApplication app{argc, argv};
QStringListModel model;
model.setStringList({ "foo", "bar", "baz "});

QWidget ui;
QHBoxLayout layout{&ui};
std::array<QComboBox, 3> combos;
// setIndices could be a method in a class
auto setIndices = [&combos](int index) {
for (auto & combo : combos)
combo.setCurrentIndex(index);
};
for (auto & combo : combos) {
using namespace std::placeholders;
layout.addWidget(&combo);
combo.setModel(&model);
QObject::connect(&combo,
static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
setIndices);
}
ui.show();

return app.exec();
}

旁注:您可以按值保存小部件。如果它们的数量在编译时是固定的,则使用 std::array。否则,您可以将 std::listemplace_back 一起使用。由 ValueGuy 签名。

关于c++ - 如何强制多个 View 显示相同的模型行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39247471/

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