gpt4 book ai didi

c++ - QQuickPaintedItem 中集成 QWidget 时 setVisible 返回 false

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:33 26 4
gpt4 key购买 nike

我遇到了一个与 QQuickPaintedItem 类中集成的 Widget 相关的问题。当我在 QQuickPaintedItem 中集成 Widget 时,QWidget::isVisible 将返回 false。如果我尝试设置 QWidget::setVisible(true) 那么它将打开另一个窗口,这在我的场景中是不想要的。有没有什么方法可以让 QWidget::isVisible 返回 true,这样当我说 QWidget::show() 时,我的子部件(在我的实际场景中,我们有 5 层父子层次结构)也能正常工作?

我已经创建了类似于下面的场景。

头文件:

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 不支持在 Qt5(Qt Quick 2) 中将 QWidget 嵌入到 Qt Quick Item 中。

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

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

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

关于c++ - QQuickPaintedItem 中集成 QWidget 时 setVisible 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com