python - 如何过滤QComboBox的数据

标签 python qt pyqt pyqt4

我在每一行都有一个 tableWidget,我插入一个具有相同数据源的组合框,我希望当用户从组合框中选择一个项目时,它不会在其他组合框中找到

最佳答案

我希望您熟悉 C++ 语法。

  1. 使用您的 QComboBox 数据(例如,基于 QStandardItemModel)创建一项模型(适用于所有组合框)
  2. 声明自定义用户角色 (const int ComboIdRole = Qt::UserRole + 1;)。它将保留我们选择项目的组合框的“ID”。
  3. 创建自定义过滤器模型(基于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;
  }
};
  1. 为每个 QComboBox 创建 1 个过滤模型。并将此模型设置为组合框的源。
  2. 在选择更改信号时,您应该为所选项目设置必要的角色。并且不要忘记将 0 设置为未选择的项目。
  3. 利润!

主要概念 - 使用Qt MVC(模型+过滤模型)并将其设置为QComboBox的源模型

附注stackoverflow 格式有问题:(

关于python - 如何过滤QComboBox的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22454264/

相关文章:

python - 检查 Python 中的 TensorFlow 版本 - "tf.__version__"与 "tf.VERSION"?

python - 在 Scala 中将方法作为函数传递 - 从 Python 转换

python - 使用 Ctypes (SpecialKEval) 将 C++ 代码嵌入到 Python 中

c++ - 如何使用 -reduce-relocations 构建 QT

python - Tox 失败,因为 setup.py 找不到 requirements.txt

c++ - 调整列宽 QTableWidget

c++ - QImage padding - 任何可用的功能?

python - QLineEdit 设置标题大小写

python - 如何通过回调更新 PyQt 中的散点图?

python - PyQt 优雅的命令行参数解析