QTableView 禁用选择单列

Posted

技术标签:

【中文标题】QTableView 禁用选择单列【英文标题】:QTableView disable selection of single column 【发布时间】:2016-05-01 15:59:50 【问题描述】:

我有一个由 Qt 中的 mysql 查询制成的 QTableView,如下所示:

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

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

【问题讨论】:

遍历项目,不是吗? 那是什么语法? 【参考方案1】:

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;

【讨论】:

以上是关于QTableView 禁用选择单列的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 QTableView:如何在保持默认样式/颜色的同时禁用用户交互/选择?

QTableView 中标题单元格中的复选框

选择单元格时,更改 QTableView 中图标的颜色突出显示

如何在 QTableView 中禁用编辑模式?

pyqt qt4 QTableView 如何禁用某些列的排序?

底层模型更改时如何在 QTableView 中禁用自动滚动到顶部?