Ich habe eine QComboBox und möchte damit viele verschiedene Piktogramme auswählen können. Dafür dachte ich mir, eignet sich am besten ein QTableView. Also habe ich die Combobox folgendermaßen initialisiert:
Code: Alles auswählen
QTableView* tableView = new QTableView(this);
comboBox->setModel(new TilesModel());
comboBox->setView(tableView);
comboBox->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
comboBox->horizontalHeader()->hide();
comboBox->verticalHeader()->hide();
comboBox->resizeRowsToContents();
comboBox->resizeColumnsToContents();Code: Alles auswählen
QVariant TilesModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
TilesModelItem* item = static_cast<TilesModelItem*>(index.internalPointer());
if (role == Qt::DecorationRole)
return item->getPic() // QPixmap
if (role == Qt::ToolTipRole)
return item->getName(); // QString
return QVariant();
}Das Problem ist nun, dass wenn ich ein Item in der TableView auswähle, in der ComboBox immer nur das erste Item aus der Reihe angezeigt wird. Also bei Selektion eines Items wird scheinbar nur die "row" an die ComboBox übermittelt, nicht aber die "Column".
Ich habe auch versucht, das clicked() bzw. activated() Signal der View zu nutzen. Jedoch werden sie nie ausgelöst.
Was hat es mit dem rootModelIndex() der QComboBox auf sich?
Ich wäre echt dankbar, wenn Ihr mir einen Hinweis zur Lösung des Problems geben könnt.
Viele Grüße,
Daniel