QTableView禁用单列选择

QTableView disable selection of single column

本文关键字:选择 单列 QTableView      更新时间:2023-10-16

我在Qt中有一个由MySQL查询生成的QTableView,如下所示:

tableView = new QTableView(this);
tableView->setModel(tableModel); 
tableView->setSelectionBehavior(QAbstractItemView::SelectItems); 
tableView->resizeColumnsToContents(); 

其中,tableModelQSqlTableModel*。我发现这里的解决方案是item->setFlags(item->flags() & ~Qt::ItemIsEditable);,但我不会逐项将数据添加到表中。那么,在这种情况下,解决方案是什么呢?

QSqlTableModel继承您自己的模型类并重新实现flags()方法。

可能是这样的:

class CMySqlTableModel : public QSqlTableModel
{
    public:
        CMySqlTableModel(QObject* parent)
            :    QSqlTableModel(parent)
        {}
        /**
         * Enable / disable selection for particular column.
         *
         */
        void setSelectionEnabledOnColumn(int columnIndex, bool enabled)
        {
            if (enabled)
                m_columnsNotSelectable.erase(columnIndex);
            else
                m_columnsNotSelectable.insert(columnIndex);
        }
        Qt::ItemFlags flags(const QModelIndex & index) const override
        {
             Qt::ItemFlags f = QSqlTableModel::flags(index);
             if (m_columnsNotSelectable.find(index.column()) != m_columnsNotSelectable.end())
                 f &= ~Qt::ItemIsSelectable;
             return f;
        }
    private:
        std::set<int> m_columnsNotSelectable;
}