【问题标题】:[C++][ QT ] is not meant to be copied. Pass it by move instead[C++][ QT ] 不是用来复制的。而是通过移动传递它
【发布时间】:2022-01-06 14:42:07
【问题描述】:

我是 C++ 的初学者。而且我不明白这个错误。我只需要你解释一下。

我尝试在 QTableview 中显示 .sqlite 数据库。问题来自:

model->setQuery(*qry);

我想使用一个名为 setQuery 的函数,但在第一个参数中,我设置了一个 *QSqlQuery 类型的对象。并且出现了这个错误。

ERROR Pics

ma​​inwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlDatabase>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    QSqlDatabase DB;
    QSqlQueryModel* model;

};
#endif // MAINWINDOW_H

ma​​inwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;

    DB = QSqlDatabase::addDatabase("QSQLITE");
    DB.setDatabaseName("Prices.sqlite");

    if (DB.open()) {
        qDebug() << "Open";

        model = new QSqlQueryModel();

        QSqlQuery* qry = new QSqlQuery(DB);
        qry->prepare("SELECT * FROM Prices");
        qry->exec();

        model->setQuery(*qry);
        ui->tableView->setModel(model);

        qDebug() << "Rows: " << model->rowCount();

        DB.close();
    }
    else {
        qDebug() << "Failed connection";
    }
}


【问题讨论】:

  • 第一关:这是一条警告消息,而不是错误。
  • 第二个:QSqlQuery 正在泄漏。在堆栈上创建它,然后通过 std::move() 将它传递给 setQuery()

标签: c++ qt qt6


【解决方案1】:

他们希望你将qry 后面的对象移到函数中。

最短的变化就是替换

model->setQuery(*qry);

model->setQuery(std::move(*qry));
delete qry;

不过,在这种情况下,您不需要使用 new/delete。只需使用自动存储持续时间即可:

    QSqlQuery qry(DB);
    qry.prepare("SELECT * FROM Prices");
    qry.exec();
    model->setQuery(std::move(qry));

那你就不用担心忘记删除了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2021-03-15
    相关资源
    最近更新 更多