我正在编写一个QT应用程序,其中有3个QComboBox,带有一个值列表。我正在尝试这样做,当我在QComboBox中选择一个项目时,我将从其他QComboBox中删除它,当我选择另一个或什么都没有时,它将再次出现在其他QComboBox中。
你有什么想法吗?
编辑: 我曾尝试使用QStringList,我有一个插槽,将其从其他QComboBox中删除,但它非常有问题,经常插入2个空格和相同的饮料两次。
答案 0 :(得分:0)
如果所有组合框都包含相同的项目,那么您可以使用一个组合框的当前索引来禁用和隐藏其他组合框的索引。
你可以只是QComboBox
的子类并创建一个这样的插槽:
void MyComboBox::disableItem(int index)
{
QListView *list_view = qobject_cast<QListView*>(view());
if(list_view)
{
QStandardItemModel *model = qobject_cast<QStandardItemModel*>(list_view->model());
list_view->setRowHidden(index, true);
if(model)
{
model->item(index, 0)->setEnabled(false);
}
}
}
然后,您只需将来自其他组合框的QComboBox::currentIndexChanged(int index)
信号连接到此插槽。对所有3个组合框执行此操作。
您还应创建一个逻辑,以便在不应禁用项目时再次启用和显示这些项目。它与上面的功能几乎相同。您可以创建一个应该为该组合框隐藏的索引列表,并使用它来显示所有其他索引。