QItemDelegate

Alles rund um die Programmierung mit Qt
Antworten
haldol
Beiträge: 19
Registriert: 18. April 2008 22:23

QItemDelegate

Beitrag von haldol »

hallo,

angelehnt an dieses beispiel:
http://www.qtforum.de/forum/viewtopic.php?p=3893&
habe ich einen delegate geschrieben und versuche nun ihn einzubinden. im unterschied zum beispiel benutze ich statt einem QTableWidget eine QTableView:

Code: Alles auswählen

...
QTableView tableView;
...
cbd = new ComboBoxDelegate;
model = new LogBookModel(stringliste);
tableView.setModel(model);
tableView.setItemDelegate(cbd);
stackedWidget->insertWidget(1, &tableView);
...
das funktioniert so leider nicht. der delegate wird übergangen.

michael
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

der delegate wird übergangen.
Du bist dir also sicher, das Dein createWidget an Deinem ItemDelegate (ComboBoxDelegate) nicht aufgerufen wird ?

check mal, was tableView.itemDelegate(const QModelIndex & index);
fuer nen gultigen index zurueckliefert, obs wirklich deine Instanz ist ...

setzt du das Delegate wirklich bevor du es anzeigst ?

Ciao ...
haldol
Beiträge: 19
Registriert: 18. April 2008 22:23

Beitrag von haldol »

Du bist dir also sicher, das Dein createWidget an Deinem ItemDelegate (ComboBoxDelegate) nicht aufgerufen wird ?
das qDebug() in createEditor wird nie ausgeführt.

Code: Alles auswählen

QWidget *ComboBoxDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
	qDebug() << "index: " << index.isValid ();
	if (index.column() == 2)
	{
		QComboBox *combo = new QComboBox(parent);
		combo->addItem("Url sperren");
	        combo->addItem("Typ sperren");
	        connect( combo, SIGNAL(activated(int)), this, SLOT(emitCommitData(int)));
	        return combo;
	}
	else
	        return QItemDelegate::createEditor( parent, option, index );
}
den delegate habe ich wie hier gepostet gesetzt (in 'void MainWindow::connection()').
http://nopaste.debianforum.de/9261
damit sollte er so positioniert sein, das er gesetzt ist, bevor er angezeigt wird. ich hatte ihn zwischenzeitlich auch im konstruktor gesetzt - ohne erfolg.
Antworten