C++ QInputDialog.getItem()获取项目索引

C++ QInputDialog.getItem()获取项目索引,c++,qt,dialog,C++,Qt,Dialog,我有一些列表和对话框。我的列表中可能有相同的字符串,所以我不想得到字符串结果,而是要得到项索引。是真的吗 QStringList list; for (Serial serial: serialList->vector) { list.append(serial.name); } QInputDialog *dialog = new QInputDialog(); bool accepted; QString item = dialog->getItem(0, "Title

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

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
}
QStringList列表;
用于(串行:串行列表->矢量){
list.append(serial.name);
}
QInputDialog*dialog=新建QInputDialog();
布尔接受;
QString item=dialog->getItem(0,“标题”,“标签:”,列表,0,false,&接受);
if(已接受&&!item.isEmpty()){
qDebug()???;//这里我想查看所选项的索引
}

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

没有,
QInputDialog
没有这样的方法。当然,这个信息在对话框中有一个组合框

您可以访问此组合框吗? 我认为这不是个好主意。查看
对话框的

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
中的正常做法(隐藏实现细节)

可能是最好的解决方案: 使用
QStringList
中的方法。例如:

int index = list.indexOf(item);

谢谢我首先想到了这个解决方案,但正如我所说的字符串可能是相同的,所以我不能用这种方式解决我的问题。@Efog-Hm,这真的是个问题,您确定这里需要相同的字符串吗,用户应该如何知道这些项之间的区别,例如,您可以使用相同的、相同的(1)、相同的(2)吗只是为了避免完全相同的字符串?这里有一个可以通过链接添加的电影列表。所以,若用户添加了两个相同的电影,他会想删除第二个。(1) (2)这是个好主意。我用另一种方式“解决”了我的问题:在我的列表中,我在电影名称前加上了“1.”、“2.”,然后加上
int index=item.split('..)[0].toInt()-1
:D当然,你的解决方案更好。谢谢@Efog非常好,因为如果没有它,我们需要使用combobox创建自己的对话框(因为使用d指针可能非常困难和漫长)。QInputDialog只是一个非常普通的类,我们使用它来处理int、text、combox等等,当然在这种情况下我们无法获得完全控制,所以任务的规范允许您避免使用combobox创建自定义对话框,这是非常好的。