Russian Qt Forum
Ноябрь 24, 2024, 20:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Графический helloworld )). Как нарисовать линию?  (Прочитано 10607 раз)
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);
}
Записан
alexman
Гость
« Ответ #1 : Февраль 25, 2010, 13:03 »

void QPainter::setPen ( const QPen & pen )
Записан
bitwise
Гость
« Ответ #2 : Февраль 25, 2010, 13:18 »

добавил:

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


не помогло.
у меня после вызова update() метод void appwindow::paintEvent(QEvent* e) не вызывается...
Записан
BRE
Гость
« Ответ #3 : Февраль 25, 2010, 13:34 »

virtual void QWidget::paintEvent ( QPaintEvent * event )
Записан
bitwise
Гость
« Ответ #4 : Февраль 25, 2010, 13:53 »

Сработало! спасибо!! только теперь линия появляется не по нажатию кнопки, а при загрузке формы. Как сделать чтобы рисование было при событиии нажатия?
Записан
BRE
Гость
« Ответ #5 : Февраль 25, 2010, 14:02 »

Сработало! спасибо!! только теперь линия появляется не по нажатию кнопки, а при загрузке формы. Как сделать чтобы рисование было при событиии нажатия?
Флажок ввести, который изначально установить в false. В paintEvent проверять, если он false, то линия не рисуется, если true то рисуется. В методе startPaint, устанавливать его в true и вызывать update.
Записан
bitwise
Гость
« Ответ #6 : Февраль 25, 2010, 14:45 »

И еще подскажите, вот перед тем как начать орисовать мне нужно получить размеры "холста". Как это можно сделать?
Я смотрю на автоподстановку методов после ui-> И вроде ничего нет.
Записан
BRE
Гость
« Ответ #7 : Февраль 25, 2010, 14:46 »

Не надо ui->, просто size().
« Последнее редактирование: Февраль 25, 2010, 16:08 от BRE » Записан
bitwise
Гость
« Ответ #8 : Февраль 25, 2010, 14:54 »

Спасибо!!
Записан
bitwise
Гость
« Ответ #9 : Февраль 25, 2010, 15:48 »

дубль
« Последнее редактирование: Февраль 25, 2010, 15:53 от bitwise » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 21.