我是 C 的初學者。我不明白這個錯誤。我只需要你給我解釋一下。
我嘗試在 QTableview 中顯示 .sqlite 資料庫。問題來自:
model->setQuery(*qry);
我想使用一個名為 setQuery 的函式,但在第一個引數中,我設定了一個 *QSqlQuery 型別的物件。這個錯誤出現了。
錯誤圖片
主視窗.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
主視窗.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";
}
}
uj5u.com熱心網友回復:
他們希望您將后面的物件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));
然后你不必擔心忘記洗掉它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/378526.html
