QComboBox - 选择无条目

15

我在我的UI上有一个QComboBox,并像这样设置模型:

QStringListModel* model = new QStringListModel;
QStringList stringlist;
stringlist << "Test1" << "Test2" << "Test3";

model->setStringList(stringlist);
ui->comboBox->setModel(model);

现在我想将当前索引更改为无(以便获得空白组合框)。

我已经尝试使用ui->comboBox->setCurrentIndex(-1);将当前索引设置为-1,但这会导致在qlist中出现索引超出范围异常:

ASSERT failure in QList<T>::operator[]: "index out of range", file F:/Qt/5.4/mingw491_32/include/QtCore/qlist.h, line 486

您可以创建自己的模型,对于无效的索引,它将返回一个空的 QString()。或者只需子类化 QStringListModel 并覆盖 data 方法(以及可能的 index 方法)。 - Dmitry Sazonov
4
看起来 ui->comboBox->setCurrentIndex(-1); 工作得非常好。崩溃是由于我的代码故障引起的。 - iBent
1个回答

15

普通(不可编辑)QComboBox不允许选择“无项目”的状态。 选择必须始终有效。

你需要在第一位置添加一个空字符串项目,并且你可能想要查看此主题,以使这个虚假项目不可选择:https://dev59.com/VWsz5IYBdhLWcg3w0rZC#7633081


编辑:实际上,对于任何组合框(可编辑或不可编辑),都可以将选择设置为-1。因此,没有必要像上面提出的那样添加一个空项。


9
请在您的答案中添加一个符合OP评论“..ui->comboBox->setCurrentIndex(-1);完美地工作...”的编辑,问题是接受的答案令人困惑。 - Mohammad Kanan
1
@MoKanan-ReinstateMonica:完成 - jpo38

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接