Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: bitwise от Февраль 25, 2010, 12:32



Название: Графический helloworld )). Как нарисовать линию?
Отправлено: bitwise от Февраль 25, 2010, 12:32
Всем привет! Я новичок в Qt. Сейчас разбираюсь с рисованием? чтобы графики строить. Написал простой код, но не понимаю почему не работает ( ничего не происходит ). Цель - нарисовать линию на форме по нажатию кнопки. Помогите понять в чем дело:

appwindow.h:

Код:
#ifndef APPWINDOW_H
#define APPWINDOW_H

#include <QWidget>

namespace Ui
{
    class appwindow;
}

class appwindow : public QWidget
{
    Q_OBJECT

public:
    appwindow(QWidget *parent = 0);
    ~appwindow();

public slots:
    void startPaint();

protected:
    void changeEvent(QEvent *e);
    void paintEvent(QEvent* e);

private:
    Ui::appwindow *ui;
};

#endif // APPWINDOW_H

appwindow.cpp:

Код:
#include "appwindow.h"
#include "ui_appwindow.h"
#include <QPainter>

appwindow::appwindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::appwindow)
{
    ui->setupUi(this);

    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(startPaint()));
}

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

void appwindow::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void appwindow::startPaint()
{
    update();
}


void appwindow::paintEvent(QEvent* e)
{
    QPainter painter(this);
    QBrush brush(Qt::red, Qt::SolidPattern);
    painter.setBrush(brush);
    painter.drawLine(10,10,-100,100);
}


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: alexman от Февраль 25, 2010, 13:03
void QPainter::setPen ( const QPen & pen )


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: bitwise от Февраль 25, 2010, 13:18
добавил:

    QPen pen(Qt::SolidLine);
    painter.setPen(pen);


не помогло.
у меня после вызова update() метод void appwindow::paintEvent(QEvent* e) не вызывается...


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: BRE от Февраль 25, 2010, 13:34
virtual void QWidget::paintEvent ( QPaintEvent * event )


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: bitwise от Февраль 25, 2010, 13:53
Сработало! спасибо!! только теперь линия появляется не по нажатию кнопки, а при загрузке формы. Как сделать чтобы рисование было при событиии нажатия?


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: BRE от Февраль 25, 2010, 14:02
Сработало! спасибо!! только теперь линия появляется не по нажатию кнопки, а при загрузке формы. Как сделать чтобы рисование было при событиии нажатия?
Флажок ввести, который изначально установить в false. В paintEvent проверять, если он false, то линия не рисуется, если true то рисуется. В методе startPaint, устанавливать его в true и вызывать update.


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: bitwise от Февраль 25, 2010, 14:45
И еще подскажите, вот перед тем как начать орисовать мне нужно получить размеры "холста". Как это можно сделать?
Я смотрю на автоподстановку методов после ui-> И вроде ничего нет.


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: BRE от Февраль 25, 2010, 14:46
Не надо ui->, просто size().


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: bitwise от Февраль 25, 2010, 14:54
Спасибо!!


Название: Re: Графический helloworld )). Как нарисовать линию?
Отправлено: bitwise от Февраль 25, 2010, 15:48
дубль