Estoy tratando de poner un QComboBox en un QStandardItem para ser utilizado en un QStandardItemModel. He estado mirando alrededor y no puedo encontrar una respuesta, ¿alguna idea?QStandardItem + QComboBox
8
A
Respuesta
12
No almacena un QComboBox en un QStandardItemModel. Digamos que usted tiene las siguientes opciones:
Un B C D
y usted tiene una lista con dos elementos de una QListView, siendo el primer valor A al ser segundo D:
QListView* pView = new QListView();
QStandardItemModel* pModel = new QStandardItemModel();
pView->setModel(pModel);
pModel->appendRow(new QStandardItem("A"));
pModel->appendRow(new QStandardItem("D"));
Lo que creamos anteriormente es un widget de lista que mostrará los valores de "A" y "D". Ahora, a QComboBox. Supongo que quiere que edite los valores de "A" y "D" en la lista. Para esto, necesita crear un QItemDelegate.
Ver http://doc.qt.io/qt-4.8/qitemdelegate.html
Un intento:
class ComboBoxDelegate : public QItemDelegate
{
Q_OBJECT
public:
ComboBoxDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
ComboBoxDelegate::ComboBoxDelegate(QObject *parent)
: QItemDelegate(parent)
{
}
QWidget *ComboBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
QComboBox *editor = new QComboBox(parent);
editor->addItem("A");
editor->addItem("B");
editor->addItem("C");
editor->addItem("D");
return editor;
}
void ComboBoxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::EditRole).toString();
QComboBox *cBox = static_cast<QComboBox*>(editor);
cBox->setCurrentIndex(cBox->findText(value));
}
void ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QComboBox *cBox = static_cast<QComboBox*>(editor);
QString value = cBox->currentText();
model->setData(index, value, Qt::EditRole);
}
void ComboBoxDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
editor->setGeometry(option.rect);
}
Y a continuación, es necesario configurar el delegado en la QListView para hacer que funcione, consulte:
pView->setItemDelegate(new ComboBoxDelegate(pView));
Cuestiones relacionadas
- 1. Selección QComboBox en QTableWidget
- 2. QComboBox dentro de QTreeWidgetItem
- 3. Señales pyside sobrecargadas (QComboBox)
- 4. Key/Value pyqt QComboBox
- 5. Cómo utilizar el modelo para QCombobox
- 6. Lista desplegable QComboBox - establecer el estilo de elemento seleccionado
- 7. Obteniendo todos los elementos de QComboBox - PyQt4 (Python)
- 8. Qt ¿Cómo deshabilitar el desplazamiento del mouse de QComboBox?
- 9. ¿Cómo agrego un icono a QComboBox en Qt?
- 10. ¿Cómo puedo obtener el VALOR seleccionado de un QCombobox?
- 11. ¿Cómo establecer texto predeterminado no seleccionable en QComboBox?
- 12. ¿Cómo configuro el ancho de QComboBox para que se ajuste al elemento más grande?
- 13. Qt, ¿Cómo cambio el color del texto de un elemento de un QComboBox? (C++)
- 14. ¿Cómo puedo agregar un QComboBox a la barra de herramientas principal en Qt Creator?
- 15. QComboBox - establecer el elemento seleccionado en función de los datos del artículo
- 16. PyQt QComboBox establecer el número de elementos visibles en el menú desplegable
- 17. ¿Hay alguna manera de mostrar iconos en QListView sin texto?
- 18. PyQt (o solo QT). Como llegar QComboBox para disparar una señal cada vez que se establece en un valor (incluso si no es modificada)
- 19. QTableView es extremadamente lento (incluso para solo 3000 filas)
- 20. ¿Cómo puedo hacer que un widget Qt ignore las hojas de estilo establecidas en los widgets padre?
- 21. Combina múltiples widgets en uno en Qt
- 22. ¿Hay alguna manera de agregar un QWidget a un QMenu en QtCreator?
- 23. Diseñar la ventana emergente de un QCompleter en PyQt
- 24. ¿Cómo configuro el color de fondo de un widget como combobox o double spin box?
- 25. Obteniendo el elemento seleccionado actualmente en QTreeView
- 26. cómo cambiar Qt qListView selección de icono resaltar
- 27. ¿Cómo le digo a Qt que siempre muestre un editor en QTableView?
- 28. Qt/PyQt: ¿Cómo creo un widget desplegable, como QLabel, QTextBrowser, etc.?
- 29. ¿Cómo puedo decirle a QTableWidget que termine de editar una celda?
- 30. Reglas de finalización de encargo de QCompleter
Esta respuesta a una de mis Las preguntas también pueden serle de ayuda: http://stackoverflow.com/questions/6764790/which-model-to-subclass-view-to-use-for-a-list-of-custom-objects/6769603#6769603 – Sam