zoukankan      html  css  js  c++  java
  • Qt中QTableView中加入Check列实现

    通过Delegate创建QCheckBox来实现的Check列,只有在该列进入编辑模式时才能够Check/Uncheck。这显然不是我们想要的,网上翻来翻去,在一个国外论坛中看到了无需Delegate的实现方法,只需重写Model即可:

    class MyModel : public QSqlQueryModel {
        Q_OBJECT
    public:
        MyModel(QObject *parent = 0);
        Qt::ItemFlags flags(const QModelIndex &index) const;
        QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
    ........
    };
     
    Qt::ItemFlags MyModel::flags(const QModelIndex &index) const {
        Qt::ItemFlags flags = QSqlQueryModel::flags(index);
        if (index.column() == aColWithCheckbox)
            flags |= Qt::ItemIsUserCheckable;
        else
            flags |= Qt::ItemIsEditable;
        return flags;
    } 
     
    QVariant MyModel::data(const QModelIndex &index,  int role) const {
      QVariant value = QSqlQueryModel::data(index, role);
      if (role == Qt::CheckStateRole && index.column() == aColWithCheckbox)
        return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
      else
        return value;
    }
     

    bool MyModel::setData( const QModelIndex & index, const QVariant & value, int role)
    {
        if(index.isValid() && role == Qt::CheckStateRole&&index.column()==0)
        {
            if(value.value<int>()==Qt::Checked)
            {
                m_config->setAutoRun(index.row(), true);
            }
            else
            {
                m_config->setAutoRun(index.row(), false);
            }
            emit dataChanged(index, index);
            return true;
        }
        return false;
    }

  • 相关阅读:
    JavaScript:Number 对象
    JavaScript:Math 对象
    杂项:引用资源列表
    小团队管理与大团队管理
    技术转管理
    【翻译+整理】.NET Core的介绍
    自己开发给自己用的个人知识管理工具【脑细胞】,源码提供
    关于【自证清白】
    这篇博客能让你戒烟——用程序员的思维来戒烟!
    如果我是博客园的产品经理【下】
  • 原文地址:https://www.cnblogs.com/cute/p/1970696.html
Copyright © 2011-2022 走看看