Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: bitwise от Март 11, 2010, 22:49



Название: Виджет для рисования
Отправлено: bitwise от Март 11, 2010, 22:49
Подскажите пожалуйста, если я хочу нарисовать 2D-диаграмму, в каком виджете это можно/нужно делать?
Пытаюсь использовать QGraphicsView и рисовать на нем, но ничего не получается... ???


Название: Re: Виджет для рисования
Отправлено: BRE от Март 11, 2010, 22:58
Посмотри в примерах на Chart Example.


Название: Re: Виджет для рисования
Отправлено: bitwise от Март 11, 2010, 23:18
а в QGraphicsView это возможно? Для моей задачи мне достаточно было бы ломаную линию изобразить - так проще.


Название: Re: Виджет для рисования
Отправлено: BRE от Март 11, 2010, 23:29
а в QGraphicsView это возможно? Для моей задачи мне достаточно было бы ломаную линию изобразить - так проще.
Ну тогда смотри Diagram Scene Example.  :)


Название: Re: Виджет для рисования
Отправлено: bitwise от Март 11, 2010, 23:32
Ok. Спасибо :)


Название: Re: Виджет для рисования
Отправлено: ieroglif от Март 12, 2010, 00:52
Код:
// wgt.h
class wgt : public QWidget {
...
private:
    void paintEvent(QPaintEvent *);
...
};

//wgt.cpp

void wgt::paintEvent(QPaintEvent *) {
    QPainter painter(this);
    painter.setPen( QPen(Qt::green,1,Qt::DashLine) );
    painter.drawLine(0,0,10,10);
    painter.drawLine(10,10,10,20);
    painter.drawLine(10,20,100,15);
}


Название: Re: Виджет для рисования
Отправлено: bitwise от Март 12, 2010, 22:09
Код:
// wgt.h
class wgt : public QWidget {
...
private:
    void paintEvent(QPaintEvent *);
...
};

//wgt.cpp

void wgt::paintEvent(QPaintEvent *) {
    QPainter painter(this);
    painter.setPen( QPen(Qt::green,1,Qt::DashLine) );
    painter.drawLine(0,0,10,10);
    painter.drawLine(10,10,10,20);
    painter.drawLine(10,20,100,15);
}

если я правильно понимаю, чтобы рисовать в дочернем виджете, например в QGraphicsView, код должен выглядеть как-то так:
Код:
QPainter painter(ui->graphicsView);
ui->graphicsView->update();

все верно?


Название: Re: Виджет для рисования
Отправлено: lit-uriy от Март 13, 2010, 11:59
bitwise, принципиально рисовать можно только на самом себе. Т.е. в обработчике события paintEvent данного виджета. Рисование на чужом виджете задача не тривиальная.

Графическое представление (Graphics View Framework) имеет несколько иную идею:
Ты создаёшь элементы и помещаешь их на сцену, а представление (QGraphicsView) отображает содержимое сцены.
На мой взгляд графики и Графическое представление неудачная пара.

Просто создай наследника от QWidget и в его paintEvent рисуй. Или воспользуйся готовой библиотекой Qwt


Название: Re: Виджет для рисования
Отправлено: ieroglif от Март 19, 2010, 20:36
в paintEvent ты создаёшь QPainter(this) - вот указатель на него можешь кидать кому и куда угодно - в любые другие классы и функции - тогда код рисования будет осуществляться в других классах, а само рисование - на твоём виджете.