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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование примитивов  (Прочитано 12388 раз)
M9yT
Гость
« : Октябрь 25, 2010, 17:55 »

Здравствуйте. Искурил весь форум по 2D графике, но толком ничего не нашел.
Хочу нарисовать в окне простой прямоугольник! Но не рисуется!
Код:
//Widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    virtual void PaintEvent(QPaintEvent *event);

signals:

public slots:

};

#endif // WIDGET_H
Код:
//Widget.cpp
#include "widget.h"
#include <QPainter>

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{

}

void Widget::PaintEvent(QPaintEvent *event)
{
    QPainter paint;
    paint.begin(this);
    QPen pen(Qt::red, 12, Qt::SolidLine);
    QBrush brush(Qt::red, Qt::SolidPattern);
    paint.setBrush(brush);
    paint.setPen(pen);
    paint.drawRect(3,14, 100, 50);
    paint.end();
}
Код:
//main.cpp
#include <QtGui/QApplication>
#include <QTextCodec>
#include <QPainter>
#include "widget.h"
#include <QPushButton>
#include <QWidget>

void main (int argc, char *argv[])
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows1251"));
    QApplication app(argc, argv);
    Widget w;

    w.show();
    app.exec();
}
Вот что еще нужно сделать, чтобы нарисовался этот чёртов прямоугольник??
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 25, 2010, 18:00 »

Поменяй
void Widget::PaintEvent(QPaintEvent *event)
на
void Widget::paintEvent(QPaintEvent *event)
Записан

Qt 5.11/4.8.7 (X11/Win)
M9yT
Гость
« Ответ #2 : Октябрь 25, 2010, 18:03 »

Поменяй
void Widget::PaintEvent(QPaintEvent *event)
на
void Widget::paintEvent(QPaintEvent *event)
О,Ура! Но почему же во всех примерах paint c большой буквы?Непонимающий
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 25, 2010, 18:04 »

Цитировать
О,Ура! Но почему же во всех примерах paint c большой буквы?
Это где это?
Записан

Qt 5.11/4.8.7 (X11/Win)
M9yT
Гость
« Ответ #4 : Октябрь 25, 2010, 18:07 »

Цитировать
О,Ура! Но почему же во всех примерах paint c большой буквы?
Это где это?
Мдаа, ну я невнимательный(((( Такая мелочь((
Даже в методичке с маленькой)
Записан
spirits25
Гость
« Ответ #5 : Декабрь 06, 2010, 20:45 »

решил не создавать новую тему. подскажите, как нарисовать 3D параллелепипед? У glu или glut есть специальные функции?
Записан
Ubuntu_linux
Гость
« Ответ #6 : Декабрь 14, 2010, 01:40 »

Нарисуй два квадрата, а вершинки соедини линиями. Подмигивающий
Записан
Fat-Zer
Гость
« Ответ #7 : Декабрь 14, 2010, 01:56 »

решил не создавать новую тему. подскажите, как нарисовать 3D параллелепипед? У glu или glut есть специальные функции?
вроде надо построить куб и растянуть/сжать его. Но ИМХО проще полигонами...
Записан
spirits25
Гость
« Ответ #8 : Январь 16, 2011, 20:07 »

можете код подкинуть? да, я лодырь, но очень надо. спс.
Записан
spirits25
Гость
« Ответ #9 : Январь 16, 2011, 21:40 »

нашёл параллелепипед=) только передняя грань не отображается почему-то у меня..=(
Код:
void piped(GLfloat a, GLfloat b, GLfloat c)
{
  glShadeModel(GL_FLAT);
  glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

  glBegin(GL_QUAD_STRIP);
    glVertex3f(-a/2,-b/2,-c/2);
    glVertex3f(-a/2,-b/2, c/2);
    glVertex3f(-a/2, b/2,-c/2);
    glVertex3f(-a/2, b/2, c/2);

    glVertex3f( a/2, b/2,-c/2);
    glVertex3f( a/2, b/2, c/2);

    glVertex3f( a/2,-b/2,-c/2);
    glVertex3f( a/2,-b/2, c/2);

    glVertex3f(-a/2,-b/2,-c/2);
    glVertex3f(-a/2,-b/2, c/2);
  glEnd();

  glBegin(GL_QUADS);
    glVertex3f(-a/2,-b/2, c/2);
    glVertex3f(-a/2, b/2, c/2);
    glVertex3f( a/2, b/2, c/2);
    glVertex3f( a/2,-b/2, c/2);

    glVertex3f(-a/2,-b/2,-c/2);
    glVertex3f(-a/2, b/2,-c/2);
    glVertex3f( a/2, b/2,-c/2);
    glVertex3f( a/2,-b/2,-c/2);
  glEnd();
}
Записан
BigHom
Гость
« Ответ #10 : Май 11, 2011, 12:40 »

Подскажите : хотелось бы чтобы рисовалось по нажатию кнопки - не рисует . Что не так?

void graf::on_pushButton2_clicked()
{   
    QPainter paint;
    paint.begin(this);
    QPen pen(Qt::red, 12, Qt::SolidLine);
    QBrush brush(Qt::red, Qt::SolidPattern);
    paint.setBrush(brush);
    paint.setPen(pen);
    paint.drawRect(3,14, 100, 50);
    paint.end();
}
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Май 11, 2011, 12:48 »

Отрисовка на виджете в Qt по дефолту возможна только в перегруженном paintEvent()
Код
C++ (Qt)
void graf::paintEvent ( QPaintEvent * event )
{  
   QPainter paint;
   paint.begin(this);
   QPen pen(Qt::red, 12, Qt::SolidLine);
   QBrush brush(Qt::red, Qt::SolidPattern);
   paint.setBrush(brush);
   paint.setPen(pen);
   paint.drawRect(3,14, 100, 50);
   paint.end();
}
 
void graf::on_pushButton2_clicked()
{
   update();
}
Записан

Qt 5.11/4.8.7 (X11/Win)
Norrius
Гость
« Ответ #12 : Декабрь 10, 2011, 19:06 »

А каким образом можно реализовать отрисовку по вызову из функции? То есть: существует некая функция, которая высчитывает координаты, и из нее по этим координатам должны строиться треугольники. Как я понял, QPainter это не может сделать, чем следует воспользоваться?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Декабрь 10, 2011, 21:35 »

А каким образом можно реализовать отрисовку по вызову из функции? То есть: существует некая функция, которая высчитывает координаты, и из нее по этим координатам должны строиться треугольники. Как я понял, QPainter это не может сделать, чем следует воспользоваться?
Отрисовка в Qt делается только средствами QPainter.
Высчитывайте координаты в "некоей функции" и помещайте их в QPolygonF. И уже в paintEvent() отрисовывайте свои треугольники в QPainter::drawPolygon().
Всё просто)
Записан

Qt 5.11/4.8.7 (X11/Win)
Norrius
Гость
« Ответ #14 : Декабрь 10, 2011, 22:21 »

Спасибо, действительно несложно)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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