Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Апрель 18, 2012, 08:55



Название: Странное поведение QTreeWidget
Отправлено: once_again_abc от Апрель 18, 2012, 08:55
создаю QTreeWidget.
добавляю к нему QLineEdit, к которому, в свою очередь, привязан QIntValidator. Сам QLineEdit связан с моим слотом через сигнал editingFinished
Проблема в том, я 1) почему-то могу ввести значение меньше нижней границы указанной в QIntValidator, хотя верхний ограничитель работает; 2) при ввобде любого значения меньше нижней границы - мой слот не вызывается.

Код:
    
     QTreeWidget* pTree = new QTreeWidget( this );

    QTreeWidgetItem* pItem = new QTreeWidgetItem( pTree );
    sprintf( text, (%d - %d):", MIN, MAX );
    pItem->setText( 0, text );

    sprintf( text, "%d", MIN);
    QLineEdit* pEdit = new QLineEdit( text, pTree );
    pEdit->setAutoFillBackground( true );
    pValidator = new QIntValidator( MIN, MAX, pTree );
    pEdit->setValidator( pValidator );

    connect( pEdit, SIGNAL(editingFinished()), this, SLOT(myTextChanged()) );
    pTree->setItemWidget( pItem, 1, pEdit );


ПС. версия 4.7.3


Название: Re: Странное поведение QTreeWidget
Отправлено: Bepec от Апрель 18, 2012, 09:01
Валидатор то хоть вызывается?

PS лучше было бы, если б ты б выложил бы минимально бы компилируемый бы пример.


Название: Re: Странное поведение QTreeWidget
Отправлено: once_again_abc от Апрель 18, 2012, 09:30
Валидатор то хоть вызывается?

PS лучше было бы, если б ты б выложил бы минимально бы компилируемый бы пример.

валидатор вызывается, т.к. фильтр на верхнюю границу работает.


Название: Re: Странное поведение QTreeWidget
Отправлено: Igors от Апрель 18, 2012, 10:07
Допустим MIN = 10, пользователь начинает вводить и (пока) ввел только 1. Это еще не валидный ввод, поэтому editingFinished и нет. Но запрещать его нельзя, иначе как ввести 10? См QValidator::fixup


Название: Re: Странное поведение QTreeWidget
Отправлено: once_again_abc от Апрель 18, 2012, 11:22
Допустим MIN = 10, пользователь начинает вводить и (пока) ввел только 1. Это еще не валидный ввод, поэтому editingFinished и нет. Но запрещать его нельзя, иначе как ввести 10? См QValidator::fixup

т.е. наследник QIntValidator с переопределением fixup-а? а основную логику QValidator-а это не нраушит? завтра попробую, спасибо за идею!


Название: Re: Странное поведение QTreeWidget
Отправлено: GreatSnake от Апрель 18, 2012, 11:58
А почему бы не воспользоваться уже готовым QSpinBox и не городить огород?