当QWidget集成在QQuickPaintedItem中时,setVisible返回false
setVisible return false when QWidget is integrated in QQuickPaintedItem
我遇到了集成在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不支持将QWidget嵌入Qt5中的Qt Quick Item(Qt Quick 2)。
在你的代码中,QWidget是一个单独的窗口,而你的Qt Quick项目在它自己的窗口中。
如果你想要你的Qt-Quick项目行为像一个按钮,你应该使用Qt-Quick的按钮控件或自己写一个。
如果您真的想将QWidget嵌入Qt Quick的控制树中,可以使用Qt Quick 1(Qt4.7/8)。查看QGraphicsProxyWidget的文档。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 从python中调用C++函数并获取返回值
- 矩阵向量乘法(cublasDgemv)返回零
- 当QWidget集成在QQuickPaintedItem中时,setVisible返回false