Combo Boxes in Item Views/de: Difference between revisions
Jump to navigation
Jump to search
AutoSpider (talk | contribs) (Convert ExpressionEngine links) |
AutoSpider (talk | contribs) (Decode HTML entity names) |
||
Line 29: | Line 29: | ||
~ComboBoxItemDelegate(); | ~ComboBoxItemDelegate(); | ||
virtual QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem & | virtual QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const; | ||
virtual void setEditorData ( QWidget *editor, const QModelIndex & | virtual void setEditorData ( QWidget *editor, const QModelIndex &index ) const; | ||
virtual void setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex & | virtual void setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const; | ||
}; | }; | ||
Line 56: | Line 56: | ||
QWidget''' ComboBoxItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem & | QWidget''' ComboBoxItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const | ||
{ | { | ||
// ComboBox ony in column 2 | // ComboBox ony in column 2 | ||
Line 71: | Line 71: | ||
} | } | ||
void ComboBoxItemDelegate::setEditorData ( QWidget *editor, const QModelIndex & | void ComboBoxItemDelegate::setEditorData ( QWidget *editor, const QModelIndex &index ) const | ||
{ | { | ||
if(QComboBox '''cb = qobject_cast<QComboBox'''>(editor)) { | if(QComboBox '''cb = qobject_cast<QComboBox'''>(editor)) { | ||
Line 85: | Line 85: | ||
} | } | ||
void ComboBoxItemDelegate::setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex & | void ComboBoxItemDelegate::setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const | ||
{ | { | ||
if(QComboBox '''cb = qobject_cast<QComboBox'''>(editor)) | if(QComboBox '''cb = qobject_cast<QComboBox'''>(editor)) | ||
Line 109: | Line 109: | ||
QTableWidget tw; | QTableWidget tw; | ||
ComboBoxItemDelegate *cbid = new ComboBoxItemDelegate(& | ComboBoxItemDelegate *cbid = new ComboBoxItemDelegate(&tw); | ||
tw.setItemDelegate(cbid); | tw.setItemDelegate(cbid); | ||
tw.setColumnCount(4); | tw.setColumnCount(4); |
Revision as of 17:00, 12 March 2015
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
Deutsch | English
ComboBox in ItemView oder ItemWidget
Beispiel-Code, wie man ComboBoxen as Editor-Widget in einem ItemView oder ItemWidget benutzt
Das Delegate erzeugt eine ComboBox, falls der Index in der zweiten Spalte eines ListView ist. Bei allen anderen Spalten gibt es lediglich den Default-Editor zurück, der von QStyledItemDelegate erzeugt wird.
Datei itemdelegate.h
// —— File itemdelegate.h ——
#ifndef ITEMDELEGATE_H
#define ITEMDELEGATE_H
#include <QStyledItemDelegate>
class ComboBoxItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
ComboBoxItemDelegate(QObject *parent = 0);
~ComboBoxItemDelegate();
virtual QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
virtual void setEditorData ( QWidget *editor, const QModelIndex &index ) const;
virtual void setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const;
};
#endif // ITEMDELEGATE_H
Datei itemdelegate.cpp
// —— File itemdelegate.cpp ——
#include "itemdelegate.h"
#include <QComboBox>
ComboBoxItemDelegate::ComboBoxItemDelegate(QObject '''parent)
: QStyledItemDelegate(parent)
{
}
ComboBoxItemDelegate::~ComboBoxItemDelegate()
{
}
QWidget''' ComboBoxItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
// ComboBox ony in column 2
if(index.column() != 1)
return QStyledItemDelegate::createEditor(parent, option, index);
// Create the combobox and populate it
QComboBox *cb = new QComboBox(parent);
int row = index.row();
cb->addItem(QString("one in row %1").arg(row));
cb->addItem(QString("two in row %1").arg(row));
cb->addItem(QString("three in row %1").arg(row));
return cb;
}
void ComboBoxItemDelegate::setEditorData ( QWidget *editor, const QModelIndex &index ) const
{
if(QComboBox '''cb = qobject_cast<QComboBox'''>(editor)) {
// get the index of the text in the combobox that matches the current value of the itenm
QString currentText = index.data(Qt::EditRole).toString();
int cbIndex = cb->findText(currentText);
// if it is valid, adjust the combobox
if(cbIndex >= 0)
cb->setCurrentIndex(cbIndex);
} else {
QStyledItemDelegate::setEditorData(editor, index);
}
}
void ComboBoxItemDelegate::setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
{
if(QComboBox '''cb = qobject_cast<QComboBox'''>(editor))
// save the current text of the combo box as the current value of the item
model->setData(index, cb->currentText(), Qt::EditRole);
else
QStyledItemDelegate::setModelData(editor, model, index);
}
Datei main.cpp
// —— File main.cpp ——
- include <QApplication>
- include <QTableWidget>
- include "itemdelegate.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableWidget tw;
ComboBoxItemDelegate *cbid = new ComboBoxItemDelegate(&tw);
tw.setItemDelegate(cbid);
tw.setColumnCount(4);
tw.setRowCount(10);
tw.resize(600,400);
tw.show();
return a.exec();
}