Вставить объект QWidget в Qt Quick 2

8 месяцев назад возник такой вопрос — как встроить объект на основе qwidget в QML,http://doc.qt.digia.com/4.7/declarative-cppextensions-qwidgets.html Qt5. Вставить объект QWidget в QML. Изменилась ли ситуация? Или для некоторых сложных приложений, использующих собственный переопределенный paintEvent, мы можем использовать только классический Qt?

4

Решение

QQuickPaintedItem можно использовать для рисования с помощью API QPainter. В приведенном ниже коде я попытался обернуть QCalendarWidget в QQuickPaintedItem. Он отображает правильно, но не обрабатывает входные события:

.час:

class CalendarControl : public QQuickPaintedItem
{
Q_OBJECT
public:
explicit CalendarControl(QQuickItem *parent = 0);
virtual ~CalendarControl();

void paint(QPainter *painter);
…
protected:
QCalendarWidget *calendar_;
}

.каст:

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 вы, вероятно, можете передать эти события непосредственно ему.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]