【问题标题】:View is not redrawn after updating QSqlTableModel更新 QSqlTableModel 后视图不重绘
【发布时间】:2011-04-16 15:30:20
【问题描述】:

QSqlTableModel 有一个子类。

class TaskManager : public QSqlTableModel
{
    Q_OBJECT
public:

    explicit TaskManager(QObject *parent = 0){}
    void initMode();      
    bool addTask(Task &task);
    ...
}

这是 initModel()

void TaskManager::initModel()
{
    setTable(currenttasks);
    setEditStrategy(QSqlTableModel::OnFieldChange);
    select();
}

这是 addTask 方法

bool TaskManager::addTask(Task &task)
{
    QSqlQuery query;
    query.prepare("INSERT INTO currenttasks (description, numbers, imageid) "
                  "VALUES (:descr, :numbers, :imageid)");

    query.bindValue(":descr",   task.description);
    query.bindValue(":numbers", task.numbers);
    query.bindValue(":imageid", task.imageid);
    bool res = query.exec();
    reset();
    return res;
}

还有一个关于 QML 的观点。但是,如果我单击调用 addTask() 方法的“添加”按钮,我将看不到结果。视图不会重绘。还有一个代理 QMLifyProxyModel 继承自 QAbstractProxyModel 但我不认为这是问题所在。 当我重新启动应用程序时,我可以看到数据库中的更改。 好像模型更新后没有读取数据。

顺便说一下,我在查询后尝试发出 layoutChanged(),但没有结果。 我需要做什么才能立即在视图中获得新记录? 谢谢。

【问题讨论】:

    标签: c++ database qt mvvm qtsql


    【解决方案1】:

    是的,我知道这是一个老问题,但我会为以后可能需要它的任何人提供答案。

    据我所知,QSqlQuery 只会更新数据库而不是模型。

    我会使用 QSqlTableModel 的功能:

    bool TaskManager::addTask(Task &task)
    {
        QSqlRecord record = this->record();
        record.setValue("description", task.description);
        record.setValue("numbers", task.numbers);
        record.setValue("imageid", task.imageid);
    
        // -1 means append
        return insertRecord(-1, record);
    }
    

    作为documentation says

    在位置行插入记录。如果 row 为负数,则记录将附加到末尾。在内部调用 insertRows() 和 setRecord()。 如果可以插入记录,则返回 true,否则返回 false。 OnFieldChange 和 OnRowChange 的更改会立即提交。失败不会在模型中留下新行。

    这应该可以更新数据库和模型。

    【讨论】:

      【解决方案2】:

      根据QMLifyProxyModel 的文档,它说它还不支持在更改源模型时更新模型。 因此,如果您使用 QMLifyProxyModel 从 QSqlTableModel 转换到 QML ListView,这可能就是您的视图未刷新的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        • 2019-05-12
        • 2017-03-07
        • 2017-11-11
        相关资源
        最近更新 更多