2883
|
Qt / Пользовательский интерфейс (GUI) / Re: QListViewItem
|
: Март 17, 2010, 10:49
|
Можно посмотреть исходники PropertiesEditor-a designer-a tools/designer/designer/propertyeditor.cpp Там всё что вам нужно есть. Не очень понятно, чего там надо написать Дык всё просто - (толщина рамки + отступ) * 2 + ширина иконки + ширина текста может проще в paintCell вызвать метод базового класса? И QListView отрисует текст ячейки - разве это вам надо?
|
|
|
2884
|
Qt / 2D и 3D графика / Re: QLinearGradient bugs?
|
: Март 17, 2010, 10:32
|
Остается 2 выхода - либо самому заполнять image градиентом либо тупо создать image (2^15 x 1) и залить его как делаете вы и уже потом scale-нуть этот image в image нужного вам размера. Для плавности переходов можно задействовать Qt::SmoothTransformation.
|
|
|
2885
|
Qt / Пользовательский интерфейс (GUI) / Re: QListViewItem
|
: Март 17, 2010, 09:48
|
Можно, конечно, и так. Только обычно делают немного по-другому - используют только одну кнопку и двигают на текущую ячейку, а для остальных ячеек кнопку отрисовывают сами. К тому же это неэффективно в случае большой таблицы. Интересно, а как вы решили вопрос с фокусом для текущей ячейки/кнопки и отображением текущей строки. И как работает прокрутка через Up/Down.
К тому же вы забыли определить virtual int width ( const QFontMetrics & fm, const QListView * lv, int c ); // QListViewItem::paintCell() - if you reimplement this function, you should also reimplement width(). Ведь QListView без этого никогда не узнает реальный размер ячейки.
|
|
|
2886
|
Qt / Пользовательский интерфейс (GUI) / Re: QListViewItem
|
: Март 16, 2010, 14:55
|
Наследуйся от QListViewItem и уже в его paintCell() рисуй кнопки используя QStyle::drawPrimitive(). Можно посмотреть исходники PropertiesEditor-a designer-a tools/designer/designer/propertyeditor.cpp
|
|
|
2887
|
Qt / 2D и 3D графика / Re: Маштабирование изображения в GraphicsView
|
: Март 16, 2010, 09:23
|
Это только у меня с утра в глазах двоится? Вопрос нужно в эту ветку. видимо надо использовать scale() Да, его. В paint() QGraphicsItem-a задаем scale() с учётом размера изображения и самого элемента и не забываем учитывать текущие трансформации.
|
|
|
2888
|
Qt / Пользовательский интерфейс (GUI) / Re: Фиксированный размер диалога под Windows
|
: Март 15, 2010, 17:33
|
Покапавшись в исходниках Qt обнаружил нужный мне атрибут Qt::WA_DontShowOnScreen. Т.е. у Qt всё нужное уже есть, только не для нас Перед show() достаточно выставить этот атрибут и окно не появится. Только вот, чтобы заставить его появиться одно выключение сего атрибута не помогает Помимо этого нужно сбросить Qt::WA_WState_ExplicitShowHide выставленный в QWidget::setVisible() и уже после этого по-новой вызывать QWidget::setVisible( true ). Вот так я избавился от глюка при восстановлении панелей главного окна: C++ (Qt) void MainWindow::setVisible( bool set ) { if( set ) setAttribute( Qt::WA_DontShowOnScreen, true ); restoreGeometry( g ); restoreState( s ) QWidget::setVisible( set ); if( set && testAttribute( Qt::WA_DontShowOnScreen ) ) { setAttribute( Qt::WA_DontShowOnScreen, false ); setAttribute( Qt::WA_WState_ExplicitShowHide, false ); QTimer::singleShot( 5, this, SLOT( show() ) ); } }
|
|
|
2889
|
Qt / Пользовательский интерфейс (GUI) / Re: QWizard, "работающая" QWizardPage
|
: Март 15, 2010, 14:00
|
Хм, странно... Тогда в конструктор WIZARD-а добавь connect( this, SIGNAL( currentIdChanged( int ) ), SLOT( showPage( int ) ) ); и в нём же пропиши слот C++ (Qt) void WIZARD::showPage( int id ) { if( id == 1 ) { Two* two = dynamic_cast< Two* >( page( id ) ); two->test(); } }
|
|
|
2890
|
Qt / Пользовательский интерфейс (GUI) / Re: Фиксированный размер диалога под Windows
|
: Март 15, 2010, 12:28
|
На самом деле считаю такую политику Qt, что о том, что отработали все geometry/layout managers, мы можем узнать уже только в QEvent::Show, ущербной. Мне раньше довольно-таки много приходилось писать на Xt/Motif. Так вот в Xt у виджета есть очень полезное свойство mappedWhenManaged, отключив которое можно заставить отработать все geometry managers без появления самого окна. Очень жалко, что в Qt такого нет.
|
|
|
2894
|
Qt / Пользовательский интерфейс (GUI) / Re: Как сделать нестандартный вид
|
: Март 11, 2010, 12:07
|
Покопавшись ещё раз в исходниках Qt понял следующее. Для каждого top-level окна создается QWidgetBackingStore класс, в котором создается QWindowSurface класс и уже в нём создается off-screen pixmap соответствующий размеру top-level окна. Этот pixmap при изменении размера окна _всегда_ пересоздается, т.к. pixmaps не могут динамически менять размер. XRenderComposite() в основном используется для рендеринга статических текстур. Отрисовка всех drawPrimitivies делается через QImage с последующим копированием в off-screen pixmap. Вообщем визуально всё это выглядит конечно красиво, но ожидать мега скорости от такого подхода не стоит - за всё нужно платить
|
|
|
2895
|
Qt / Пользовательский интерфейс (GUI) / Re: Как сделать нестандартный вид
|
: Март 11, 2010, 10:46
|
Т.е. по твоему получается, что QPixmap не ускоряет вывод, а даже замедляет его? Это где это я такое говорил? Я просто сказал, что QPixmap тяжелый ресурс. Известны случаи, когда у GDI съезжала крыша при большом количестве созданных pixmap-ов. Конечно, QPixmap, находящийся в памати Xserver-a/GDI отрисуется намного быстрее, чем QImage находящийся в памяти процесса. А как быть с аппаратным 2D-ускорением? Как его можно задействовать при рендеринге в память? А вот это для меня большой вопрос. Задействована ли 2D акселерация в Qt4.x вообще. Если посмотреть исходники Qt на предмет того, что там используется для отрисовки, то почти везде для формирования используется QPixmap, а не QImage. Я боюсь, что исходники вы смотрели невнимательно. Если сидите на X-ах, то под отладчиком поставьте breakpoint на XPutImage и всё сами увидите.
|
|
|
|
|