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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите плиззззззз. Не могу нарисовать линию.  (Прочитано 8934 раз)
Sun
Гость
« : Апрель 21, 2005, 15:56 »

Не могу понять почему этот код не рисует линию........может что не правильно........ :oops:
#include <qpainter.h>
#include <qbrush.h>
#include <qpen.h>
#include <qfont.h>
#include <qcolor.h>
 
int main (int argc, char **argv){
    QApplication a(argc, argv);
    QWidget  *w = new QWidget(0, 0, 0);
    w->setPalette(QPalette(QColor(0, 0, 255)));
    QPainter p;
    QBrush brush(QColor(255,0,0));
    QPen pen(QColor(255,0,0), 2);
    p.begin(w);
    p.setBrush(brush);
    p.setPen(pen);
    p.drawLine(10,20,60,60);
    p.end();
    a.setMainWidget(w);
    w->show();
    return a.exec();
}

За ранее спасибо.
Записан
Zigmar
Гость
« Ответ #1 : Апрель 21, 2005, 19:34 »

Ну логично. Ты пытаешься рисовать на невидимом виджите (что вообще бессмысленно), а только потом вызываешь show, в процессе которого отрисовывается сам виджет в первый раз. Даже еслиб рисование на невидимом виджите что-то бы и делало, оно бы всё равного оказалось бы затерто при этой отрисовке.
Записан
Hellenna
Гость
« Ответ #2 : Апрель 21, 2005, 20:08 »

Надо примерно так:

Код:

#include "my_paint_widget.h"
int main (int argc, char **argv){
    QApplication a(argc, argv);
    My_Paint_Widget *w=new My_Paint_Widget();
    a.setMainWidget(w);
    w->show();
    return a.exec();
}


в my_paint_widget.h
Код:
#ifndef MY_PAINT_WIDGET_H
#define MY_PAINT_WIDGET_H
#include <qwidget.h>

class My_Paint_Widget:public QWidget
{
protected:
    virtual void paintEvent ( QPaintEvent * ) ;
 
};
#endif

в файле my_paint_widget.cpp
Код:
#include "my_paint_widget.h"
#include <qpainter.h>
#include <qbrush.h>
#include <qpen.h>
#include <qfont.h>
#include <qcolor.h>
void My_Paint_Widget::paintEvent ( QPaintEvent * e)
{
    QPainter p;
    QPen pen(QColor(Qt::red), 2);
    p.begin(this);
    p.setPen(pen);
    p.drawLine(10,20,60,60);
    p.end();
}


p.s. мое первое приложение на qt  под виндой Подмигивающий
Записан
Sun
Гость
« Ответ #3 : Апрель 22, 2005, 07:16 »

Спасибо большое  Веселый
Записан
Sun
Гость
« Ответ #4 : Апрель 24, 2005, 18:52 »

А ли можно рисовать минуя painEvent???
Записан
Zigmar
Гость
« Ответ #5 : Апрель 26, 2005, 00:25 »

Цитата: "Sun"
А ли можно рисовать минуя painEvent???

Теоретически можно, вопрос зачем. Я подозреваю, что то что ты хочешь сделать (рисовать что-то не в paint event), надо вообще делать не через painter а например с помощью canvas. Впрочем, если расскажешь что нужно, может смогу подсказать где искать...
Записан
Sun
Гость
« Ответ #6 : Апрель 26, 2005, 12:34 »

Ну допустим у меня есть главное окно приложения (это серверная часть), я хочу рисовать в нем различные простые фигурки - линии, квадратики и т. д. в зависимости от того, что захочет клиент. Вот. Если непонятно.....то постараюсь поконкретнее.....
Может можно создать свои виджеты н-р QLine.....и использовать их???
Записан
Zigmar
Гость
« Ответ #7 : Апрель 26, 2005, 20:07 »

Я думаю что тебе лучше всего подойдет QCanvas - это модуль который позволяет работать с векторной графикой на высоком уровне. Т.е. тебе не надо как с QPainter-ов переписывать paint event и каждый раз всё рисовать в ручную, а ты просто создаешь объекты (QCanvasLine, QCanvasText и т.д.) добавляешь их на QCanvas, и он уже сам рисует их, скролит, и занимается остальной работой вместо тебя (включая double buffering, трансформации и т.д.).
Записан
Sun
Гость
« Ответ #8 : Апрель 27, 2005, 02:51 »

Спасибочки!!!! Буду разбираться дальше.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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