Как рисовать на представлении? Qt

68
27 сентября 2021, 10:10

Есть модель, содержащая строки, и списочное представление.

Представление QListView является потомком QPaintDevice, следовательно в нём можно переопределить paintEvent(QPaintEvent*) и нарисовать на нём что-то. Например, нужно нарисовать (точнее напечатать уже готовый при помощи QPainter::drawPixmap()) файл cheker.png:

#include <QApplication>
#include <QPainter>
#include <QPaintEvent>
#include <QListView>
#include <QStringListModel>
class View :public QListView {
public:
    void paintEvent(QPaintEvent* event) {
        QListView::paintEvent(event);
        QPainter painter(this);
        painter.drawPixmap(10,10,QPixmap("cheker.png"));         
    }
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QStringListModel model;
    QStringList list;
    list << "a" << "b" << "c" << "d" << "e" << "f" << "g" << "h";
    model.setStringList(list);
    View view;
    view.setModel(&model);
    view.show();
    return a.exec();
}

Не происходит того, что ожидается - картинка не печатается. Представление изображается так, как если бы никакие методы не переопределялись. А в консоль печатается следующее:

Как, собственно, рисовать на представлении?

READ ALSO
Не видит библиотеку при сборке приложения под android Qt

Не видит библиотеку при сборке приложения под android Qt

В общем, пишу небольшое приложение на С++ в Qt, которое сможет отрисовывать графы, использую стороннюю библиотеку Graphviz в QtПри дебаге приложения...

100
Прочитать весь std::cin в std::string

Прочитать весь std::cin в std::string

Как прочитать весь текущий std::cin одной операцией в строку std::string?

67
Некорректно работает Bootstrap v4 на Safari

Некорректно работает Bootstrap v4 на Safari

Есть данный кусок кода

95
on input ТОЛЬКО для ввода текста

on input ТОЛЬКО для ввода текста

если на введу значение в инпут, вызовется этот методесли я нажму backspace - вызоветсья этот метод

85