Qt&QPainter

Модератор: Модераторы разделов

bosko
Сообщения: 12

Qt&QPainter

Сообщение bosko »

Дано: qt, диалоговое окно.
Хочется(очень): на этом диалоговом окне разместить виджет, который будет содержать рисунок, который я прорисую. Я сделал следующее: взял диалог, разместил на нём чистый виджет, потом создал пэйнтер, ему принадлежащий. Затем бросаюсь рисовать линии и прочее.. Но видимо реальная ситуация сильно отличается от воображаемой. Вся хитроумная комбинация закончилась на объявлении пэйнтера.. дальше даже не идет..
Вот кусок кода :) :
widget = new QWidget(this,0);grid_left->addMultiCellWidget(widget,0,2,0,2);
painter = new QPainter(widget);
… далее в отдельной функции:
painter->setWindow(QRect(-30,-30,60,60));
painter->setPen(QPen(red,4,SolidLine));
painter->setBrush(QBrush(red,DiagCrossPattern));
painter->drawLine(-20, -20, 10, 20);

Судя по-всему я пэйнтер вообще неправильно беру.. и механизм себе не представляю до конца.. Посоветуйте, пожалуйста! Спасибо :)
Спасибо сказали:
TwisT
Сообщения: 265
ОС: Debian

Re: Qt&QPainter

Сообщение TwisT »

Рекомендую книжку умную купитьесли такой и вопросов меньше будет. Я книгу Шлее купил, возникают проблемы которые касаются языка а не самой библиотеки.
Linux user #432536.
Спасибо сказали:
Лис
Сообщения: 1639
ОС: Zenwalk

Re: Qt&QPainter

Сообщение Лис »

А еще лучше - использовать Trolltech'овскую документацию. Благо, она хорошо написана. Т.к. между Qt3 и Qt4 довольно существенная разница
Спасибо сказали:
TwisT
Сообщения: 265
ОС: Debian

Re: Qt&QPainter

Сообщение TwisT »

Меня эта разница хоронит заживо, блин стоко кода править надо, ужасть какая то :unsure:
Linux user #432536.
Спасибо сказали:
Аватара пользователя
MrZ
Сообщения: 84

Re: Qt&QPainter

Сообщение MrZ »

Начни с элементарного:

Код: Выделить всё

w = new QWidget(this, 0);
w->setGeometry(0, 0, 50, 50);
QPainter p(w);
p.drawLine(0, 0, 20, 30);


потом итеративно доводи до того вида, который ты привел в первом посте.
Сам увидишь, на каком месте сломается ;)

Хотя стоп!
В какой "отдельной функции" у тебя идет отрисовка? Надеюсь, у тебя эта "отдельная функция" вызывается из paintEvent(QPaintEvent*) твоего диалога? ;)
FreeBSD 5.4
Спасибо сказали:
simsim73
Сообщения: 2

Re: Qt&QPainter

Сообщение simsim73 »

TwisT писал(а):
30.01.2006 23:42
Рекомендую книжку умную купитьесли такой и вопросов меньше будет. Я книгу Шлее купил, возникают проблемы которые касаются языка а не самой библиотеки.

Да, уже кстати вышла новая книга Шлее о Qt4
http://www.bhv.ru/books/book.php?id=181645
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Qt&QPainter

Сообщение eduard_pustobaev »

Вот тебе минималистический пример виджета, на котором можно что-нибудь рисовать:

Код: Выделить всё

class PaintWidget : public QWidget
{
    Q_OBJECT

    public:
        PaintWidget(QWidget *parent = 0);
        void draw(QPainter *painter);
    protected:
        void paintEvent(QPaintEvent *event);
};
PaintWidget::PaintWidget(QWidget *parent)
    : QWidget(parent)
{
    setPalette(QPalette(QColor(250, 250, 200)));
    setAutoFillBackground(true);
}

void PaintWidget::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);
    draw(&painter);
}

void PaintWidget::draw(QPainter *painter)
{
    painter->setRenderHint(QPainter::Antialiasing, true);
    painter->drawLine(0, 0, 20, 30);
}
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Qt&QPainter

Сообщение eduard_pustobaev »

TwisT писал(а):
31.01.2006 21:13
Меня эта разница хоронит заживо, блин стоко кода править надо, ужасть какая то :unsure:

Менять - да, дофига. А вот выучить qt4 можно и с книжкой по qt3.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
tarkus
Сообщения: 38

Re: Qt&QPainter

Сообщение tarkus »

В документации сказано: "Warning: When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by paintEvent();"

лучше всегда создавать отдельную Widget - все таки у нас object-oriented кодинг ;-)
Ушел на прогулку до выхода KDE4. Всем удачи! :)
Спасибо сказали:
elf74
Сообщения: 482
Статус: Линуксоид-Самовар :)
ОС: Mandriva Power Pack 2008.0 LCE

Re: Qt&QPainter

Сообщение elf74 »

TwisT писал(а):
31.01.2006 21:13
Меня эта разница хоронит заживо, блин стоко кода править надо, ужасть какая то :unsure:

Зачем править? есть ведь "инструмент" qt3to4

simsim73 писал(а):
03.08.2007 00:37
Да, уже кстати вышла новая книга Шлее о Qt4
http://www.bhv.ru/books/book.php?id=181645

Выйти то вышла, а где покупать ее? никто не подскажет? через Интернет есс-но, в магазине у нас ее найти сложно
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Qt&QPainter

Сообщение Liksys »

elf74 писал(а):
08.08.2007 22:27
TwisT писал(а):
31.01.2006 21:13
Меня эта разница хоронит заживо, блин стоко кода править надо, ужасть какая то :unsure:

Зачем править? есть ведь "инструмент" qt3to4

Это кривой костыль, читай assistant.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Qt&QPainter

Сообщение Denjs »

Возможно этот пример поможет в понимании того как решать проблему топика?
(пишу скорее для будущих молодых QT4-стистов)

как рисовать вне события "paintEvent()"?
пока остановился на следующей схеме - есть класс-холст (наследованный от QWidget). у него есть shared-свойство типа QPixmap - от него "натравливаются" QPainter-ы (создаваемые в других объектах в любое время), и "на него все рисуется".
Класс-холст в своем событии "при рисовании" просто отображает его.

------------
кстати, народ - подскажите - "двойная буферизация" - это оно и есть такое? чего-то мой английский в ступоре последнее время... :mellow:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали: