crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Неправильное отображение делегата
ruzik
  опции профиля:
сообщение 31.12.2011, 19:15
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 254
Регистрация: 23.2.2011
Из: Саратов
Пользователь №: 2436

Спасибо сказали: 2 раз(а)




Репутация:   0  


Здравствуйте, есть делегат, но при его вызове он отображается не в таблице, а в отдельном окне, как можно это исправить?

#ifndef LOGICITEMDELEGATE_H
#define LOGICITEMDELEGATE_H

#include "QItemDelegate"
#include "QComboBox"

class logicItemDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    logicItemDelegate();
    ~logicItemDelegate();

    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;
};
#endif


#include "logicItemDelegate.h"

#include "QComboBox"
#include "QDebug"

logicItemDelegate::logicItemDelegate()
: QItemDelegate()
{
    
}

logicItemDelegate::~logicItemDelegate()
{

}

QWidget *logicItemDelegate::createEditor(QWidget *parent,
                                       const QStyleOptionViewItem &/* option */,
                                       const QModelIndex &/* index */) const
{
    QComboBox * comboBox = new QComboBox;
    comboBox->addItem("Yes");
    comboBox->addItem("No");

    return comboBox;
}

void logicItemDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const
{
    QString value = index.model()->data(index, Qt::DisplayRole).toString();

    QComboBox * comboBox = static_cast<QComboBox*>(editor);

    if(value == "Yes")
        comboBox->setCurrentIndex(0);
    else
        comboBox->setCurrentIndex(1);
}

void logicItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
    QComboBox * comboBox = static_cast<QComboBox*>(editor);

    model->setData(index, comboBox->currentText(), Qt::EditRole);
}

void logicItemDelegate::updateEditorGeometry(QWidget *editor,
                                           const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect);
}


Заранее спасибо!

Сообщение отредактировал ruzik - 31.12.2011, 19:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 31.12.2011, 21:29
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

Спасибо сказали: 18 раз(а)




Репутация:   3  


Цитата
QWidget *logicItemDelegate::createEditor(QWidget *parent,
                                       const QStyleOptionViewItem &/* option */,
                                       const QModelIndex &/* index */) const
{
    QComboBox * comboBox = new QComboBox;
    comboBox->addItem("Yes");
    comboBox->addItem("No");

    return comboBox;
}


QWidget * parent вам передали чтобы вы могли установить родителя.
Так что используйте:
QComboBox * comboBox = new QComboBox(parent);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 1.1.2012, 19:21
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 254
Регистрация: 23.2.2011
Из: Саратов
Пользователь №: 2436

Спасибо сказали: 2 раз(а)




Репутация:   0  


Большое спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.2.2025, 8:18