Seite 1 von 1

setModel(QAbstractItemModel*) is private

Verfasst: 10. Februar 2010 00:31
von MSchuster
Hallo @ all
bin neu hier und werke erst seit kurzem mit QT. Habe bisher in Delphi programmiert. C++habe ich früher in einem 1/2 Jahres Kurs gelernt ist aber schon ewig her. Daher Sry für meine Anfängerfrage ^^

Bin gerade dabei mein Datenbankprogramm (in Delphi geschrieben) nun auch in QT zu schreiben.

So nun mal meine Fehlerstelle:

Code: Alles auswählen

void MainWindow::on_Btn_Kd_Suchen_clicked()
{
    Tdbverbindung dbverbindung;
    QSqlQueryModel *model = new QSqlQueryModel(ui->tableWidget_Person);
    model->setQuery(QSqlQuery("Select * from person",dbverbindung));
    ui->tableWidget_Person->setModel(model); //FEHLERSTELLE
}
In einem Beispiel sieht dies ziehmlich ähnlich aus und soll auch funktionieren:

Code: Alles auswählen

void Browser::exec()
 {
     QSqlQueryModel *model = new QSqlQueryModel(table);
     model->setQuery(QSqlQuery(sqlEdit->toPlainText(), connectionWidget->currentDatabase()));
     table->setModel(model);
   ..............
}
Kann mir wer einen Tipp geben was ich falsch mache???

Hier mal mein kompletter Code:

mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"
#include "dbverbindung.h"
#include "ui_mainwindow.h"
#include <QtSql>
#include <QMessageBox>
#include <QtGui>

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

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::on_Btn_Kd_Suchen_clicked()
{
    Tdbverbindung dbverbindung;
    QSqlQueryModel *model = new QSqlQueryModel(ui->tableWidget_Person);
    model->setQuery(QSqlQuery("Select * from person",dbverbindung));
    ui->tableWidget_Person->setModel(model);
}
main.cpp

Code: Alles auswählen

#include <QtGui/QApplication>
#include <QMessageBox>
#include "mainwindow.h"
#include "dbverbindung.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

//    Tdbverbindung tdbverbindung;
//    if (tdbverbindung.verbinden("127.0.0.1","versmax","***","***",3306))
//        QMessageBox::information(0,QObject::tr("Verbunden"),QObject::tr("Bin Verbunden"));
   // tdbverbindung.close();

    return a.exec();
}
dbverbindung.cpp

Code: Alles auswählen

#include "dbverbindung.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>


Tdbverbindung::Tdbverbindung()
{

}
Tdbverbindung::~Tdbverbindung()
{

}

bool Tdbverbindung::verbinden(QString ip, QString dbname, QString user, QString pass, int socket)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(ip);
    db.setDatabaseName(dbname);
    db.setUserName(user);
    db.setPassword(pass);
    db.setPort(socket);
    if (!db.open()){
        QMessageBox::critical(0,QObject::tr("Fehler.."),db.lastError().text());
        return false;
    }
    return true;
}

Verfasst: 10. Februar 2010 06:30
von Christian81
Einem QTableWidget kann man kein eigenes Model geben - dafür gibt QTableView

Verfasst: 10. Februar 2010 09:15
von pfid
Dein Code lässt übrigens vermuten, dass du bei jeder Suche ein neues Model-Objekt anlegst. Das solltest du eventuell noch optimieren.

Verfasst: 10. Februar 2010 11:38
von MSchuster
@ Christian81: Werd mir das dann mal zuhause mit dem QTableView ansehen. Thx

@ pfid: Code wird natürlich noch verändert. Wollte nur schnell zu Testzwecken eine Sql-Abfrage in mein am MainWindow plazierten Table anzeigen lassen ob es überhaupt funktioniert so wie ich es mir vorgestellt habe ^^ Verbindung zur DB klappe ja auf anhieb aber leider die Abfrage nicht :cry: