Seite 1 von 1

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

Verfasst: 14. Mai 2012 09:57
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 :?:

Re: Kann QTableWidgetItem nicht finden...

Verfasst: 14. Mai 2012 11:02
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.

Re: Kann QTableWidgetItem nicht finden...

Verfasst: 14. Mai 2012 11:43
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....

Re: Kann QTableWidgetItem nicht finden...

Verfasst: 14. Mai 2012 12:32
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.

Re: Kann QTableWidgetItem nicht finden...

Verfasst: 14. Mai 2012 13:09
von PoetikBiker
franzf hat geschrieben:QTableWidget ist eine ...
Jaja, der franzf kennt sich aus... :-)

Vielen Dank für die Infos