Существует вид, в котором метод рисования переопределен. Существует также кнопка, при нажатии на которую представление должно вызывать метод repaint()
. Для удобства в этом примере представление не связано ни с какими данными из модели.
#include <QApplication>
#include <QPainter>
#include <QPaintEvent>
#include <QListView>
#include <QScrollArea>
#include <QPushButton>
class View :public QListView {
public:
void paintEvent(QPaintEvent* event) override
{
QListView::paintEvent(event);
QPainter painter(viewport());
static int x = 10, y = 10;
painter.drawPixmap(x, y, QPixmap("cheker.png"));
x += 10;
y += 10;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
View view;
QPushButton btn("btn");
btn.move(100, 300);
QObject::connect(&btn, SIGNAL(clicked()), &view, SLOT(repaint()));
btn.show();
view.show();
return a.exec();
}
Я обнаружил, что после первого нажатия на кнопку, repaint()
вызывается только один раз. Нажатие кнопки 2-й, 3-й, 4-й и т. Д. repaint()
не вызывается. Почему?