【问题标题】:QComboBox::findData() always returns -1QComboBox::findData() 总是返回 -1
【发布时间】:2013-10-21 10:31:51
【问题描述】:

我正在尝试从QCombobox使用finddata(索引)中获取模型中记录的ID,但在选择一个项目时,它将重新调整-1。它一直在另一个项目中工作,但这是第二个不起作用的项目。这是我的代码:

modAnfi = new QSqlTableModel(this);
modAnfi->setQuery("SELECT id, (nombres || ' ' || apellidos) as Nombre, nombres, apellidos FROM tbPersonas WHERE activo=1");
comboAnfitrion->setModel(modAnfi);
comboAnfitrion->setModelColumn(1);
comboAnfitrion->setEditable(true);
comboAnfitrion->completer()->setCompletionMode(QCompleter::PopupCompletion);

connect(comboAnfitrion, SIGNAL(currentIndexChanged(int)), this, SLOT(currentIndexChangeAnfitrion(int)));

和:

void controlReg::currentIndexChangeAnfitrion(int index)
{

    qDebug() << comboAnfitrion->findData(index); // -1
    qDebug()<< comboAnfitrion->itemData(1); // QVariant(Invalid) 
}

感谢您的宝贵时间,我们将不胜感激。

【问题讨论】:

    标签: c++ qt qcombobox qtgui


    【解决方案1】:

    您必须使用分配给组合框的模型,使用索引来查找它: modAnfi-&gt;data(modAnfi-&gt;index( index, 0));

    【讨论】:

    • 谢谢你,bluesky777,我不知道为什么 itemData 并不总是对我有用,但是使用 model->data 并传递索引,它对我有用。谢谢大家。
    【解决方案2】:

    检查QComboBox documentation;来自findData 的描述,引用:

    返回包含给定数据的项目的索引

    您将index 作为“给定数据”传递的位置。但是,索引已经是组合框中的索引。但是您显然不是在寻找索引(因为您已经有了一个)。

    我怀疑您实际上想调用itemData 方法?这将检索与给定索引的元素关联的数据。

    【讨论】:

    • 你是对的 findData,文档说我需要 itemData,但是看我的例子,它显示无效,现在我看到 Qt::DisplayRole 它返回索引!为什么?也许是查询?我如何指定在组合框中具有主键的列,或者......我不知道。请帮帮我。
    • 对不起,我会正确解释:当我使用 findData 时返回-1;带有 Qt::displayRole 的 findData 返回索引;当我使用 itemData 返回 QVariant(Invalid);并且当我将 itemData 与 Qt::DisplayRole 一起使用时,返回 QVariant(Qstring, "Name And LastName")。我需要所选项目的 id,如何检索它?非常感谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2019-10-10
    • 2014-04-13
    • 2017-03-20
    • 2013-11-04
    • 2011-12-09
    • 2012-07-08
    相关资源
    最近更新 更多