crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QPainter для самопального виджета
anater
  опции профиля:
сообщение 11.10.2010, 20:11
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 25.12.2009
Пользователь №: 1335

Спасибо сказали: 0 раз(а)




Репутация:   0  


Итак доброшо времени суток.

Имею самопальный виджет унаследованный от QWidget.

В нем есть всякие поля тестовые кнопочки и прочая мишура.

И есть виджет в котором должна рисоваться картинка... Вопроса собственно два.
Как прикрутить QPainter конкретно к данному встроеному виджету?

QPainter painter (this)ж в paintEvent не особенно хорошо работает ибо рисуемые элементы запросо налезают на соседей.

Как конкретно рисоваться во встроеном виджете?

Спасибо за вменяемые ответы :)

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
bayah
  опции профиля:
сообщение 19.5.2011, 6:34
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 23.11.2009
Пользователь №: 1249

Спасибо сказали: 0 раз(а)




Репутация:   0  


А у меня не получается сделать перехватывая события.
Ничего не рисуется на graphicsView виджете.
Что не так в этом коде, подскажите:

widget.h
Раскрывающийся текст
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtGui>

namespace Ui {
    class Widget;
}

class Widget : public QWidget {
    Q_OBJECT
public:
    Widget(QWidget *parent = 0);
    ~Widget();

protected:
    void changeEvent(QEvent *e);
    bool eventFilter(QObject *obj, QEvent *event);

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H



widget.cpp
Раскрывающийся текст
#include "widget.h"
#include "ui_widget.h"

#include <iostream>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->graphicsView->installEventFilter(this); //собственно на этом виджете, созданном в Дизайнере я и хочу рисовать
}

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

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

    bool Widget::eventFilter(QObject *obj, QEvent *event)
    {
        if(event->type() == QEvent::Paint && obj == ui->graphicsView){
            QPaintEvent *e = static_cast<QPaintEvent *>(event);
            QPainter painter(qobject_cast<QWidget* >(obj));
            painter.drawLine(10, 10, 100, 100);

            return true;

        }else{
            return QObject::eventFilter(obj, event);
        }
    }



ну и тут просто обычный main.cpp:

Раскрывающийся текст
#include <QtGui/QApplication>
#include <QWidget>
#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}


Сообщение отредактировал bayah - 19.5.2011, 8:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 1:44