Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QQuickWidget使无框架透明的QMainWindow完全消失_Qt_Qml - Fatal编程技术网

Qt QQuickWidget使无框架透明的QMainWindow完全消失

Qt QQuickWidget使无框架透明的QMainWindow完全消失,qt,qml,Qt,Qml,我想在窗口中嵌入一个quickwidget。但是如果我添加一个quickwidget作为它的子窗口,窗口将变得完全不可见。我正在使用Qt5.4.0/5.4.2+Windows10。以下是片段: #include <QApplication> #include <QMainWindow> #include <QQuickWidget> #include <QPushButton> int main(int argc, char *argv[]) {

我想在窗口中嵌入一个quickwidget。但是如果我添加一个quickwidget作为它的子窗口,窗口将变得完全不可见。我正在使用Qt5.4.0/5.4.2+Windows10。以下是片段:

#include <QApplication>
#include <QMainWindow>
#include <QQuickWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    auto window = new QMainWindow;
    auto btn= new QPushButton("Can you see me?",window);    
    window->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
    window->setAttribute(Qt::WA_TranslucentBackground, true);

    //comment folloing code and everything will work fine.
    auto quick = new QQuickWidget(window);
    quick->setSource(QUrl("qrc:/main.qml"));
    quick->move(40,40);

    window->show();

    return a.exec();
}
但是,有一个严重的问题。我不能点击它的背景,尽管那是透明的。我已经测试过,
QWidget
的透明背景可以点击

Edit2:重新启动计算机后,quickwidget再次不可见。WTF


Edit3:Qt5.5.0似乎还可以。

main.qml是什么样子的?它只是一个指定了固定宽度、高度和颜色的矩形。@MitchLooks就像Qt中的另一个bug,与无框窗口相关。您可以尝试理解并调试以下源代码。这是一个很好的起点:
src/plugins/platforms/windows/qwindowswindow.cpp
,方法
qwindowswindow::handleWindowStateChange
QQuickWidget可能有问题。我更新了我的问题。你知道吗@萨兹
auto quick = new QQuickWidget();
quick->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
quick->setAttribute(Qt::WA_TranslucentBackground, true);
quick->setClearColor(Qt::transparent);