我遇到了一个集成在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();
}
提前感谢您的帮助...... !!!
答案 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 的文档。