【问题标题】:QInputDialog.getItem() get item indexQInputDialog.getItem() 获取项目索引
【发布时间】:2015-01-03 21:51:46
【问题描述】:

我有一些列表和QInputDialog。我的列表中可能有相同的字符串,所以我想要的不是字符串结果而是项目索引。是真的吗?

QStringList list;
for (Serial serial: serialList->vector) {
    list.append(serial.name);
}

QInputDialog *dialog = new QInputDialog();
bool accepted;
QString item = dialog->getItem(0, "Title", "Label:", list, 0, false, &accepted);
if (accepted && !item.isEmpty()) {
    qDebug() << dialog->?????; //here i want to see index of choosen item
}

我尝试使用result(),但它不起作用。请帮忙。

【问题讨论】:

    标签: c++ qt dialog


    【解决方案1】:

    不,QInputDialog 没有这种方法。但当然,这些信息在对话框中有组合框。

    你能访问这个组合框吗?

    我认为这不是一个好主意。看QInputDialogsource code

    void QInputDialog::setComboBoxItems(const QStringList &items)
    {
        Q_D(QInputDialog);
        d->ensureComboBox();
        d->comboBox->blockSignals(true);
        d->comboBox->clear();
        d->comboBox->addItems(items);
        d->comboBox->blockSignals(false);
        if (inputMode() == TextInput)
            d->chooseRightTextInputWidget();
    }
    

    如您所见,您的组合框被d-pointer 隐藏,这是Qt 中的正常做法(隐藏实现细节)。 More information here.

    可能是最好的解决方案:

    使用来自QStringListindexOf() 方法。例如:

    int index = list.indexOf(item);
    

    【讨论】:

    • 谢谢。我首先想到了这个解决方案,但正如我所说的字符串可能是相同的,所以我无法以这种方式解决我的问题。
    • @Efog 嗯,这真的是个问题,你确定这里需要相同的字符串吗,用户应该如何知道这些项目之间的区别,你可以例如使用 Same,Same(1),Same (2) 只是为了避免使用完全相同的字符串?
    • 有可以通过链接添加的电影列表。因此,如果用户添加 2 部相同的电影,他将要删除第二部。 (1) (2) 是个好主意。我以另一种方式“解决”了我的问题:在我的列表中,我在电影名称之前添加了“1.”、“2.”,然后是 int index = item.split('.')[0].toInt() - 1:D 当然,您的解决方案更好。谢谢!
    • @Efog 非常好,因为没有这个我们需要用组合框创建我们自己的对话框(因为玩 d-pointer 真的很辛苦很长)。 QInputDialog 只是一个非常通用的类,我们将它用于 int、text、comboxes 等,当然在这种情况下我们无法完全控制,因此您的任务规范允许您避免使用创建自定义对话框非常好组合框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多