【问题标题】:QTableView - not allow user to edit cellQTableView - 不允许用户编辑单元格
【发布时间】:2010-11-22 15:28:37
【问题描述】:

我用 QSqlTableModel 创建了一个 QTableView。 按照标准,双击单元格将标记它们并且用户可以编辑它们。 我想要,不允许用户这样做。他可以通过单击单个单元格来标记整行,但不能编辑该单元格。 我该怎么做?

【问题讨论】:

    标签: c++ qt qt4 qtableview


    【解决方案1】:

    根据你是在设计器中编写所有代码还是在做事情,设置

    • editTriggersQAbstractItemView::NoEditTriggers
    • selectionBehaviorQAbstractItemView::SelectRows
    • 如果您希望用户只选择一行,可选择将 selectionMode 设置为 QAbstractItemView::SingleSelection

    在 tableview 对象上,适当的调用都将以 set 为前缀,例如在 Designer 中 setEditTriggers() 您可以在 AbstractItemView 部分找到这些选项

    【讨论】:

    • 它被称为 QAbstractItemView::NoEditTriggers、QAbstractItemView::SelectRows 和 QAbstractItemView::SingleSelection,但这正是我想要的。谢谢!
    • 但将其设置回 AllEditTriggers,不允许再编辑
    【解决方案2】:

    理想情况下你会想要使用:

    void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate )
    

    然后创建一个继承自 QItemDelegate 的类,就像在 this 示例中一样。 编辑你的班级以拥有

    QWidget * QItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const  
    

    返回NULL

    或使用:

    table->setEditTriggers(QAbstractItemView::NoEditTriggers);
    

    你也会想看看

    void setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )
    

    带参数:QAbstractItemView::SelectRows

    供参考: http://doc.trolltech.com/4.5/qtableview.html

    【讨论】:

      【解决方案3】:

      关闭表格项的ItemIsEditable 位。例如:

      QTableWidgetItem* item = new QTableWidgetItem(...);
      ...
      item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
      

      【讨论】:

        【解决方案4】:

        试试这个:

        table->setEditTriggers(QAbstractItemView::NoEditTriggers);
        

        【讨论】:

          猜你喜欢
          • 2012-01-18
          • 1970-01-01
          • 2012-04-07
          • 1970-01-01
          • 1970-01-01
          • 2020-05-03
          • 1970-01-01
          • 2013-08-24
          • 2020-03-28
          相关资源
          最近更新 更多