setModel(QAbstractItemModel*) is private

Alles rund um die Programmierung mit Qt
Antworten
MSchuster
Beiträge: 9
Registriert: 4. Februar 2010 19:32
Wohnort: Wien

setModel(QAbstractItemModel*) is private

Beitrag 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;
}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Einem QTableWidget kann man kein eigenes Model geben - dafür gibt QTableView
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Dein Code lässt übrigens vermuten, dass du bei jeder Suche ein neues Model-Objekt anlegst. Das solltest du eventuell noch optimieren.
MSchuster
Beiträge: 9
Registriert: 4. Februar 2010 19:32
Wohnort: Wien

Beitrag 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:
Antworten