Название: QTableView + делегат
Отправлено: INZER от Июнь 20, 2013, 11:00
День добрый, Не могу догнать где затупил помогите плиззз QTableView * tvGU; GroundUserSqlModel modelGU; Модель:class GroundUserSqlModel: public QSqlQueryModel { Q_OBJECT public: GroundUserSqlModel (QObject * parent=0); QVariant data (const QModelIndex &item, int role) const { QVariant value = QSqlQueryModel::data(item,role); if (role == Qt::DisplayRole && item.column()==2) // отображение данных в таблице { switch (value.toInt()) { case 1: value = QVariant(QString::fromLocal8Bit("DSP")); break; case 2: value = QVariant(QString::fromLocal8Bit("УВД")); break; case 3: value = QVariant(QString::fromLocal8Bit("Авиакомпания")); break; default: break; } } return value; } }; Делегат:class GUDelegate: public QStyledItemDelegate { Q_OBJECT public: GUDelegate (QObject *p = 0): QStyledItemDelegate(p) {} protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option,index); } QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { QLineEdit * edit = new QLineEdit(parent); return edit; } void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor,model,index); } }; Конструктор: ui->tvGU->setModel(&modelGU); ui->tvGU->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tvGU->setItemDelegate(new GUDelegate (ui->tvGU)); ui->tvGU->setEditTriggers(QAbstractItemView::DoubleClicked);
Однако при двойном клике по полю таблицы QLineEdit (поле редактрования) не появляется. Что я забыл?
Название: Re: QTableView + делегат
Отправлено: INZER от Июнь 20, 2013, 13:15
Немного поэкспериментрировал заменил QSqlQueryModel на QStandardItemModel и все заработало без изменения остального кода (кроме ручного заполнения модели). С чем это может быть связано? Неужели нельзя редактировать QTableView, построенную на основе модели QSqlQueryModel? Не хочется менять QSqlQueryModel на QSqlQuery + QStandardItemModel.
Название: Re: QTableView + делегат
Отправлено: dio от Июнь 20, 2013, 13:35
Данная модель только для чтения. The QSqlQueryModel class provides a read-only data model for SQL result sets. http://qt-project.org/doc/qt-5.0/qtsql/qsqlquerymodel.html (http://qt-project.org/doc/qt-5.0/qtsql/qsqlquerymodel.html)
|