Seite 1 von 1

Nach SQL-Insert Aktualisierung von QMainWindow

Verfasst: 21. Mai 2009 14:13
von Luftballon
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

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";
	}
}