【问题标题】:Set selected item for QComboBox为 QComboBox 设置选定项
【发布时间】:2013-10-26 02:43:34
【问题描述】:

我有一个简单的QComboBox 小部件,其中有两个值:TrueFalse。 我有一个 QString 变量currValue,它是这些值之一。我想用currValue 设置我的小部件的当前值。

我认为解决方案如下: 首先让我们初始化 currValue; QString currValue = "False";

QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findData(currValue));

但它不起作用。 难道我做错了什么 ? 为什么 QComboBox 没有成员 setCurrentItem() 或类似的东西?

【问题讨论】:

    标签: qt qcombobox


    【解决方案1】:

    其实你需要这样写:

    QComboBox* combo = new QComboBox();
    combo->addItem("True", "True");
    combo->addItem("False", "False");
    combo->setCurrentIndex(combo->findData("False"));
    

    您的实现中的问题是您没有设置项目的userData,而只是设置了文本。同时,您尝试通过其 userData 查找项目,该项目为空。 对于给定的实现,我只使用QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())) 函数的第二个参数来设置项目的userData (QVariant)。

    更新:

    查找组合框项的另一种方法是将特定角色设置为QComboBox::findData() 函数的第二个参数。如果不想显式设置用户数据,可以参考带有Qt::DisplayRole标志的项目文本,即:

    QComboBox* combo = new QComboBox();
    combo->addItem("True");
    combo->addItem("False");
    combo->setCurrentIndex(combo->findData("False", Qt::DisplayRole)); // <- refers to the item text
    

    更新 2:

    另一种选择是使用基于文本的查找函数QComboBox::findText()

    QComboBox* combo = new QComboBox();
    combo->addItem("True");
    combo->addItem("False");
    combo->setCurrentIndex(combo->findText("False"));
    

    【讨论】:

    • 为什么?! 2个相等的参数是什么意思??
    • 我明白了。但是在这种情况下,我认为如果我只有文本并且不需要数据,那么在添加新项目时我还必须设置数据是令人困惑的。我认为必须有更简单的方法来设置选定的文本。
    • @KarenTsirunyan:好吧,如果你不想设置用户数据,你可以参考组合框项目的文本。查看我的答案的另一个更新。
    • 我了解您提出了真正的解决方案,但正如您所看到的,有些奇怪,因为我想查找文本,但我使用数据。我刚刚发现QComboBox 也有findText() 方法,这正是我想要的。 :)
    • @KarenTsirunyan,我提出了三种不同的方法来获得相同的结果 - 你可以使用其中任何一种。
    【解决方案2】:

    我已经回答了我自己的问题。

    combo->setCurrentIndex(combo->findText(currValue));
    

    【讨论】:

    • 或者,您也可以拨打setCurrentText()
    猜你喜欢
    • 2011-05-19
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多