QTableWidget umbauen

Alles rund um die Programmierung mit Qt
Antworten
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

QTableWidget umbauen

Beitrag von jd »

Hallo Gemeinde,

ich habe ein Problem mit dem QTableWidget. Ich habe eine menge Daten in meiner DB stehen... Es handelt sich hierbei um eine Kundendatenbank.

Zu jedem Kunden gibt es 82 Daten. Also beschränke ich meine Übersicht auf die Stammdaten. Realisiert habe ich das folgender maßen:

Stammdaten

Code: Alles auswählen

void CKundenDialog::selectKunden() {
	kundenTableWidget->setRowCount(5);
	kundenTableWidget->setColumnCount(7);

	QSqlQuery query;
	query.prepare("SELECT kundennummer, matchcode, firma, name, vorname, plz, ort FROM kunden LIMIT 5");
	query.exec();
	int count = 0;

	while (query.next()) {
		QString kundennummer = query.value(0).toString();
		QString matchcode = query.value(1).toString();
		QString firma = query.value(2).toString();
		QString name = query.value(3).toString();
		QString vorname = query.value(4).toString();
		QString plz = query.value(5).toString();
		QString ort = query.value(6).toString();

		QTableWidgetItem *newKundenNummer = new QTableWidgetItem(kundennummer);
		kundenTableWidget->setItem(count, 0, newKundenNummer);

		QTableWidgetItem *newMatchcode = new QTableWidgetItem(matchcode);
		kundenTableWidget->setItem(count, 1, newMatchcode);

		QTableWidgetItem *newFirma = new QTableWidgetItem(firma);
		kundenTableWidget->setItem(count, 2, newFirma);

		QTableWidgetItem *newName = new QTableWidgetItem(name);
		kundenTableWidget->setItem(count, 3, newName);

		QTableWidgetItem *newVorname = new QTableWidgetItem(vorname);
		kundenTableWidget->setItem(count, 4, newVorname);

		QTableWidgetItem *newPlz = new QTableWidgetItem(plz);
		kundenTableWidget->setItem(count, 5, newPlz);

		QTableWidgetItem *newOrt = new QTableWidgetItem(ort);
		kundenTableWidget->setItem(count, 6, newOrt);

		count++;
	}
}
Das funktioniert auch soweit, dies will ich dann noch auf QSqlTableModel umbauen, habe ich aber nicht gemacht da QTableView keine Signale hat, was mich zu meinem weiteren Problem führt. Da in dem QTableWidget nur die Stammdaten stehen, brauche ich eine Funktion, wo ich mir den Rest anzeigen kann. Leider finde ich kein Signal, was mir die Row-Zahl übergibt. Suche so was, wie Current-Selected-Row... Dann weiß ich von welchem Datensatz man mehr Informationen sehen will.

Kann mir jemand einen Tipp geben, wie ich das realisieren kann?

so long
jd
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

Beitrag von jd »

Hallo, mein Problem war/ist das ich den Aufbau von QTableWidget nicht verstanden habe, mit den Items...

Ich habe jetzt ein connect hinzugefügt:

Code: Alles auswählen

connect(kundenTableWidget, SIGNAL( cellDoubleClicked ( int row, int column  ) ),
			this, SLOT( showMore( int row, int column ) ));

Von da aus, kann ich wunder bar auf das Item schließen, was ich benötige, jedoch bekomme ich eine Fehlermeldung:
Object::connect: No such signal QTableWidget::cellDoubleClicked(int row,int column)
Object::connect: (sender name: 'kundenTableWidget')
Object::connect: (receiver name: 'KundenDialog')
Wie kann das sein? Das Signal steht so in der Doku: http://doc.trolltech.com/4.3/qtablewidg ... bleClicked

Was ist an meinem connect falsch?

so long
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

Beitrag von jd »

Ok, aber ich verstehe es nicht, was ich jetzt machen soll... Muss ich jetzt mein eigenes Signal schreiben? Weil er findet ja das Signal nicht. Aber wie schreibe ich das Signal? Bzw. Warum funktioniert da keine Normale Singal-Slot Kombination?

so long
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Ich versuche es nochmals.. Trolltech hat sich die Mühe gemacht, eine Doku zu schreiben (mein obiger Link). In dieser Doku wird ganz genau dein Fall beschrieben.. Da hats ein Beispiel fuer ein connect() und dann noch ein Beispiel wie es NICHT (!!) gemacht werden soll.

Frage 1: worin liegt der Unterschied?
Frage 2: wie hast du's implementiert?
Antworten