My widget doesn't repaint correctly. I have no idea why.
Step 1:

Step 2:

Step 3:

[...]
{
Q_OBJECT
public:
MainWindow();
MainWindow
(QWidget * parent,
const char * name
);
~MainWindow();
public slots:
void clearFill();
void clear();
void reset();
protected:
private:
Painter * painter;
[...]
{
painter->repaint();
}
[...]
class Painter
{
public:
[...]
private:
[...]
[...]
void Painter::repaint()
{
for (int i = 0 ; i != width ; i++)
{
for (int j = 0 ; j != height ; j++)
drawPoint(array[i][j]);
}
for (SimpleSegmentList::iterator i = list.begin() ; i != list.end() ; i++)
drawLine((*i));
}
[...]
void Painter::drawPoint(const Point & p)
{
if (!painter)
return;
painter
->setBrush
(QBrush(p.
color()));
painter->drawEllipse(p.center().x(), p.center().y(), p.dia(), p.dia());
}
void Painter::drawLine(const SimpleSegment & s)
{
if (!painter)
return;
const int hdia = array[0][0].dia() / 2;
QPoint start
= point
(s.
start()).
center();
QPoint stop
= point
(s.
stop()).
center();
start.setX(start.x() + hdia);
start.setY(start.y() + hdia);
stop.setX(stop.x() + hdia);
stop.setY(stop.y() + hdia);
painter
->setPen
(QPen(s.
color(), hdia
));
painter->drawLine(start, stop);
}
[...]
[...]
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
MainWindow(QWidget * parent, const char * name);
~MainWindow();
public slots:
void clearFill();
void clear();
void reset();
protected:
void paintEvent(QPaintEvent * e);
void mouseMoveEvent(QMouseEvent * e);
void mousePressEvent(QMouseEvent * e);
void mouseDoubleClickEvent(QMouseEvent * e);
private:
Painter * painter;
[...]
void MainWindow::paintEvent(QPaintEvent * e)
{
painter->repaint();
QMainWindow::paintEvent(e);
}
[...]
class Painter
{
public:
[...]
private:
[...]
QPainter * painter;
[...]
void Painter::repaint()
{
for (int i = 0 ; i != width ; i++)
{
for (int j = 0 ; j != height ; j++)
drawPoint(array[i][j]);
}
for (SimpleSegmentList::iterator i = list.begin() ; i != list.end() ; i++)
drawLine((*i));
}
[...]
void Painter::drawPoint(const Point & p)
{
if (!painter)
return;
painter->setPen(QPen(QColor(0, 0, 0)));
painter->setBrush(QBrush(p.color()));
painter->drawEllipse(p.center().x(), p.center().y(), p.dia(), p.dia());
}
void Painter::drawLine(const SimpleSegment & s)
{
if (!painter)
return;
const int hdia = array[0][0].dia() / 2;
QPoint start = point(s.start()).center();
QPoint stop = point(s.stop()).center();
start.setX(start.x() + hdia);
start.setY(start.y() + hdia);
stop.setX(stop.x() + hdia);
stop.setY(stop.y() + hdia);
painter->setPen(QPen(s.color(), hdia));
painter->drawLine(start, stop);
}
[...]
To copy to clipboard, switch view to plain text mode
Bookmarks