Показаны сообщения с ярлыком qt. Показать все сообщения
Показаны сообщения с ярлыком qt. Показать все сообщения

воскресенье, 23 декабря 2012 г.

Баг Qt 5

Ура! Долгожданная новость! Вышел Qt 5!
Как только я узнал об этом событии, сразу же скачал установочник и...
Попытка собрать стандартный проект завершилась неудачей с следующим недвусмысленным сообщением:


"cl" ­Ґ пў«пҐвбп ў­гв७­Ґ© Ё«Ё ў­Ґи­Ґ©
Є®¬ ­¤®©, ЁбЇ®«­пҐ¬®© Їа®Ја ¬¬®© Ё«Ё Ї ЄҐв­л¬ д ©«®¬.
jom: C:\Projects\cameratest-build-Desktop_Qt_5_0_0_MSVC2010_32bit_SDK-_______\Makefile.Debug [debug\widget.obj] Error 1"

Qt что-то требовал от меня, однако, какие могут быть ошибки в стандартном проекте?

Не знаю, в чем причина такого поведения, но в интернете было найдено решение.
В консоле необходимо запустить следующий батник:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat

Затем из этой же консоли запускаем Qt Creator. У меня:
C:\root\dvlp\QTVS5\Tools\QtCreator\bin\qtcreator.exe

Запускаем проект и всё собирается! =)

воскресенье, 11 марта 2012 г.

Странный баг Qt

Для тех кто сталкивался или, может, столкнется с этим.
Имеем виджет, в его перегруженном методе paintevent рисуем с помощью QPainter эллипсы примерно так:
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawEllipse(/*здесь параметры*/)
}


* This source code was highlighted with Source Code Highlighter.
Теперь пробуем добавить этот виджет в QGraphicsView, создаем само представление, сцену, через addWidget() получаем указатель на QGraphicsProxyWidget. Пытаемся его повернуть методом setTransform и...
Если мы не выставляем кэширование у прокси виджета в QGraphicsItem::ItemCoordinateCache, то при запуске получаем assert -
"ASSERT: "i >= 0 && i < elementCount()" in file  ..\..\include/QtGui/../../src/qui/painting/qpainterpath.h, line 400"
да и ещё runtime error!
Так будет с флагами QGraphicsItem::ItemCoordinateCache и QGraphicsItem::NoCache, а вот с ItemCoordinateCache всё работает. Но данный флаг снижает качество прорисовки и не всегда его нужно использовать.
Единственное решение, которое нашел - заменить код сверху на следующий:
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPainterPath path;
path.addEllipse(/*здесь параметры*/)
painter.drawPath(path);
}


* This source code was highlighted with Source Code Highlighter.
Почему-то такая замена помогает.