Strona 1 z 1

QT GraphicScene -> rysowanie lini

: 27 lut 2011, 11:50
autor: patlas
Witam :)

Od kilku dni próbuje narysować sobie prostą linie przy pomocy QGraphicsScene oraz QGraphicsView, niestety bezskutecznie :(

Poniżej umieszczam kod (w sumie kilka linijek bo tyle on zajmuje)

Kod: Zaznacz cały

PLIK WIDGET.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QGraphicsItem>
namespace Ui {
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    QGraphicsScene *myscene;
    QGraphicsView *view;

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
oraz plik

Kod: Zaznacz cały

WIDGET.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    myscene = new QGraphicsScene;
    QPen pen(Qt::blue);
    myscene->addLine(0,0,5,5,pen);
    view->setScene(myscene);
    view->scene();

}

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

Plik main.cpp nie został zmieniony.
Na formie znajduje się obiekt QGraphicsView (nazwa view)

Co robie nie tak :?:

Pozdrawiam patlas :D

Odp: QT GraphicScene -> rysowanie lini

: 28 lut 2011, 23:31
autor: PanCiasteczko
Koleś,
Rozumiem że korzystasz z QTCreatora? jeśli tak to 'view' powinien być polem klasy ui.
Jak tak to to wywal:

Kod: Zaznacz cały

//QGraphicsView *view;
a to zamień tak:

Kod: Zaznacz cały

ui->view->setScene(myscene);
//view->scene(); //to wogle jest nie potrzebne
U mnie ta kreseczka się narysowała jakoś tak w środku QGraphicsView, tą scenę chyba trzeba jeszcze ustawić jakoś offset jej, być może u ciebie też się rysuje tylko gdzieś poza oknem?
Musisz korzystać z QGraphicScene? Do prostych rysunków wystarczy rysowanie po samym widgecie...

Odp: QT GraphicScene -> rysowanie lini

: 01 mar 2011, 16:35
autor: patlas
Potrzebuje zrobić proste wykresy słupkowe (zmieniające się zależnie od odebranych dany) :)
Nie musi to być QGraphicsView :) A w jaki sposób mogę rysować po Wigdecie różnymi kolorami:?:

Odp: QT GraphicScene -> rysowanie lini

: 12 mar 2011, 15:36
autor: PanCiasteczko
Sorry za zwłokę.
Jeden, prosty sposób rysowania w Qt jest taki:

* robisz sobie klasę która dziedziczy po QWidget (możesz to zrobić w 'creatorze' gdzieś w menu nowe coś)
* nadpisujesz jej metodę paintEvent:

Kod: Zaznacz cały

void PaintWidget::paintEvent (QPaintEvent *){

QPainter qpainter (this);
//czyszczenie tła
qpainter.setBrush(QBrush(Qt::white));
qpainter.drawRect (rect());

qpainter.setPen (QPen (Qt::green, 1));

qpainter.drawLine( 0, 0, 100, 100);

...
* poszukaj dokumentacji QPainter

zaleta tej metody jest taka że jak sobie taki Widget potem gdzieś umieścisz to nie musisz się już martwić o odświeżanie tego bo metoda będzie się wołała sama za każdym razem jak z widgetem na ekranie się coś będzie działo.

Taką metodę ja stosuje. może są leprze...