es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

[C++] [QT] no está destinado a ser copiado. En vez de eso, pásalo por movimiento.

Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdownSoy un principiante en C++. Y no entiendo este error. Solo necesito que me lo expliques.

Intento mostrar una base de datos .sqlite en un QTableview. el problema viene de:

model->setQuery(*qry);

Quiero usar una función llamada setQuery pero en el primer argumento, establecí un objeto con el tipo *QSqlQuery. Y aparece este error.

Imágenes de ERROR

mainwindow.h


<h1>ifndef MAINWINDOW_H</h1> <h1>define MAINWINDOW_H</h1> <h1>include <QMainWindow></h1> <h1>include <QSqlQuery></h1> <h1>include <QSqlQueryModel></h1> <h1>include <QSqlDatabase></h1> QT<em>BEGIN</em>NAMESPACE namespace Ui { class MainWindow; } QT<em>END</em>NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; <pre><code>QSqlDatabase DB; QSqlQueryModel* model; </code></pre> }; <h1>endif // MAINWINDOW_H</h1>

mainwindow.cpp


<h1>include "mainwindow.h"</h1> <h1>include "ui_mainwindow.h"</h1> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; <pre><code>DB = QSqlDatabase::addDatabase(&quot;QSQLITE&quot;); DB.setDatabaseName(&quot;Prices.sqlite&quot;); if (DB.open()) { qDebug() &lt;&lt; &quot;Abierto&quot;; model = new QSqlQueryModel(); QSqlQuery* qry = new QSqlQuery(DB); qry-&gt;prepare(&quot;SELECT * FROM Prices&quot;); qry-&gt;exec(); model-&gt;setQuery(*qry); ui-&gt;tableView-&gt;setModel(model); qDebug() &lt;&lt; &quot;Filas: &quot; &lt;&lt; model-&gt;rowCount(); DB.close(); } else { qDebug() &lt;&lt; &quot;Conexión fallida&quot;; } </code></pre> }
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que no hay una función coincidente para la llamada a QSqlQueryModel:: setQuery(QSqlQuery&), lo que significa que setQuery() no puede aceptar un argumento de tipo QSqlQuery&.

    Para solucionar este error, puede intentar cambiar la línea:

    model->setQuery(*qry);

    a:

    model->setQuery(qry->executedQuery());

    Esto pasará un objeto QString (la consulta SQL ejecutada) a setQuery() en lugar de un objeto QSqlQuery.

    Alternativamente, puede cambiar el tipo de qry de QSqlQuery* a QSqlQuery, y luego modificar el código de esta manera:

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

    De esta manera, setQuery() aceptará el argumento de tipo QSqlQuery, y ya no necesitará hacer referencia al puntero.

    ¡Espero que esto ayude!

Comments are closed.