Я хотел бы встроить QWidget, такой как кнопка или индикатор выполнения, в мой QGraphicswidget, но я видел только примеры добавления QWidget в QGraphicsScene, т.е.
m_scene->addWidget(new QPushButton("Test Test"));
В моем собственном графическом виджете я рисую текст и другие пользовательские фигуры в функции рисования. Я думаю, вам нужно добавить QWidget здесь, но я, вероятно, ошибаюсь. Кто-нибудь знает как это сделать?
Вот моя перегруженная функция рисования:
void TestWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem
*option, QWidget *widget /*= 0*/)
{
Q_UNUSED(widget);
Q_UNUSED(option);
QRectF frame(QPointF(0,0), geometry().size());
QGradientStops stops;
//Draw border
painter->drawRoundedRect(boundingRect(), 5.0, 5.0);
//Name of the test
painter->drawText(40, 20, m_name);
//Status of test
QFont font = painter->font() ;
font.setPointSize(14);
painter->setFont(font);
painter->drawText(600, 20, m_status);
//Arrow button
QPolygonF poly;
poly << QPointF(5, 10) << QPointF(25, 10) << QPointF(15, 20 )<<
QPointF(5,10);
painter->setBrush(Qt::black);
painter->drawPolygon(poly, Qt::OddEvenFill);
}
Чтобы встроить виджет, например QPushButton, в вашем подклассе QGraphicsWidget использование QGraphicsProxyWidget как это:
#include "TestWidget.h"#include <QGraphicsProxyWidget>
#include <QPushButton>
TestWidget::TestWidget(QGraphicsItem *parent) :
QGraphicsWidget(parent)
{
...
auto *proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(new QPushButton(tr("CLick me")));
proxy->moveBy(20, 40);
...
}
Если вы используете m_scene->addWidget(new QPushButton("Test Test"));
, который по сути то же самое как:
QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget();
proxy->setWidget(new QPushButton("Test Test"));
m_scene->addItem(proxy);
Вы добавляете QPushButton (через прокси) прямо на сцену.
Если вы хотите сделать QPushButton часть вашего обычая QGraphicsWidget, установить родителя QGraphicsProxyWidget к примеру обычая QGraphicsWidget.
Замечания: Нет необходимости звонить QGraphicsScene :: AddItem, так как (из-за родительских / дочерних отношений) прокси будет добавлен на сцену вместе с вашим обычаем QGraphicsWidget.
Используя ваш paint
Метод, результат похож на это:
Других решений пока нет …