Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: QCasper от Октябрь 22, 2010, 11:49



Название: QPainter в консольном приложении падает на drawText
Отправлено: QCasper от Октябрь 22, 2010, 11:49
Вот такой код падает на строчке p.drawText, при этом рисование других примитивов работает нормально.
Падает только если объект приложения создаётся с помощью класса QCoreApplication. C QApplication всё нормально.
Может кто-то сталкивался, как же текст нарисовать?

Код:
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QImage i(200, 200, QImage::Format_RGB32);
QPainter p(&i);
p.drawText(0, 0, "Hello world");
return 0;
}


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: GreatSnake от Октябрь 22, 2010, 11:55
Ответ в вопросе.
Главное отличие QCoreApplication от QApplication, что последний инициалицирует Paint и Font Engine, а первый нет.
Да и сами подумайте, ведь Qt не сам рендерит текст. Для этого он использует средства графической подсистемы ОС.
Поэтому без QApplication никак не обойтись. Мало того нужен доступ к XServer-у для X11 и к GDI для винды.
Если хотите генерить картинки втихую ищите что-нибудь другое.


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: QCasper от Октябрь 22, 2010, 12:32
Если первый не может инициализировать PaintEngine почему же примитивы рисуются без проблем?


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: GreatSnake от Октябрь 22, 2010, 12:36
Я немного не так выразился. Имелось в виду FontEngine.
Другие примитивы Qt отрисовывает сам, а вот текст не может, да и не его это дело.


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: QCasper от Октябрь 22, 2010, 12:41
Вобщем суть в том, что генерить картинки с текстом с помощью Qt "втихую" невозможно как не извернись, верно я понял?


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: GreatSnake от Октябрь 22, 2010, 12:43
Имхо, нет :(


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: ufna от Октябрь 22, 2010, 13:30
А кто мешает сделать QApplication без GUI? Или есть ограничения?


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: GreatSnake от Октябрь 22, 2010, 13:34
Цитировать
А кто мешает сделать QApplication без GUI? Или есть ограничения?
Перед тем как глупость спрашивать, не мешало бы в ассистенте почитать описание QApplication.


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: QCasper от Октябрь 22, 2010, 15:47
А кто мешает сделать QApplication без GUI? Или есть ограничения?

Есть отсутствие X-сервера. Да, пожалуй можно считать это ограничением :)


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: ufna от Октябрь 22, 2010, 16:17
Перед тем как глупость спрашивать, не мешало бы в ассистенте почитать описание QApplication.

Перед тем, как глупость ответить, подумай почему задан вопрос :)


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: GreatSnake от Октябрь 22, 2010, 16:23
Цитировать
Перед тем, как глупость ответить, подумай почему задан вопрос
Ну дык вопрос то левый. Как QApplication может быть без GUI, если он сам этот GUI и порождает?


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: ufna от Октябрь 22, 2010, 20:01
Ну дык вопрос то левый. Как QApplication может быть без GUI, если он сам этот GUI и порождает?

Может быть не создавая ни одного виджета? :) У меня как-то отлично работают приложения, не имеющие никакого визуального отображения. Висит себе процесс и висит, зачем ему GUI?


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: GreatSnake от Октябрь 22, 2010, 20:38
Блин, чудак-человек, проблема-то в том, что нужен работающий FontEngine.
А без полной инициализации QApplication и её взаимодействии с графической подсистемой ОС текст отрендерить не получится.


Название: Re: QPainter в консольном приложении падает на drawText
Отправлено: ufna от Октябрь 22, 2010, 22:49
Блин, чудак-человек, проблема-то в том, что нужен работающий FontEngine.
А без полной инициализации QApplication и её взаимодействии с графической подсистемой ОС текст отрендерить не получится.

Простите, а я где-то спорю с тем, что если граф. подсистемы нет, то QApplication "полно инициализировать" не получится? :) Нигде в теме до моего сообщения не было сказано об отсутствии х-сервера и вообще о никсах.