查看完整版本: [-- 继承QAbstractTableModel后,重写自己的模型出现的问题 --]

QTCN开发网 -> Qt基础编程 -> 继承QAbstractTableModel后,重写自己的模型出现的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lwei24 2022-04-27 09:58

继承QAbstractTableModel后,重写自己的模型出现的问题

如题,在项目中,要在QTableView里的某一列插入某个图标,我写模型的代码如下:
  1. QVariant SmartModel::data(const QModelIndex &index, int role) const
    {
        if(!index.isValid())
            return false;

        if(index.row() >= rowCount() || index.row() < 0 || index.column() >= columnCount() || index.column() < 0)
            return false;

        switch(role)
        {
        case Qt::DisplayRole:
        {
            if(index.column() == 0) //ID
                return QVariant(m_recordList[index.row()].strIdx);

            if(index.column() == 2) //Description
                return QVariant(m_recordList[index.row()].strDescrition);

            if(index.column() == 3)
                return QVariant(m_recordList[index.row()].strCurrentValue);

            if(index.column() == 4)
                return QVariant(m_recordList[index.row()].strWorstValue);

            if(index.column() == 5)
                return QVariant(m_recordList[index.row()].strThreshold);

            if(index.column() == 6)
                return QVariant(m_recordList[index.row()].strRawValue);
        }
        case Qt::TextAlignmentRole:
        {
            return QVariant(Qt::AlignHCenter | Qt::AlignVCenter);
        }
        case Qt::DecorationRole:
        {
            if(index.column() == 1) //Status
            {
    #if 0
                QString strStatus = m_recordList[index.row()].strStatus;
                if(strStatus.toInt() == 1)
                    return QVariant(QIcon(":/image/GooderCircle16.png"));
                else if(strStatus.toInt() == 2)
                    return QVariant(QIcon(":/image/NormalCircle16.png"));
                else if(strStatus.toInt() == 3)
                    return QVariant(QIcon(":/image/DangerCircle16.png"));
                else
                    return QVariant(QIcon(""));
    #else
                return QVariant();
    #endif
            }
        }
            break;
        default:
            return QVariant();
        }
        return QVariant();
    }


问题:在插入图标的第一列,莫名其妙的出现一个数字132,我明明在模型里Qt::DecorationRole添加的是图标,但是它却显示图标加上132这个数字。为了弄清楚132这个数字是怎么插入第一列的,我把Qt::DecorationRole判断第一列的代码注释了,然后直接返回一个空的QVariant。结果,在第一列上还是会插入132.各位大佬,请问这是为啥呢?我明明没有赋值132或在模型里的第一列插入132,它会显示在我写的QTableView的第一列中。我定位分析了很久,没有找到问题出在哪里。请各位大佬帮忙看看,有什么办法可以解决这个问题吗?欢迎各位大佬指点,小弟感激不尽!!!


查看完整版本: [-- 继承QAbstractTableModel后,重写自己的模型出现的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled