Russian Qt Forum

Qt => Базы данных => Тема начата: pro100skif от Июнь 17, 2014, 05:28



Название: переопределить делегат
Отправлено: pro100skif от Июнь 17, 2014, 05:28
Доброго времени суток, необходимо запретить пользователю редактировать кое какие колонки в QTableView , полазил в инете нашел что самый простой способ это переопределить делегата.Создал новый cpp файл, прописал в нем
Код:
class NonEditTableColumnDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    NonEditTableColumnDelegate(QObject * parent = 0) : QItemDelegate(parent) {}
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        return 0;
    }
};

потом в самой программе
Код:
NonEditTableColumnDelegate *delegate=new NonEditTableColumnDelegate(this);
    ui->sqlTable->setItemDelegateForColumn(0,delegate);

на что qt ругается как то так:
D:\QTprojects\mysqltry\new1.cpp:5: ошибка: undefined reference to `vtable for NonEditTableColumnDelegate'
collect2.exe:-1: ошибка: error: ld returned 1 exit status
и указывает на эту строку:
NonEditTableColumnDelegate(QObject * parent = 0) : QItemDelegate(parent) {}
Заранее спасибо за помощь


Название: Re: переопределить делегат
Отправлено: gil9red от Июнь 17, 2014, 06:43
Классы лучше создавать в h-файлах, а описывать их содержимое в срр ;)


Название: Re: переопределить делегат
Отправлено: GreatSnake от Июнь 17, 2014, 07:19
Убери строку с Q_OBJECT.
Если производный от QObject класс не определяет новые сигналы/слоты и не использует собственные трансляции (tr),
то использовать данную строку необязательно.


Название: Re: переопределить делегат
Отправлено: pro100skif от Июнь 17, 2014, 13:32
Убери строку с Q_OBJECT.
Если производный от QObject класс не определяет новые сигналы/слоты и не использует собственные трансляции (tr),
то использовать данную строку необязательно.
спасибо работает