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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QValidator при изменении данных через QTreeView  (Прочитано 2843 раз)
Dolu
Гость
« : Апрель 20, 2015, 12:06 »

Добрый день!

Решал ли кто-нибудь задачу фильтрации входных данных (средствами классов наследованных от QValidator) при вводе оных через QTreeView?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 20, 2015, 13:41 »

Пиши свой делегат.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Dolu
Гость
« Ответ #2 : Апрель 20, 2015, 13:43 »

Вроде всё просто решается через QLineEdit обёрнутый в QItemDelegate.

Код:
#ifndef CTREEDELEGATE_HPP
#define CTREEDELEGATE_HPP


#include <QItemDelegate>
#include <QRegExpValidator>
#include <QRegExp>
#include <QLineEdit>



class CTreeDelegate : public QItemDelegate
{
    Q_OBJECT

public:
    CTreeDelegate( QObject * Parent )
        : QItemDelegate( Parent ){}

    QWidget * createEditor( QWidget                    * Prent  ,
                            const QStyleOptionViewItem & Option ,
                            const QModelIndex          & Index  ) const
    {
        auto Validator = new QRegExpValidator();
        Validator->setRegExp( QRegExp( "^[а-яА-Яa-zA-Z0-9 _-]+" ) );

        auto Editor = new QLineEdit( Prent );
        Editor -> setValidator( Validator );

        return Editor;
    }


    void setEditorData( QWidget           * Editor ,
                        const QModelIndex & Index  ) const
    {
        auto Value = Index.model() -> data( Index, Qt::EditRole );
        auto CastedEditor = static_cast< QLineEdit * >( Editor );
        CastedEditor -> setText( Value.toString() );
    }


    void setModelData( QWidget            * Editor ,
                       QAbstractItemModel * Model  ,
                       const QModelIndex  & Index  ) const
    {
        auto CastedEditor = static_cast< QLineEdit * >( Editor );
        auto Value = CastedEditor->text();
        Model -> setData( Index, Value, Qt::EditRole );
    }


    void updateEditorGeometry( QWidget                    * Editor ,
                               const QStyleOptionViewItem & Option ,
                               const QModelIndex          & Index  ) const
    {
        Editor -> setGeometry( Option.rect );
    }


};



#endif /* CTREEDELEGATE_HPP */

 Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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