lit-uriy пишет:
потому что рисовать на виджете можно только в его обработчике события paintEvent
Ну во первых я там ничего не рисовал, во вторых - вот я рисую не в
paintEvent, и модифицирую кнопочкой толщину.
1) Тоесть вопрос уже такой - почему в прошлом примере это не получается?
2) Вопрос можно несколько конкретизировать.
Я смогу только с помощью
QPaint перевести своего самопального пакмэна в графический режим? Или мне полюбому придётся разбираться ещё и в
Graphics vievs framevork?
Подходит ли вообще
QPaint для этой задачи?
renderarea.h#ifndef RENDERAREA_H
#define RENDERAREA_H
#include <QPainterPath>
#include <QWidget>
class RenderArea : public QWidget
{ Q_OBJECT
public:
RenderArea(const QPainterPath &path, QWidget *parent = 0);
public slots:
void chlinewidth();
protected:
void paintEvent(QPaintEvent *event);
private:
QPainterPath path;
int penwidth;
};
#endif
window.h#ifndef WINDOW_H
#define WINDOW_H
#include <QWidget>
class QPushButton;
class RenderArea;
class Window : public QWidget
{
Q_OBJECT
public:
Window();
private slots:
private:
RenderArea *renderAreas;
QPushButton *movebutton;
};
#endif
//====================================//
renderarea.cpp#include <QtGui>
#include "renderarea.h"
RenderArea::RenderArea(const QPainterPath &path, QWidget *parent)
: QWidget(parent), path(path)
{
penwidth = 1;
setBackgroundRole(QPalette::Base);
}
void RenderArea::chlinewidth()
{
penwidth=20;
update();
}
void RenderArea::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.scale(width() / 100.0, height() / 100.0);
painter.translate(50.0, 50.0);
painter.translate(-50.0, -50.0);
painter.setPen(QPen(Qt::black, penwidth, Qt::SolidLine, Qt::RoundCap));
QLinearGradient gradient(0, 0, 0, 100);
painter.setBrush(gradient);
painter.drawPath(path);
}
//==============================================//
window.cpp#include <QtGui>
#include <math.h>
#include "renderarea.h"
#include "window.h"
const float Pi = 3.14159f;
Window::Window()
{
QPainterPath rectPath;
rectPath.moveTo(80.0, 50.0);
rectPath.arcTo(20.0, 30.0, 60.0, 40.0, 0.0, 360.0);
rectPath.closeSubpath();
renderAreas = new RenderArea(rectPath);
movebutton = new QPushButton(tr("Mov"));
connect(movebutton, SIGNAL(clicked()), renderAreas, SLOT(chlinewidth()));
QGridLayout *topLayout = new QGridLayout;
topLayout->addWidget(renderAreas);
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addLayout(topLayout, 0, 0, 1, 4);
mainLayout->addWidget(movebutton);
setLayout(mainLayout);
setWindowTitle(tr("Painter Paths"));
}
main.cpp#include <QApplication>
#include "window.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window window;
window.show();
return app.exec();
}