[gelöst] Kann QTableWidgetItem nicht finden...

Alles rund um die Programmierung mit Qt
Antworten
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

[gelöst] Kann QTableWidgetItem nicht finden...

Beitrag von PoetikBiker »

Hallo zusammen,
ich habe eine Klasse von QTableWidget abgeleitet. In der mousePressEvent()-Methode möchte ich die Zelle (as QTableWidgetItem) unter der Maus ermitteln. Leider liefert mir die itemAt()-Methode stets einen Null-Pointer, obwohl sich eine Zelle unter der Maus befindet. :(

hier das Codefragment:

Code: Alles auswählen

void MinorTableWidget::mousePressEvent(QMouseEvent *_pEvent)
{
	int		iX	= _pEvent->x();
	int		iY	= _pEvent->y();

	// alle mouseclicks verarbeiten
	QTableWidget::mousePressEvent(_pEvent);

	// find the row under the mouse
	QTableWidgetItem	*pTWI	= itemAt(iX, iY);   // <-- pointer stets null
...

Die Items werden im Dialog zuvor folgendermaßen initialisiert:

Code: Alles auswählen

void DlgMinor::FillTable()
{
...
	// fill the table
	m_ui.m_pTblMinors->setRowCount(s32RowCount);

	// set all the items
	for (iRow=.....
	{
		// set column 1
		m_ui.m_pTblMinors->setCellWidget(iRow, 0, new QLabel(sMinor));

		// set column 2
		m_ui.m_pTblMinors->setCellWidget(iRow, 1, new QLabel(QString("%1").arg(cit->second.dblTakerate)));

		// set column 3
		sDesc = pMW->Minor2Description(cit->first);
		m_ui.m_pTblMinors->setCellWidget(iRow, 2, new QLabel(q2Q(sDesc)));
	}

	...
} // DlgMinor::FillTable
Was mache ich falsch :?:
Zuletzt geändert von PoetikBiker am 14. Mai 2012 13:09, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Kann QTableWidgetItem nicht finden...

Beitrag von franzf »

Es sind halt noch keine Items gesetzt, und "setCellWidget" setzt eben keine Items sondern CellWidgets ;)
Wenn du eh nur Labels einsetzt, kannst du doch auch gleich QTableWidgetItems mit dem entsprechenden Text setzen.
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

Re: Kann QTableWidgetItem nicht finden...

Beitrag von PoetikBiker »

Es sind halt noch keine Items gesetzt, und "setCellWidget" setzt eben keine Items sondern CellWidgets
ok, vielen Dank! Das wars. Eine so große Bibliothek wie QT braucht eben eine gewisse Einarbeitungszeit...

Jetzt noch eine wahrscheinlich dumme Anfängerfrage:
Warum die Unterscheidung zwischen setItem (für QTableWidgetItems) und setCellWidget(für QWidget *).
Warum nicht nur eine set-Funktion? Gibt wahrscheinlich einen guten Grund, aber wie gesagt, bin halt newbie....
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Kann QTableWidgetItem nicht finden...

Beitrag von franzf »

QTableWidget ist eine Convenience-Klasse (Bequemlichkeit) - eine einfache itembasierte Tabelle. Der "Professionellere" Weg wäre ein eigenes Model, das du in einer QTableView anzeigst.
QTableWidget ist selber eine QTableView (erbt davon public) und verwendet intern ein eigenes Model, in dem eben die "QTableWidgetItems" die Werte kapseln. QTableWidgetItems sind dabei recht leichtgewichtig - im Gegensatz zu QWidget, was durch die ganze QObject + Windowing-Abhängigkeit recht aufgebläht daherkommt. QTableWidget funktioniert prima mit abertausenden Items, das alles mit Widgets lösen wird in jedem Fall ressourcenintensiver, wenn es nicht sogar auf die Performance drückt.
Die CellWidgets sind dagegen ein nettes Feature, um schnell eigenen Content in einer Zelle unterzubringen (z.B. nen Plot o.Ä.), was mit Items nicht geht. Deshalb macht beides Sinn.
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

Re: Kann QTableWidgetItem nicht finden...

Beitrag von PoetikBiker »

franzf hat geschrieben:QTableWidget ist eine ...
Jaja, der franzf kennt sich aus... :-)

Vielen Dank für die Infos
Antworten