找回密码
 立即注册
收起左侧

重写QSqlQueryModel的data函数,data函数对每个数据项执行多次

2
回复
8160
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2016-9-1 09:49:15 显示全部楼层 |阅读模式
4Qter豆
引用Qt 文档 Model/View Tutorial 中的一个QSqlQueryModel::data的一个例子
QVariant MyModel::data(const QModelIndex &index, int role) const
{
    int row = index.row();
    int col = index.column();
    // generate a log message when this method gets called
    qDebug() << QString("row %1, col%2, role %3")
            .arg(row).arg(col).arg(role);

    switch(role){
    case Qt:isplayRole:
        if (row == 0 && col == 1) return QString("<--left");
        if (row == 1 && col == 1) return QString("right-->");

        return QString("Row%1, Column%2")
                .arg(row + 1)
                .arg(col +1);
        break;
    case Qt::FontRole:
        if (row == 0 && col == 0) //change font only for cell(0,0)
        {
            QFont boldFont;
            boldFont.setBold(true);
            return boldFont;
        }
        break;
    case Qt::BackgroundRole:

        if (row == 1 && col == 2)  //change background only for cell(1,2)
        {
            QBrush redBackground(Qt::red);
            return redBackground;
        }
        break;
    case Qt::TextAlignmentRole:

        if (row == 1 && col == 1) //change text alignment only for cell(1,1)
        {
            return Qt::AlignRight + Qt::AlignVCenter;
        }
        break;
    case Qt::CheckStateRole:

        if (row == 1 && col == 0) //add a checkbox to cell(1,0)
        {
            return Qt::Checked;
        }
    }
    return QVariant();
}

这个data为什么对每一个数据项都要执行7遍,也就是说每显示一个数据,都调用了7次data(),如果显示的是2行3列,这个data()会执行42次,这是什么原因?

回复

使用道具 举报

累计签到:70 天
连续签到:1 天
2016-9-6 10:20:04 显示全部楼层
由role个数决定的吧。你尝试减少你的role看看。
回复

使用道具 举报

尚未签到

2016-12-27 23:05:48 显示全部楼层
这个问题有人回复下吗?
是因为7个常用Role的关系吗?

Data函数什么时候被调用呢,每一次渲染Item 单元格?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了