Russian Qt Forum
Сентябрь 30, 2024, 22:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите правильно написать делегат  (Прочитано 2241 раз)
pro100skif
Гость
« : Июнь 24, 2014, 12:27 »

Доброго времени суток, использую QTableView для отображения таблиц SQLITE, в котором(заранее извиняюсь за кривую формулировку) все поля независимо от типа который я создаю переводит в текст.Решил написать делегат для определенного столбца используя QValidator получилось вот что:
Код:
class DoubleEditTableColumnDelegate : public QItemDelegate
{

public:
    doubleEditTableColumnDelegate(QObject * parent = 0) : QItemDelegate(parent) {}
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        QLineEdit *edit=new QLineEdit();
        edit->setValidator(new QDoubleValidator(edit));
        return edit;
    }
};
в принципе работает за исключение одной детали...когда я кликаю дважды по ячейке то создается LineEdit вообще в другой стороне экрана, долгое время не спал возможно что то профукал, заранее спасибо за помощь.
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Июнь 24, 2014, 16:35 »

Доброго времени суток, использую QTableView для отображения таблиц SQLITE, в котором(заранее извиняюсь за кривую формулировку) все поля независимо от типа который я создаю переводит в текст.Решил написать делегат для определенного столбца используя QValidator получилось вот что:
Код:
class DoubleEditTableColumnDelegate : public QItemDelegate
{

public:
    doubleEditTableColumnDelegate(QObject * parent = 0) : QItemDelegate(parent) {}
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        QLineEdit *edit=new QLineEdit();
        edit->setValidator(new QDoubleValidator(edit));
        return edit;
    }
};
в принципе работает за исключение одной детали...когда я кликаю дважды по ячейке то создается LineEdit вообще в другой стороне экрана, долгое время не спал возможно что то профукал, заранее спасибо за помощь.
На вскидку - возвращаемому QLineEdit'у парента попробуй задать, который первым параметром в методе createEditor передается. И еще странность - у тебя имя конструктора с названием класса не сходиться.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
pro100skif
Гость
« Ответ #2 : Июнь 24, 2014, 22:42 »

Доброго времени суток, использую QTableView для отображения таблиц SQLITE, в котором(заранее извиняюсь за кривую формулировку) все поля независимо от типа который я создаю переводит в текст.Решил написать делегат для определенного столбца используя QValidator получилось вот что:
Код:
class DoubleEditTableColumnDelegate : public QItemDelegate
{

public:
    doubleEditTableColumnDelegate(QObject * parent = 0) : QItemDelegate(parent) {}
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        QLineEdit *edit=new QLineEdit();
        edit->setValidator(new QDoubleValidator(edit));
        return edit;
    }
};
в принципе работает за исключение одной детали...когда я кликаю дважды по ячейке то создается LineEdit вообще в другой стороне экрана, долгое время не спал возможно что то профукал, заранее спасибо за помощь.
На вскидку - возвращаемому QLineEdit'у парента попробуй задать, который первым параметром в методе createEditor передается. И еще странность - у тебя имя конструктора с названием класса не сходиться.
да это я когда копировал тупанул в коде они одинаковые
Записан
pro100skif
Гость
« Ответ #3 : Июнь 25, 2014, 02:11 »

Доброго времени суток, использую QTableView для отображения таблиц SQLITE, в котором(заранее извиняюсь за кривую формулировку) все поля независимо от типа который я создаю переводит в текст.Решил написать делегат для определенного столбца используя QValidator получилось вот что:
Код:
class DoubleEditTableColumnDelegate : public QItemDelegate
{

public:
    doubleEditTableColumnDelegate(QObject * parent = 0) : QItemDelegate(parent) {}
    virtual QWidget * createEditor ( QWidget *, const QStyleOptionViewItem &,
                                     const QModelIndex &) const
    {
        QLineEdit *edit=new QLineEdit();
        edit->setValidator(new QDoubleValidator(edit));
        return edit;
    }
};
в принципе работает за исключение одной детали...когда я кликаю дважды по ячейке то создается LineEdit вообще в другой стороне экрана, долгое время не спал возможно что то профукал, заранее спасибо за помощь.
На вскидку - возвращаемому QLineEdit'у парента попробуй задать, который первым параметром в методе createEditor передается. И еще странность - у тебя имя конструктора с названием класса не сходиться.
исправил добавил указатель на парент в конструкторе спасибо за помощь
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.145 секунд. Запросов: 22.