我在每一行都有一个qtableWidget我插入了一个组合框,当我从组合框中选择一个在其他组合框中找不到的项目时,我想要的数据源相同
答案 0 :(得分:1)
我希望您熟悉C ++语法。
QStandardItemModel
)const int ComboIdRole = Qt::UserRole + 1;
)。它将保留我们的ID"组合框,选择项目。QSortFilterProxyModel
),您将保留" ComboID"并重新实现filterAcceptsRow
方法:const int ComboIdRole = Qt::UserRole + 1; class ComboProxyModel : public QSortFilterProxyModel { //... public: ComboProxyModel( QComboBox *view ) : QSortFilterProxyModel( view ) { m_id = (quint64)view; // Or any id, must be uniqe for each combobox } private: quint64 m_id; bool filterAcceptsRow( int source_row, const QModelIndex& source_parent ) { const QModelIndex idx = source_parent.child( source_row, 0 ); const quint64 itemId = idx.data( ComboIdRole ).toULongLong(); if ( itemId != 0 ) { if ( itemId != m_id ) // Do not accept if item is already selected return false; // and skip current combobox } return true; } };
主要概念 - 使用Qt MVC(model + filteringModel)并将其设置为QComboBox的源模型
P.S。 stackoverflow格式化是错误的:(