Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Karl-Philipp от Май 05, 2008, 11:05



Название: вопрос по делегатам
Отправлено: Karl-Philipp от Май 05, 2008, 11:05
Здравствуйте,
у меня задача сделать таблицу QTableView, к которой можно было бы добавлять строку. В каждой ячейке добавленной строки должен находиться определенный делегат (формат числа №n).

Структура строки следующая.

---------------------------------+----------+---------+
|    любые    символы        |   Спец   | Cпец     |
+--------------+---------------+ формат | формат  |
|Спец формат|Спец формат|   числа  | числа    |
|числа (№1)  |числа (№2) |   (№3)    | (№5)    |
+--------------+---------------+-----------+----------+

фактически я добавляю две строки, в которых объединяю ячейки.

Допустим, что делегаты для каждого формата числа в таблице смогут устанавливаться с помощью

Цитировать
void QAbstractItemView::setItemDelegateForColumn ( int column, QAbstractItemDelegate * delegate )

Однако в этом случае я не смогу вводить любые символы в левой верхней ячейке.
Подскажите, пожалуйста, какое решение может быть?


Название: Re: вопрос по делегатам
Отправлено: ритт от Май 05, 2008, 11:27
если не ошибаюсь, индекс ячейки в делегат передаётся - можно в делегатах закодить поведение до определённой строки и после

возможно, есть решение проще - надо искать/читать


Название: Re: вопрос по делегатам
Отправлено: Karl-Philipp от Май 05, 2008, 11:33
точно, спасибо.
Помню, было уже про это не так давно. Но не смог найти.


Название: Re: вопрос по делегатам
Отправлено: Karl-Philipp от Май 05, 2008, 18:35
Есть Qt 4.2.3, в ней пример:
\examples\widgets\lineedits\
Вопрос вызывает поведение валидатора QDoubleValidator

Цитировать
void Window::validatorChanged(int index)
 {
     switch (index) {
     case 0:
         validatorLineEdit->setValidator(0);
         break;
     case 1:
         validatorLineEdit->setValidator(new QIntValidator(
             validatorLineEdit));
         break;
     case 2:
         validatorLineEdit->setValidator(new QDoubleValidator(-999.0,
             999.0, 2, validatorLineEdit));
     }

     validatorLineEdit->clear();
 }

А именно, при попытке ввести значение с валидатором double validator, выводятся цифры, выходящие за указанный диапазон...

Где мои грабли?
компилятор  VC++



Название: Re: вопрос по делегатам
Отправлено: pastor от Май 05, 2008, 18:54
А именно, при попытке ввести значение с валидатором double validator, выводятся цифры, выходящие за указанный диапазон...

Где мои грабли?
компилятор  VC++

Вот на примере Qt 3.3

http://trolltech.com/developer/knowledgebase/faq.2006-05-15.0450651751/?searchterm=validator

Нужно наследоваться от QDoubleValidator и переопределить метод validate


Название: Re: вопрос по делегатам
Отправлено: Karl-Philipp от Май 08, 2008, 21:57
спасибо большое, получилось :)