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创建自定义对话框,这是非常好的。