如何将数据(Qt :: UserRole)设置为QSqlQueryModel列?

时间:2012-02-02 18:59:16

标签: c++ qt

我有处理数据的QSqlQueryModel,我试图将Qt :: UserRole设置为列 但我无法想办法实现数据方法: 基本上我想要的是隐藏ndex.column()4的Qt :: DisplayRole并将其设置为Qt :: UserRole

   QVariant MyListSqlModel::data(const QModelIndex &index, int role) const
    {
        QVariant value = QSqlQueryModel::data(index, role);
     QVariant valueEmpty = "";
      int j = index.column();
        if (value.isValid() && role == Qt::DisplayRole && j== 4 )
     {

      QModelIndex LinkIndex = QSqlQueryModel::index(index.row(),4);
      setData(LinkIndex,value,Qt::UserRole); // this is not working and gives me erorr


      return valueEmpty;
     }
     else
     {
       return value;
     }
    }

它给我这个错误,我知道它的实现方法是不是const

error C2662: 'MyListSqlModel::setData' : cannot convert 'this' pointer from 'const MyListSqlModel' to 'MyListSqlModel&'

但是这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我从代码中了解到您要忽略第4列的Qt::DisplayRole。在这种情况下,您不必处理UserRole但只返回空QVariant

QVariant MyListSqlModel::data(const QModelIndex &index, int role) const
{
   if(index.column() == 4 && role == Qt::DisplayRole)
          return QVariant();

   //else process the data in ususal way
}

如果我误解了这个问题,请纠正我

修改

感谢您的评论。我已经开始为我的模型使用自定义角色。工作流程如下:

  

在标题

中定义自定义用户角色
enum MyDataRoles {
   MyDisplayRole = Qt::UserRole + 10
}
  

现在setData我正在使用here的代码段。

     

要获取数据,您可以使用here中的代码段。您只需检查MyDisplayRole

即可

我希望有帮助:)