Nach SQL-Insert Aktualisierung von QMainWindow
Verfasst: 21. Mai 2009 14:13
Hallo zusammen!
Mein Programm listet aktuell in einem QFrame im QMainWindow die MC-Fragen auf, die aus der Datenbank ausgelesen wurden. Nachdem eine neue MC-Frage in die Datenbank geschrieben wurde, soll sich dieser QFrame aktualisieren und die neue Frage mit anzeigen. Wie funktioniert das?
Ein centralFrame->repaint(); in MainWindow::checkQuestionDialog() reicht offenbar nicht aus.
Wie schaffe ich es, dass nach dem Schließen von QuestionDialog, was ja durch ein connect zum Aufruf von void MainWindow::checkQuestionDialog() führt, der im Konstruktor erstellte QFrame centralFrame neu erstellt wird?
Würde mich über Hilfe sehr freuen!
mainwindow.cpp (uninteressante Bereiche durch [...] ersetzt
Mein Programm listet aktuell in einem QFrame im QMainWindow die MC-Fragen auf, die aus der Datenbank ausgelesen wurden. Nachdem eine neue MC-Frage in die Datenbank geschrieben wurde, soll sich dieser QFrame aktualisieren und die neue Frage mit anzeigen. Wie funktioniert das?
Ein centralFrame->repaint(); in MainWindow::checkQuestionDialog() reicht offenbar nicht aus.
Wie schaffe ich es, dass nach dem Schließen von QuestionDialog, was ja durch ein connect zum Aufruf von void MainWindow::checkQuestionDialog() führt, der im Konstruktor erstellte QFrame centralFrame neu erstellt wird?
Würde mich über Hilfe sehr freuen!
mainwindow.cpp (uninteressante Bereiche durch [...] ersetzt
Code: Alles auswählen
MainWindow::MainWindow( QWidget * parent, Qt::WFlags f) : QMainWindow(parent, f) {
// Dialoge
qD = new QuestionDialog;
qD->setAttribute(Qt::WA_QuitOnClose);
// Datenbank
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
[...]
if( !db.open() ) {
qDebug() << db.lastError().text();
} else {
// Hauptfenster
resize(640,480);
centralFrame = new QFrame(this);
QVBoxLayout *VBox = new QVBoxLayout(centralFrame);
// Menü
[...]
// Verbindungen
connect( qD, SIGNAL( accepted() ), this, SLOT( checkQuestionDialog() ));
connect( qD, SIGNAL( rejected() ), this, SLOT( checkQuestionDialog() ));
// Abfrage der Datenbank und Erstellen der Fragen-Templates
QSqlQuery query;
query.exec("SELECT * FROM question");
int n = query.size();
int i = 0;
TplQuestion *tpl[n];
QSqlRecord record = query.record();
while( query.next() ) {
QHash<QString, QVariant> hash;
hash.insert("question", query.value(record.indexOf("question")).toString());
[...]
tpl[i] = new TplQuestion(hash);
VBox->addWidget(tpl[i]);
i++;
}
// Ausgabe
setCentralWidget(centralFrame);
}
}
void MainWindow::checkQuestionDialog() {
int val = qD->result();
if( val == QDialog::Accepted ) {
qDebug() << "QDialog::Accepted";
QHash<QString, QVariant> data = qD->returnData(); // qD = QuestionDialog (Dialog-Fenster zum Erstellen der Frage)
qDebug() << "Size of returned Hash: " << data.size();
QSqlQuery query;
[...]
query.exec();
centralFrame->repaint();
}
else if( val == QDialog::Rejected ) {
qDebug() << "QDialog::Rejected";
}
}