Russian Qt Forum
Сентябрь 30, 2024, 06:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: drawText in QPainter  (Прочитано 8825 раз)
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;
}

Текст не отображается на форме. Смотрю в дебагере в переменной содержится то что надо вывести.
Помоги плз. Скажите в чем ошибка.
Записан
mutineer
Гость
« Ответ #1 : Март 20, 2012, 18:16 »

Рисовать надо в paintEvent()
Записан
AndyKuvaldin
Гость
« Ответ #2 : Март 20, 2012, 18:18 »

Мне надо не рисовать.
Мне надо отобразить текст на форме без использования стандартных отображателей текста...
то есть отобразить как картинку...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #3 : Март 20, 2012, 18:19 »

это и означает "рисовать"
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
mutineer
Гость
« Ответ #4 : Март 20, 2012, 18:22 »

painter.drawText()
имя метода очень мягко намекает, что это тоже "рисовать"
Записан
AndyKuvaldin
Гость
« Ответ #5 : Март 20, 2012, 18:25 »

  QPixmap img1("ЧТО ТОГДА ПЕРЕДАВАТЬ СЮДА В ПУТЬ ДО ФАЙЛА?");
    painter.drawPixmap(0,0,img1);
Записан
mutineer
Гость
« Ответ #6 : Март 20, 2012, 18:27 »

  QPixmap img1("ЧТО ТОГДА ПЕРЕДАВАТЬ СЮДА В ПУТЬ ДО ФАЙЛА?");
    painter.drawPixmap(0,0,img1);

путь к файлу, который хочешь нарисовать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #7 : Март 20, 2012, 18:35 »

так а зачем рисовать QPixmap, если можно запомнить считанную строку и отобразить ее в paintEvent() через painter.drawText()? или ты думаешь, что QPixmap возьмет и сам прочитает текст из файла и сгенерирует для него картинку? Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
AndyKuvaldin
Гость
« Ответ #8 : Март 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
Что сейчас ему не понравилось?
Записан
mutineer
Гость
« Ответ #9 : Март 20, 2012, 18:43 »

блин, тебе же сказали уже, что рисовать надо не в конструкторе, а в paintEvent()

а непонравилось то, что слеши должны быть двойные

и QPixmap не откроет тескстовый файл, он картинку может открыть
Записан
AndyKuvaldin
Гость
« Ответ #10 : Март 20, 2012, 18:44 »

так а зачем рисовать QPixmap, если можно запомнить считанную строку и отобразить ее в paintEvent() через painter.drawText()? или ты думаешь, что QPixmap возьмет и сам прочитает текст из файла и сгенерирует для него картинку? Улыбающийся

paintEvent() Что делает?
Записан
AndyKuvaldin
Гость
« Ответ #11 : Март 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?
И что ему должно передаваться в качестве аргумента?
Записан
mutineer
Гость
« Ответ #12 : Март 20, 2012, 19:02 »

Как и где должен вызываться paintEvent?
И что ему должно передаваться в качестве аргумента?

нигде явно не должен вызываться - система сама его вызовет когда надо.
и найди уже тег [ code ] в редакторе сообщений форума
Записан
AndyKuvaldin
Гость
« Ответ #13 : Март 20, 2012, 19:11 »

Код:
myMain::myMain(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::myMain)
{
    ui->setupUi(this);

    QString str;
    QFile myFile("readme.txt");
    if(!myFile.open(QIODevice::ReadOnly))
       return;
    QTextStream stream(&myFile);
    while (!stream.atEnd())
    {
      str = stream.readLine().toLocal8Bit();
    }
}

myMain::~myMain()
{
    delete ui;
}

void myMain::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QRect r = QRect(0, 0, 200, 200);
    painter.setFont(QFont("Times", 14, QFont::Normal));
    painter.drawRect(r);
    painter.drawText(r, Qt::AlignCenter | Qt::TextWordWrap, str);
}

Как будет передаваться считанная строка в ивент?
Записан
mutineer
Гость
« Ответ #14 : Март 20, 2012, 19:11 »

Сделай ее полем класса myMain
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 23.