当QWidget集成在QQuickPaintedItem中时,setVisible返回false

时间:2015-12-07 09:48:44

标签: c++ qt qwidget visible composite

我遇到了一个集成在QQuickPaintedItem类中的Widget的问题。当我在QQuickPaintedItem中集成了Widget时,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();
}

提前感谢您的帮助...... !!!

1 个答案:

答案 0 :(得分:0)

我不知道你为什么要这样做。

Qt不支持在Qt5(Qt Quick 2)中将QWidget嵌入到Qt快速项目中。

在你的代码中,QWidget是一个单独的窗口,你Qt Quick项目就在它自己的窗口中。

如果你想让你的Qt Quick项目行为像Button一样,你应该使用Qt Quick的Button控件或自己写一个。

如果你真的想在Qt Quick的控制树中嵌入QWidget,你可以使用Qt Quick 1(Qt4.7 / 8)代替。查看 QGraphicsProxyWidget 的文档。