Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рисование на виджете 
V
    Опции темы
gordmiand
Дата 25.5.2010, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



рисую эллипс (окружность) прямо на форме:
Код

void Form1::paintEvent(QPaintEvent *event)
{
    QPainter p(this);
    p.setPen(QPen(color,3));
    p.setBrush(QBrush(color, Qt::SolidPattern));
    p.drawEllipse(10, 10,     15,     15);                                    
}

все замечательно, естесственно, рисуется...
а как мне его нарисовать, допустим, на виджете my_Label типа QLabel, расположенном, конечно же, на этой же форме???
В вышеприведенном коде пробую задать
Код

    QPainter p(my_Label);

но он мне пишет
QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active

как будет правильно отрисовать окружность на лейбле?
PM MAIL   Вверх
SABROG
Дата 25.5.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Рисуй на QPixmap и потом ставь его в QLabel. Можно конечно унаследоваться от QLabel и переопределить paintEvent() метод, или установить фильтр событий (installEventFilter) и рисовать в нем, но какой смысл перекрывать отрисовку для QLabel'a? Разве что нарисовать что-то поверх того, что он уже нарисовал.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
gordmiand
Дата 26.5.2010, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



 smile 
Код

    QPixmap s;
    QPainter p(&s);

    p.setPen(QPen(color,3));
    p.setBrush(QBrush(color, Qt::SolidPattern));

    p.drawEllipse(10, 9,     15,     15);                                 
    label->setPixmap(s);

что-то не выходит...как будет правильно? 
PM MAIL   Вверх
SABROG
Дата 26.5.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Код

#include <QtGui/QPainter>
#include <QtGui/QPixmap>
#include <QtGui/QApplication>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QPixmap pix(265, 25);
    pix.fill(Qt::transparent);

    QPen pen;
    QBrush brush(QColor(Qt::red));
    QFont font;
    font.setPointSize(24);
    QPointF baseline(0, pix.height()-1);

    QPainterPath path;
    path.addText(baseline, font, "Russian Federation");

    QPainter painter(&pix);
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.setRenderHint(QPainter::TextAntialiasing, true);
    painter.setBrush(brush);
    painter.setPen(pen);
    painter.drawPath(path);
    
    painter.end();

    pix.save("test.png");
    return 0;
}



user posted image


Это сообщение отредактировал(а) SABROG - 26.5.2010, 21:39


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
gordmiand
Дата 26.5.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



SABROG: что-то я все равно не понял - стоко всего только для вывода одной надписи Russiian Federation....
подправьте пож-та мой примерчик с окружностью - так будет понятнее что я  не так делаю при работе с этим пиксмапом...
PM MAIL   Вверх
SABROG
Дата 26.5.2010, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Обязательно нужно задать размер pixmap'a

Код

    QPixmap pix(265, 25);


Иначе будет null pixmap
Цитата

A null pixmap has zero width, zero height and no contents. You cannot draw in a null pixmap.


И обязательно делать очистку, так как класс QPixmap создается над областью памяти, которую никак не инициализирует, следовательно там может быть всякий мусор, проявляющий себя в качестве артефактов на итоговом изображении.
Код

    pix.fill(Qt::transparent);


Завершить рисование прежде чем делать что-либо с картинкой, чтобы QPainter "освободил" ресурс
Код

painter.end();



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.