Russian Qt Forum

Qt => Model-View (MV) => Тема начата: vasasol от Ноябрь 06, 2011, 18:01



Название: Банальный вопрос по QTableView
Отправлено: vasasol от Ноябрь 06, 2011, 18:01
Здравствуйте!
Вот банальный вопрос: есть QTableView и в колонках с 5 по 10 и в строках с 20 по 30 отображаются числовые значения.
Сам вопрос: как в этих ячейка (в указанном диапазоне) установить маску на эти числа?


Название: Re: Банальный вопрос по QTableView
Отправлено: madRoger от Ноябрь 06, 2011, 19:18
Если нужна маска ввода числа, то можно реализовать делегат для ячейки, содержащий поле ввода QLineEdit. В делегате при создании поля ввода указать маску ввода с помощью QLineEdit::setInputMask.

Цитировать
....и в колонках с 5 по 10 и в строках с 20 по 30....

Тут сложнее, потому что присвоить делегат конкретной ячейке нельзя (можно либо всей колонке, либо всей строке). Можно попробовать поиграть с перекрытием делегатов.


Название: Re: Банальный вопрос по QTableView
Отправлено: kambala от Ноябрь 06, 2011, 21:46
создавать в своем делегате QLineEdit не нужно - стандартный делегат и так содержит его, поэтому надо просто взять существующий и установить ему маску


Название: Re: Банальный вопрос по QTableView
Отправлено: madRoger от Ноябрь 06, 2011, 23:46
Цитировать
надо просто взять существующий и установить ему маску

kambala, а как работать с существующим и какой класс ты имеешь ввиду под стандартным делегатом ?


Название: Re: Банальный вопрос по QTableView
Отправлено: vasasol от Ноябрь 06, 2011, 23:49
Если нужна маска ввода числа, то можно реализовать делегат для ячейки, содержащий поле ввода QLineEdit. В делегате при создании поля ввода указать маску ввода с помощью QLineEdit::setInputMask.

Цитировать
....и в колонках с 5 по 10 и в строках с 20 по 30....

Тут сложнее, потому что присвоить делегат конкретной ячейке нельзя (можно либо всей колонке, либо всей строке). Можно попробовать поиграть с перекрытием делегатов.

В том и дело, что только выбранному диапазону ячеек


Название: Re: Банальный вопрос по QTableView
Отправлено: madRoger от Ноябрь 06, 2011, 23:59
По поводу диапазона - сначала установить делегат с маской для всего QTableView, а потом исключить ненужные столбцы и строки, установив для них стандартный QItemDelegate.

kambala пишет, что можно работать со стандартным делегатом (вероятно QItemDelegate), установив для него маску. Если это реально, то все вообще просто.


Название: Re: Банальный вопрос по QTableView
Отправлено: kambala от Ноябрь 07, 2011, 00:32
я немного перепутал - я когда-то делал подобное для редактируемой ячейки: наследовался от QItemDelegate, переопределял createEditor(), в нем получал строку ввода через QItemDelegate::createEditor() и ей уже задавал нужные мне свойства. а вот насчет чисто отображения - не знаю, наверное таки придется добавлять QLineEdit самому.

да, и щас рекомендуют использовать QStyledItemDelegate в качестве базового класса.


Название: Re: Банальный вопрос по QTableView
Отправлено: madRoger от Ноябрь 07, 2011, 09:47
Как я понял, в данном случае речь идет о маске ввода, соответственно, ячейки будут редактироваться. Если бы была нужна маска для отображения, делегат вообще не нужен.


Название: Re: Банальный вопрос по QTableView
Отправлено: vasasol от Ноябрь 07, 2011, 12:35
Как я понял, в данном случае речь идет о маске ввода, соответственно, ячейки будут редактироваться. Если бы была нужна маска для отображения, делегат вообще не нужен.
Маска нужна для отображения


Название: Re: Банальный вопрос по QTableView
Отправлено: madRoger от Ноябрь 07, 2011, 13:16
QString::number


Название: Re: Банальный вопрос по QTableView
Отправлено: vasasol от Ноябрь 07, 2011, 17:06
QString::number
Это где прикручивается? почему-то значения int = 123456789 непонятно иногда отображаются в виде 1.2+Е.....