Я столкнулся с одной проблемой с виджетом, который интегрирован в класс QQuickPaintedItem. Когда у меня есть встроенный виджет в QQuickPaintedItem, QWidget :: isVisible вернет false. Если я попытался установить QWidget :: setVisible (true), то он откроет другое окно, которое я не хочу в моем сценарии.
Есть ли способ получить QWidget :: isVisible, возвращающий true, чтобы мои дочерние виджеты (в моем реальном сценарии у нас есть 5 уровней родительской дочерней иерархии) также будут работать нормально, когда я говорю QWidget :: show ()?
Я создал сценарий, подобный этому, как показано ниже.
Заголовочный файл:
class MyItem: public QQuickPaintedItem{
Q_OBJECT
public:
explicit MyItem(QQuickItem *parent = 0);
void paint(QPainter *painter);
~MyItem();
Q_INVOKABLE void initButton();
protected:
virtual void mousePressEvent( QMouseEvent* event );
private:
QPushButton* bp;
};
исходный файл:
MyItem::MyItem(QQuickItem *parent)
: QQuickPaintedItem(parent)
{
bp = new QPushButton("Hello");
}
MyItem::~MyItem()
{
delete bp;
}
void MyItem::paint(QPainter *painter){
bp->render(painter, QPoint(), QRegion(), QPushButton::DrawWindowBackground | QPushButton::DrawChildren);
}
void MyItem::mousePressEvent( QMouseEvent* event )
{
qDebug() << Q_FUNC_INFO << bp->isVisible();
}
Заранее спасибо за помощь … !!!
Я не знаю, почему вы хотите это сделать.
Qt не поддерживает встраивание QWidget в Qt Quick Item в Qt5 (Qt Quick 2).
В вашем коде QWidget — это отдельное окно, а элемент Qt Quick находится в своем собственном окне.
Если вы хотите, чтобы ваше поведение элемента Qt Quick походило на Button, вам следует использовать элемент управления Qt Quick или написать его самостоятельно.
Если вы действительно хотите встроить QWidget в дерево управления Qt Quick, вы можете вместо этого использовать Qt Quick 1 (Qt4.7 / 8). Проверять, выписываться QGraphicsProxyWidgetдокумент.
Других решений пока нет …