• 5664阅读
  • 4回复

[提问]关于QAbstractItemModel::data () 函数的问题,请老鸟们帮忙看一下 [复制链接]

上一主题 下一主题
离线rpdhunter
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-06
模型视图编程,视图是一个QTableVew实例,模型是自定义的继承自QAbstractTableModel类,但是编译时会出现错误——


错误:passing 'const ObservedLine' as 'this' argument of 'QString ObservedLine::name()' discards qualifiers


代码如下:


//mymodel.h
class ObLineListModle : public QAbstractTableModel
{  
Q_OBJECT
public:    
explicit ObLineListModle(QObject *parent = 0);    
int rowCount(const QModelIndex &parent) const;  
int columnCount(const QModelIndex &parent) const;  
QVariant data(const QModelIndex &index, int role) const;

private:    
QList<ObservedLine> obLineList;     //自定义数据
};

//myModel.cpp
ObLineListModle::ObLineListModle(QObject *parent) :    QAbstractTableModel(parent)
{
}
int ObLineListModle::rowCount(const QModelIndex &parent) const
{    
return obLineList.count();
}
void ObLineListModle::modelInit(QList<ObservedLine> list)
{    
this->obLineList = list;  
}
int ObLineListModle::columnCount(const QModelIndex &parent) const
{    
return 1;
}
QVariant ObLineListModle::data(const QModelIndex &index, int role) const
{    
if(!index.isValid())        
return QVariant();    
if (role != Qt::DisplayRole)        
return QVariant();    
int row=index.row();    
int column=index.column();  
if(row>=obLineList.count())        
return QVariant();
    switch(column)
    {    
        case 0:        
        return this->obLineList.at(row).name();  //错误就在这一行  
        default:        
        return QVariant();    
    }
}

//自定义数据类
class ObservedLine
{
public:
    ObservedLine();
    QString name();  
private:        
    QString _name;       //观测线名称
};



离线pxiao_xiao

只看该作者 1楼 发表于: 2013-03-06
把this->拿掉
离线rpdhunter

只看该作者 2楼 发表于: 2013-03-06
回 1楼(pxiao_xiao) 的帖子
this拿掉了还是不行啊
离线pxiao_xiao

只看该作者 3楼 发表于: 2013-03-06
this->obLineList.at(row).name(); 问题出在at()上 改成this->obLineList[row].name();
离线rpdhunter

只看该作者 4楼 发表于: 2013-03-07
回 3楼(pxiao_xiao) 的帖子
多谢仁兄,不过问题不是出在这里。

今天问题已经解决,问题出在

QAbstractTableModel::data ()函数是一个 const类型的函数,而我自定义模型的name()函数没有加限定符const,语法检查就不通过了

修改我的name() 函数为const,问题就解决了
快速回复
限100 字节
 
上一个 下一个