Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: andi от Январь 23, 2007, 07:51



Название: Виджеты KDE
Отправлено: andi от Январь 23, 2007, 07:51
Незнаю уместно ли здесь обсуждение виджетов созданных ребятами из КДЕ, тем не менее попробую.
Хочу использовать KDoubleSpinBox.
При старте программы вылетает SEGSEGV
Смотрю стек в отладчике. Затык происходит в конструкторе виджета.
Вложенность такая:
Устанавливаем setMaxValue()
потом идут всякие проверки на диапазон в родительских методах
На самом верху стоит функция
KLocale::doFormatInit()
Сегофолтится именно в ней.
Теперь сам вопрос, не уж то ребята (кде-ешные) до сих пор не научились нормально цифры по формату рисовать?
Есть ли способ безболезненного обхода?
Или мож у кого завалялся нормальный спин-бокс с вещественным value?

добавлено спустя 19 минут:

 Пардон, забыл добавить что Qt3.3.6 КДЕ 3.4.2


Название: Виджеты KDE
Отправлено: Admin от Январь 23, 2007, 14:39
а зачем использовать KDE элементы?
переносимость нарушается

а так - если у ребят работает в KDE и у тебя должно


Название: Виджеты KDE
Отправлено: andi от Январь 24, 2007, 05:26
Возможно.
Тогда, если несложно, в дезигнере кинь на форму вышеуказанный виджет.
Собери его в приложение и запусти. Мне просто интересно должен ли он работать "из упаковки"
или нужно долго и упорно его затачивать.


Название: Виджеты KDE
Отправлено: Admin от Январь 24, 2007, 12:01
к сожалению я kde компоненты не пользую
у меня их в Debian нет :(


Название: Виджеты KDE
Отправлено: andi от Январь 24, 2007, 12:27
свезло так свезло!


Название: Виджеты KDE
Отправлено: Admin от Январь 24, 2007, 13:51
я как то раз пытался сделать spin c float величиной
в конце экспериментов понял что этого точно мне не нада :)
такого элемента


Название: Виджеты KDE
Отправлено: andi от Январь 25, 2007, 12:23
Вобщем я взял исходники QSpinBox и QSpinWidget и без всякого QRangeControl переправил там все int на double и вроде как заработало (но только на домашнем компе. slack11, KDE3.5.4, qt3.3.6). Принес на работу (slack10.2, KDE3.4.2, qt3.3.4) пересобрал, выскочил SIGSEGV
в обработчике void SpinWidget::paintEvent( QPaintEvent * )
в вызове:
style().drawComplexControl( control, &p, this,fr, cg,flags,   (uint)QStyle::SC_All, active );

Судя по сообщения отладчика, при отрисовке кнопок, он пытается узнать, что рисовать на кнопках (стрелки или +-) и лезет узнавать в QSpinWidget.
Вот такая вот фигня

добавлено спустя 3 часа 26 минут:

 В продолжении.
Дабы не ковырять Qt на уровне ее ядра, заменил drawComplexControl на свой вызов,
в котором сам жестко рисую бордюр и стрелки.
Анимации нажатий и наезда мышкой не стало (в сравнении с исходным QSpinBox).
Зато выглядит как спинбокс и работает соответственно.
Тему можно считать закрытой