C++ 从一个组合框中选择项,然后从其他组合框中删除该项

C++ 从一个组合框中选择项,然后从其他组合框中删除该项,c++,qt,qcombobox,C++,Qt,Qcombobox,我正在编写一个QT应用程序,其中我有3个QComboxes和一个值列表。我正在尝试这样做,当我在一个QCOMBOX中选择一个项目时,我会将其从其他QCOMBOX中删除,当我选择另一个或什么都不选择时,它会再次出现在其他QCOMBOX中 你对此有什么想法吗 编辑: 我曾尝试使用QStringList,在那里我有一个插槽,它将它从其他QComboxes中删除,但它有很多错误,经常插入两个空格和相同的饮料两次。如果所有组合框都包含相同的项,那么您可以使用一个组合框的当前索引来禁用和隐藏其他组合框的索引

我正在编写一个QT应用程序,其中我有3个QComboxes和一个值列表。我正在尝试这样做,当我在一个QCOMBOX中选择一个项目时,我会将其从其他QCOMBOX中删除,当我选择另一个或什么都不选择时,它会再次出现在其他QCOMBOX中

你对此有什么想法吗

编辑:
我曾尝试使用QStringList,在那里我有一个插槽,它将它从其他QComboxes中删除,但它有很多错误,经常插入两个空格和相同的饮料两次。

如果所有组合框都包含相同的项,那么您可以使用一个组合框的当前索引来禁用和隐藏其他组合框的索引

您只需子类化
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);
        }   
    }
}
void MyComboBox::disableItem(int索引)
{
QListView*list_view=qobject_cast(view());
如果(列表视图)
{
QStandardItemModel*model=qobject\u cast(列表视图->模型());
列表视图->设置行隐藏(索引,真);
if(型号)
{
模型->项目(索引,0)->设置启用(false);
}   
}
}
然后您只需将来自其他组合框的信号连接到此插槽。对所有3个组合框执行此操作


您还应该创建一个逻辑,以便在不应禁用项时再次启用和显示这些项。它的功能与上面的几乎相同。您只需为该组合框创建一个应隐藏的索引列表,并使用该列表显示所有其他索引。

所有组合框是否都有相同的项目?如果未选择任何内容,则为“是”。但例如,当在ComboBox1中选择一个项目时,它将从Combox2和Combox3中删除。因此,我尝试了您的解决方案,当我更改其中一个Combox1的索引时,它崩溃。我使用了一些qDebug消息,发现在我尝试转换ListView时发生了崩溃。首先,我无法编译,出现错误“term不计算为一个包含0个参数的函数”,然后认为视图后的()是一个错误,所以我尝试删除它们,但随后它崩溃了。我试图将视图更改为QObject::sender(),但这使其在QStandardItemModel转换时崩溃。@Thisen是
QComboBox
类的公共函数。尝试将局部变量
QListView视图
重命名为其他变量,如
QListView列表_视图