首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSQLTableModel继承者与QTableView

QSQLTableModel继承者与QTableView
EN

Stack Overflow用户
提问于 2013-01-30 21:08:44
回答 1查看 4K关注 0票数 1

我编写了用于使用qml的QSQLTableModel继承者,它运行得很好。数据显示,我也需要在QTableView中使用它,但我不能修改它--当我编辑所有内容时,所有更改都会在我从字段中退出时下降(我知道editStrategy,但问题发生得更早)。我猜想虚拟功能有问题,但我无法决定什么。如果我使用相同的参数创建QSqlTableModel,那么一切都是正常的。有人知道我怎么解决这个问题吗?我的代码:

h:

代码语言:javascript
复制
class ListModel : public QSqlTableModel
{

    Q_OBJECT
    Q_PROPERTY( int count READ rowCount() NOTIFY countChanged())

signals:
    void countChanged();

public:
    Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const;
    ListModel(QObject *parent, QSqlDatabase _db):QSqlTableModel(parent,_db){this->setEditStrategy(QSqlTableModel::OnManualSubmit);}
    void applyRoles();
#ifdef HAVE_QT5

virtual QHash<int, QByteArray> roleNames() const{return roles;}

#endif

private:
    int count;
    QHash<int, QByteArray> roles;
};

cpp:

代码语言:javascript
复制
//based on http://qt-project.org/wiki/How_to_use_a_QSqlQueryModel_in_QML

void ListModel::applyRoles()
{
    roles.clear();
    qDebug()<<"\n"<<this->tableName();
    for (int i = 0; i < this->columnCount(); i++) {
            QString role=this->headerData(i, Qt::Horizontal).toString();
            roles[Qt::UserRole + i + 1] = QVariant(role).toByteArray();
            qDebug()<<this->headerData(i, Qt::Horizontal);
    }
#ifndef HAVE_QT5
    setRoleNames(roles);
#endif
}

QVariant ListModel::data(const QModelIndex &index, int role) const{

    QVariant value;
    if(role < Qt::UserRole)
    {
        value = QSqlQueryModel::data(index, role);
    }
    else {
        int columnIdx = role - Qt::UserRole - 1;
        QModelIndex modelIndex = this->index(index.row(), columnIdx);
        value = QSqlQueryModel::data(modelIndex, Qt::DisplayRole);
    }
    return value;
}

UPD --我知道问题在data方法的量词const中,如果我删除它,QTableView就没有问题,但是我不能从模型中获得数据,使用gml的列表视图。我只看到一个解决方案--用聚合代替QSqlTableModel的间歇,但也许有人知道更好的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-04 21:14:56

摘要:使用从QSqlRelationalTableModel而不是QSqlTableModel继承的奇怪的黑客解决问题,我认为原因是QSqlRelationalTableModel重写了非虚拟方法数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14613824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档