GB-errinerung in QT hat Speicherzugrifsfehler

finke

finke

Eroberer
HI,
da ich notorisch Geburtstage vergesse, Bin ich gerade dabei mir eine SQLite DB aufzubauen, welche die ganzen Daten der leute die ich so in meinem Umfeld nicht vergessen sollte enthält.
Nun Brauche ich nur noch ein Programm zum auslesen. Hab mir gedacht, kannste gleich kombinieren, und schauste obde das Mit QT hin bekommst. Gedacht getan, das Buch über QT4 zur hand genommen, mal bisschen in den Beispielen rumgeblätert, und 2 sachen versucht.
Zuerst eine Ausgabe der Daten in einem Widget nach Buch. Lies sich ausführen, allerdings kam nur ein Weiser Rahen:
Code:
#ifndef EDITWIDGET_H
#define EDITWIDGET_H

#include <QtGui>
#include <QtSql>



class EditWidget : public QWidget
{
    Q_OBJECT
    private:
    QTableView* tv;
    QSqlTableModel* tm;
    QSqlDatabase db;

public:
    EditWidget(QWidget *parent = 0);
    ~EditWidget();
};

#endif // EDITWIDGET_H
Code:
#include "editwidget.h"

EditWidget::EditWidget(QWidget *parent)
    : QWidget(parent)
{
    db= QSqlDatabase::addDatabase("QSQLITE");
    tv = new QTableView(this);
    tm =new QSqlTableModel();
    db.setHostName("MyServer");
    db.setDatabaseName("I:/server2go/htdocs/db/.htdaten.db");

    if(db.open()){
        tm->setTable("daten");
        tm->select();
        tm->setEditStrategy(QSqlTableModel::OnFieldChange);
        tv->setModel(tm);
        tv->setWindowTitle("Test");
        tv->show();
    }
}

EditWidget::~EditWidget()
{
    db.close();
}
Code:
#include <QtGui/QApplication>
#include "editwidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    EditWidget w;
    w.show();
    return a.exec();
}
Fehlschlag, leeres fenster, ka wieso.

Also ich noch was anderes Probiert:
Code:
#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>
#include <QGridLayout>
#include <QLabel>

#include <QtSql>


class Window : public QWidget

{
    private:
    QSqlTableModel* tm;
    QSqlDatabase db;
    QGridLayout* grid;
    QLabel* geb;
    QLabel *lab[2][3];
public:
    Window();
    ~Window();
};

#endif // WINDOW_H
Code:
#include "window.h"

#include <QString>
#include <QSqlRecord>

Window::Window()
{
    geb = new QLabel("Nächsten Geburtstage am:");
    grid = new QGridLayout;


    setLayout(grid);
    db= QSqlDatabase::addDatabase("QSQLITE");
    tm =new QSqlTableModel();
    db.setHostName("MyServer");
    db.setDatabaseName("/media/disk/server2go/htdocs/db/.htdaten.db");

    if(db.open()){
        tm->setTable("daten");
        tm->setFilter("");
        tm->select();
        for(int i = 0;i<3;i++){
            QSqlRecord record = tm->record(i);
            QString tmp;
            tmp = record.value("name").toString();
            tmp += ", ";
            tmp += record.value("vorname").toString();
            tmp += ": ";
            lab[0][i] = new QLabel(tmp);
            lab[1][i] = new QLabel(record.value("geburtstag").toString());
        }
        grid->addWidget(geb, 0,0);
        for(int i = 0; i<2;i++){
            for(int j = 0; j<3;i++){
                grid->addWidget(lab[i][j],(i+1) ,j);
            }
        }
    }
}

Window::~Window()
{
    db.close();

}

Code:
#include <QtGui/QApplication>
#include "window.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Window w;
    w.show();
    return a.exec();
}

Resultat: unter Windows nen ominöser Fehlercode (auf Wunsch schau ich nochmal nach welcher), undter Linux nur Speicherzugriffsfehler.

Bin an und für sich nen Anfänger mit QT, kann mir wer sagen, in welcher Zeile ich den Fehler hab?
PS: ich weis das das mit Sicherheit kein sicheres Programm ist, kann mir da wer noch Tipps geben? Oder sollt ich lieber das alles weg werfen und nochmal total neu anfangen?

PS: am ende sollte das mal so sein, das das als ne art Plasmied unter KDE, und halt was vergleichbares unter win läuft, welches mir die nächsten 3 GB's anzeigt. wenn man mit der maus drüber geht und drauf klickt soll ne Tabelle angezeigt werden, in welcher man die Daten ändern kann.

PS: für den unwahrscheinlichen Fall das es heute Leute gibt die mir nen fertiges Programm dazu anbieten, muss ich leider ablehnen, mein Haupt Ziel ist nicht das Programm sondern der Lehrnefekt beim schreiben.
 
Zuletzt bearbeitet:
Da ich von QT keine Ahnung habe bringt es wahrscheinlich nichts, wenn ich mir den Quelltext anschaue. Aber hast du schonmal versucht mit gdb rauszuriegen, wo der Fehler ist?

Grüße, Blender3D
 
Als weiteren Kandidaten neben gdb werfe ich hier noch "strace" in die Runde.
 
Na Toll,
4 Antworten und alle nur um zu sagen, das sie keine Ahnung haben.
Ja, hab schon mal versucht den GDB zu bemühen, allerdings hab ich nicht viel Ahnung von Debuggen (Wenn ich Fehler hatte sagte mir das bisher immer der Compiler), und das was ich mit dem GDB raus bekommen hab nützt mir auch nichts.

PS: Windows sagt mir beim Asführen:
Starting C:\...\sql_class\debug\sql_class.exe...
QSqlDatabasePrivate::database: unable to open database: " "

C:\...\sql_class\debug\sql_class.exe exited with code -1073741819
Wäre zB schon mal ne Hilfe wenn mir wer sagen könnte, warum er die DB nicht auf bekommt. Ich hab gelesen, das man bei Pfadangaben auch unter win / statt \ verwenden soll, und die DB-Datei liegt auch dort. Und wenn ich die mal von dort weg nehme liegt nach ausführen des Programms ne leere Datei mit dem selben Namen da.
 
Zuletzt bearbeitet:

Ähnliche Themen

NagiosGrapher 1.7.1 funktioniert nicht

qt Anfängerprobleme

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

qlistview

Xubuntu - AVR32-linux crosscompile sqlite

Zurück
Oben