2015-12-07 22 views
1

我正在面对集成在QQuickPaintedItem类中的Widget的一个问题。当我将Widget集成到QQuickPaintedItem中时,QWidget :: isVisible将返回false。如果我试图设置QWidget :: setVisible(true),那么它会打开另一个窗口,我不想在我的场景中使用它。 有没有什么办法让QWidget :: isVisible返回true,这样我的子窗口小部件(在我的实际场景中,我们有5层的父子层次结构)也能正常工作,当我说QWidget :: show()时?当QWidget集成在QQuickPaintedItem中时,setVisible返回false

我已经创建了与下图类似的场景。

头文件

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(); 
} 

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

回答

0

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

Qt不支持在Qt5(Qt Quick 2)中将QWidget嵌入到Qt Quick Item中。

在您的代码中,QWidget是一个独立的窗口,而您的Qt Quick项目位于它自己的窗口中。

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

如果您确实想将QWidget嵌入到Qt Quick的控制树中,您可以改为使用Qt Quick 1(Qt4.7/8)。查看QGraphicsProxyWidget的文档。

相关问题