Название: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 18:12 Вот код:
#include "mymain.h" #include "ui_mymain.h" #include "QFile.h" #include "QString.h" #include "QTextStream.h" #include "QRect.h" #include "QFont.h" #include "QPainter.h" myMain::myMain(QWidget *parent) : QMainWindow(parent), ui(new Ui::myMain) { ui->setupUi(this); QString str; QPainter painter(this); QRect r = QRect(0, 0, 200, 200); painter.setFont(QFont("Times", 14, QFont::Normal)); painter.drawRect(r); QFile myFile("readme.txt"); if(!myFile.open(QIODevice::ReadOnly)) return; QTextStream stream(&myFile); while (!stream.atEnd()) { str = stream.readLine().toLocal8Bit(); painter.drawText(r, Qt::AlignCenter | Qt::TextWordWrap, str); } } myMain::~myMain() { delete ui; } Текст не отображается на форме. Смотрю в дебагере в переменной содержится то что надо вывести. Помоги плз. Скажите в чем ошибка. Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 18:16 Рисовать надо в paintEvent()
Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 18:18 Мне надо не рисовать.
Мне надо отобразить текст на форме без использования стандартных отображателей текста... то есть отобразить как картинку... Название: Re: drawText in QPainter Отправлено: kambala от Март 20, 2012, 18:19 это и означает "рисовать"
Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 18:22 painter.drawText()
имя метода очень мягко намекает, что это тоже "рисовать" Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 18:25 QPixmap img1("ЧТО ТОГДА ПЕРЕДАВАТЬ СЮДА В ПУТЬ ДО ФАЙЛА?");
painter.drawPixmap(0,0,img1); Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 18:27 QPixmap img1("ЧТО ТОГДА ПЕРЕДАВАТЬ СЮДА В ПУТЬ ДО ФАЙЛА?"); painter.drawPixmap(0,0,img1); путь к файлу, который хочешь нарисовать? Название: Re: drawText in QPainter Отправлено: kambala от Март 20, 2012, 18:35 так а зачем рисовать QPixmap, если можно запомнить считанную строку и отобразить ее в paintEvent() через painter.drawText()? или ты думаешь, что QPixmap возьмет и сам прочитает текст из файла и сгенерирует для него картинку? :)
Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 18:42 #include "mymain.h"
#include "ui_mymain.h" #include "QFile.h" #include "QPixmap.h" #include "QPainter.h" myMain::myMain(QWidget *parent) : QMainWindow(parent), ui(new Ui::myMain) { ui->setupUi(this); QFile myFile("readme.txt"); if(!myFile.open(QIODevice::ReadOnly)) return; QPainter painter(this); QPixmap img("C:\Qt\project\Object\debug\readme.txt"); painter.drawPixmap(0, 0, img); } myMain::~myMain() { delete ui; } Выдается ошибка линковки, что есть неизвестные символы \Q \p \O \d \r Что сейчас ему не понравилось? Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 18:43 блин, тебе же сказали уже, что рисовать надо не в конструкторе, а в paintEvent()
а непонравилось то, что слеши должны быть двойные и QPixmap не откроет тескстовый файл, он картинку может открыть Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 18:44 так а зачем рисовать QPixmap, если можно запомнить считанную строку и отобразить ее в paintEvent() через painter.drawText()? или ты думаешь, что QPixmap возьмет и сам прочитает текст из файла и сгенерирует для него картинку? :) paintEvent() Что делает? Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 19:00 #include "mymain.h"
#include "ui_mymain.h" #include "QFile.h" #include "QString.h" #include "QTextStream.h" #include "QRect.h" #include "QFont.h" #include "QPainter.h" myMain::myMain(QWidget *parent) : QMainWindow(parent), ui(new Ui::myMain) { ui->setupUi(this); QString str; QPainter painter(this); QRect r = QRect(0, 0, 200, 200); painter.setFont(QFont("Times", 14, QFont::Normal)); painter.drawRect(r); QFile myFile("readme.txt"); if(!myFile.open(QIODevice::ReadOnly)) return; QTextStream stream(&myFile); while (!stream.atEnd()) { str = stream.readLine().toLocal8Bit(); painter.drawText(r, Qt::AlignCenter | Qt::TextWordWrap, str); } } myMain::~myMain() { delete ui; } void myMain::paintEvent(QPaintEvent*) { } Как и где должен вызываться paintEvent? И что ему должно передаваться в качестве аргумента? Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 19:02 Как и где должен вызываться paintEvent? И что ему должно передаваться в качестве аргумента? нигде явно не должен вызываться - система сама его вызовет когда надо. и найди уже тег [ code ] в редакторе сообщений форума Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 19:11 Код: myMain::myMain(QWidget *parent) Как будет передаваться считанная строка в ивент? Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 19:11 Сделай ее полем класса myMain
Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 19:19 Код: #ifndef MYMAIN_H Код: #include "mymain.h" Ошибка collect2 ld returned 1 Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 19:23 точнее ошибку напиши
Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 19:25 Выполняется сборка проекта Object...
Настройки не изменились, этап QMake пропускается. Запускается: C:/Qt/2009.03/mingw/bin/mingw32-make.exe -w mingw32-make: Entering directory `C:/Qt/project/Object' C:/Qt/2009.03/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory `C:/Qt/project/Object' g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\Object.exe debug/main.o debug/mymain.o debug/moc_mymain.o -L"c:\Qt\2009.03\qt\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4 mingw32-make[1]: Leaving directory `C:/Qt/project/Object' mingw32-make: Leaving directory `C:/Qt/project/Object' C:\Qt\2009.03\mingw\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot open output file debug\Object.exe: Permission denied collect2: ld returned 1 exit status mingw32-make[1]: *** [debug\Object.exe] Error 1 mingw32-make: *** [debug] Error 2 Завершено с кодом возврата 2. Ошибка во время сборки проекта Object Во время выполнения сборки на этапе 'Make' Название: Re: drawText in QPainter Отправлено: BRE от Март 20, 2012, 19:27 Заверши предыдущую сборку программы. Убей в памяти Object.exe. :)
Название: Re: drawText in QPainter Отправлено: AndyKuvaldin от Март 20, 2012, 19:39 А почему функция вызывается один раз на 1 строчку последнюю...
А что нужно исправить если я хочу что бы каждая считанная строка оказывалась отрисованная...? Название: Re: drawText in QPainter Отправлено: kambala от Март 20, 2012, 20:02 сохрани все строки в QStringList и рисуй их
Название: Re: drawText in QPainter Отправлено: mutineer от Март 20, 2012, 20:50 А почему функция вызывается один раз на 1 строчку последнюю... А что нужно исправить если я хочу что бы каждая считанная строка оказывалась отрисованная...? потому что каждая новая считанная строка перезаписывает старую |