Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: pro100skif от Июнь 24, 2014, 12:27



Название: Помогите правильно написать делегат
Отправлено: 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 вообще в другой стороне экрана, долгое время не спал возможно что то профукал, заранее спасибо за помощь.


Название: Re: Помогите правильно написать делегат
Отправлено: Kurles от Июнь 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 передается. И еще странность - у тебя имя конструктора с названием класса не сходиться.


Название: Re: Помогите правильно написать делегат
Отправлено: pro100skif от Июнь 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 передается. И еще странность - у тебя имя конструктора с названием класса не сходиться.
да это я когда копировал тупанул в коде они одинаковые


Название: Re: Помогите правильно написать делегат
Отправлено: pro100skif от Июнь 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 передается. И еще странность - у тебя имя конструктора с названием класса не сходиться.
исправил добавил указатель на парент в конструкторе спасибо за помощь