Реализация пользовательского QWidget
путем перегрузки QWidget::paintEvent
и использования рисователя - это самый низкий уровень в Qt с использованием системы виджетов.
Вот полный рабочий пример использования C ++, который я собралдля вас я не знаю PyQt, но, надеюсь, вы можете портировать это!
widget.h
#ifndef _WIDGET_H_
#define _WIDGET_H_
#include <QtGui>
class CustomPaint : public QWidget
{
Q_OBJECT
protected:
virtual void paintEvent(QPaintEvent* event);
};
#endif
widget.cpp
#include "widget.h"
void CustomPaint::paintEvent(QPaintEvent* ev)
{
QPainter painter(this);
painter.setClipRect(ev->rect());
painter.fillRect(ev->rect(), Qt::white);
const int x = 10;
const int y = 10;
const int w = width() - 20;
const int h = height() - 20;
painter.setPen(QPen(QBrush(Qt::red), 0.0, Qt::DashLine));
painter.drawRect(x, y, w, h);
painter.setPen(QPen(QBrush(Qt::black), 0.0, Qt::SolidLine));
painter.drawText(x, y, w, h,
Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap,
tr("Hello World"));
}
test.cpp
#include <QtGui>
#include "widget.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
CustomPaint win;
win.show();
return app.exec();
}
test.pro
QT=core gui
HEADERS=widget.h
SOURCES=test.cpp widget.cpp