QT GraphicScene -> rysowanie lini

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
patlas
Sędziwy Jeż
Sędziwy Jeż
Posty: 42
Rejestracja: 23 maja 2008, 10:53
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

QT GraphicScene -> rysowanie lini

Post 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
Awatar użytkownika
PanCiasteczko
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 07 sty 2007, 16:03
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: Fluxbox
Architektura: x86

Odp: QT GraphicScene -> rysowanie lini

Post 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...
patlas
Sędziwy Jeż
Sędziwy Jeż
Posty: 42
Rejestracja: 23 maja 2008, 10:53
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: QT GraphicScene -> rysowanie lini

Post 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:?:
Awatar użytkownika
PanCiasteczko
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 07 sty 2007, 16:03
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: Fluxbox
Architektura: x86

Odp: QT GraphicScene -> rysowanie lini

Post 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...
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość