QQuickPaintedItem可用於使用QPainter API進行繪圖。在下面的代碼中,我嘗試將QCalendarWidget封裝到QQuickPaintedItem中。它呈現正確,但不處理輸入事件:
.H:
class CalendarControl : public QQuickPaintedItem
{
Q_OBJECT
public:
explicit CalendarControl(QQuickItem *parent = 0);
virtual ~CalendarControl();
void paint(QPainter *painter);
…
protected:
QCalendarWidget *calendar_;
}
的.cpp:
CalendarControl::CalendarControl(QQuickItem *parent)
: QQuickPaintedItem(parent)
, calendar_(NULL)
{
setOpaquePainting(true);
setAcceptHoverEvents(true);
setAcceptedMouseButtons(Qt::AllButtons);
calendar_ = new QCalendarWidget;
// Calendar will draw partially if update is called right here
QTimer::singleShot(0, this, SLOT(update()));
}
void CalendarControl::paint(QPainter *painter)
{
calendar_->render(painter, QPoint(), QRegion(),
QCalendarWidget::DrawWindowBackground | QCalendarWidget::DrawChildren);
}
要趕上鼠標事件,覆蓋
void hoverEnterEvent(QHoverEvent *event);
void hoverLeaveEvent(QHoverEvent *event);
void hoverMoveEvent(QHoverEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
我雖然無法將它們傳遞給QCalendarWidget,但它忽略了它們。但是當爲自定義QWidget創建包裝器時,您可能直接將這些事件傳遞給它。