Название: QT(452):QSpinBox делегат Отправлено: rapaks от Июль 05, 2010, 10:31 Вопрос 1: Как изменить параметры QSpinBox делегата после его создания?
(Т.е. хотелось бы обратиться к QSpinBox делегату находящемуся в определенной ячейке и изменить его параметры, кпримеру задать новый мин и макс, но как такое сделать ? ) Вопрос 2: В чем причина, если не устанавливается текущее значение для QSpinBox делегата? (Т.е. в начале при отображении QTableWidget не отображается текущее значение в ячейках (они пусты) в которых заданы QSpinBox делегаты, но потом при активации ячейки отображается все нормально, но и тут проблема устанвавливается дефолтное значение, вместо моего четко заднного текущего занчения (см. createEditor)) Вот внутренности QSpinBox делегата: Код: QWidget *QDelegateSpinBoxInt::createEditor(QWidget* parent,const QStyleOptionViewItem& option,const QModelIndex& index)const Название: Re: QT(452):QSpinBox делегат Отправлено: Kolobok от Июль 05, 2010, 11:54 Ты создаешь QSpinBox, а потом приводишь его к QLineEdit?
Название: Re: QT(452):QSpinBox делегат Отправлено: rapaks от Июль 05, 2010, 12:26 Ты создаешь QSpinBox, а потом приводишь его к QLineEdit? Ошибся, не то скопировал сюда, у меня в таблице есть и QSpinBox и QLineEdit, но речь щас о QSpinBox. В общем заменил код выше.В QTableView нашел Код: void QAbstractItemView::openPersistentEditor ( const QModelIndex & index ) Функция edit - пашет и для QSpinBox и для QLineEdit, но как потом снять это редактирование, вроде есть closeEditor ( QWidget *, QAbstractItemDelegate::EndEditHint ) , но он ведь требует виджет - как быть? Смесь edit + closePersistentEditor - не помогает. Делегаты создаю сразу для всей нужной колонки, может стоит создавать отдельно для каждой ячейки - как это сделать я не знаю, может подскажите? В общем вопросы так и не решены. Название: Re: QT(452):QSpinBox делегат Отправлено: Kolobok от Июль 05, 2010, 17:28 Ты пишешь делегата, только чтобы min и max у QSpinBox установить?
Название: Re: QT(452):QSpinBox делегат Отправлено: rapaks от Июль 06, 2010, 08:15 Ты пишешь делегата, только чтобы min и max у QSpinBox установить? Мне нужна табличка в которой я буду задавать координаты а для этой цели лучше всего подходит QSpinBox. Все пашет замечательно, но вот беда, в некоторый момент времени диапазон ввода координат может измениться и тут мне нужно изменить у QSpinBox-а его мин и макс но увы не получается. При чем есть 2 варианта: 1) Нужно изменить диапазон для всех QSpinBox делегатов в столбце 2) Нужно изменить диапазон только для определенной ячейки - особо важно! Ну что, неужели никто не может ничего подсказать толкового ? Никто с таким не сталкивался ? Вот что хотелось бы получить и что есть сейчас, но увы не пашет из-за const которые я никак не могу обойти Код: class TableDelegateInt : public QItemDelegate Код: TableDelegateInt::TableDelegateInt(int value,int min,int max,int step,QObject* parent):QItemDelegate(parent) Тут я бы хотел изменить мин и макс Код: int TableDelegateInt::SetMin(int value) но увы оказывается, что эти переменные const Код: QSpinBox* dsbi; Прикрепил простенькую программку на которой тестирую новые способы решения этих и других задач Название: Re: QT(452):QSpinBox делегат Отправлено: nixman05 от Июль 07, 2010, 12:06 Посмотри в сторону Qt Property Browser
http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/ (http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/) Обрати внимание на QtDoubleSpinBoxFactory. Название: Re: QT(452):QSpinBox делегат Отправлено: rapaks от Июль 07, 2010, 13:01 Посмотри в сторону Qt Property Browser http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/ (http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/) Обрати внимание на QtDoubleSpinBoxFactory. Спасибо за ссылочку, посмотрю/поизучаю на досуге, но на 1 взгляд это не то чего я хочу получить. Если вы с этим кождом разобрались, тогда подскажиет еще, пожалуйста, на какие функции/методы стоит особо обратить внимание и как их применить для решения моих задач. Название: Re: QT(452):QSpinBox делегат Отправлено: MrLink от Июль 12, 2010, 10:43 У меня похожая ситуация, но у меня строк мало и для каждой сделал (пока) свой объект делегат (они причём разные: combobox, spinbox). Соответственно каждому могу менять диапазон. Но ничто не мешает объеденить их в вектор.
Присмотрелся поподробнее - у меня точно так же написано. Название: Re: QT(452):QSpinBox делегат Отправлено: rapaks от Июль 14, 2010, 08:49 Ну объединение в некоторый массив - это самое простое и очевидное решение. Но в таком массиве нужно помимо указателя на этот элемент хранить и "координаты" ячейки в которой он находится. Этот вариант у меня является сейчас основным и рабочим.
Но хочется чегото более элегантного нежели выделять дополнительную память под массив. |