美文网首页
QWidget 和 QML窗口 相互嵌套

QWidget 和 QML窗口 相互嵌套

作者: Gwkang | 来源:发表于2020-03-07 21:46 被阅读0次
  • QWidget界面和QML窗口相互嵌套都是需要借助 quickwidgets 这个模块中的类
  • 我这里使用的是QQuickWidget,这个类是继承QWidget的,就和 QWidget 一样使用就行
  • 使用布局控制 控件 的位置

 

1. C++代码

#include <QApplication>
#include <QtQuickWidgets/QQuickWidget>
#include <QQuickView>
#include <QHBoxLayout>
#include <QLabel>

int main(int argc, char *argv[])
{
    // QApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    
    QApplication app(argc, argv);
    
    QWidget * widget = new QWidget;
    widget->setWindowTitle("widget 主窗口");
    widget->resize(800, 400);
    
    // 设置布局
    QHBoxLayout * layout = new QHBoxLayout;
    layout->setContentsMargins(0, 0, 0 ,0);
    widget->setLayout(layout);
    
    // qml 界面 嵌入到 widget
    QQuickWidget qmlWidget(QUrl("qrc:/main.qml"));
    qmlWidget.setResizeMode(QQuickWidget::SizeRootObjectToView );
    // 设置这个之后 anchor不用设置,root节点大小会根据 QQuickWidget大小改变
    // 在qml里 通过 parent 获取不到 widget 窗口 !!!   
    layout->addWidget(&qmlWidget);
    
    // widget 界面 嵌入到 qmlWidget里
    QLabel label("QLabel", &qmlWidget);
    label.move(100, 100);
    
    // widget 界面 嵌入到 widget
    QLabel nativeWidget;
    nativeWidget.setText("Widget");
    nativeWidget.setAlignment(Qt::AlignCenter);
    layout->addWidget(&nativeWidget);
    
    widget->show();
    
    return app.exec();
}

 

2. QML代码

  • 这个QML代码就随便写了一个简单的 Rectangle
  • 注意:如果是用 QQuickView或者QQuickWidget 加载的qml,root节点不能是 Window 这一类类型,最好是Rectangle
import QtQuick 2.9

Rectangle {
    //visible: true
    //width: 150
    //height: 150
    //anchors.fill: parent
    //anchors.centerIn: parent
    
    border.color: "#00ffd5"
    border.width: 10
    radius : 10
    
    Text {
        id : text
        anchors.centerIn: parent
        text: qsTr("QML Text")
        antialiasing: true  //抗锯齿
    }

    // 旋转动画
    NumberAnimation {
        id : numberAnimation
        target: text
        property: "rotation"
        from: 0
        to: 360
        duration: 3000
        
        running: true
        loops: Animation.Infinite
        
    }
}

 

3. 运行效果

 

  • 还有一点,Rectangle里不能放QWidget界面,否则直接断言退出程序
  • ASSERT: "!d->isWidget" in file [kernel\qobject.cpp, line 1979](kernel\qobject.cpp, line 1979)

相关文章

  • QWidget 和 QML窗口 相互嵌套

    QWidget界面和QML窗口相互嵌套都是需要借助 quickwidgets 这个模块中的类 我这里使用的是QQu...

  • QWidget 调用 QML 插件中的对象

    目标 为实现从QML字符串中创建QML对象,并显示在基于QWidget项目工程中,且这个QML对象所属类型来自QM...

  • Qt 动画应用

    Qt的动画机制,能用在QWidget、QGraphicWidget、以及在QML中也有部分应用的模型,这里只是先举...

  • 2.2 QWidget

    本节小豆君就来讲述我们最重要的窗口类QWidget,QWidget是所有GUI控件的基类,所以掌握QWidget的...

  • 主窗口类型

    主窗口类型 有3种窗口 QMainWindow QWidget QDialog QMainWindow:可以包含菜...

  • 七夕桌面

    这次在QWidget里面嵌入了qml,正好赶上七夕,就制作了这个小程序。随着七夕临近,牛郎和织女会相遇! 源代码 ...

  • PyQt窗口类介绍2018-07-30

    窗口类(QMain Window、QWidget、QDialog) QDialog: 对话框窗口的基类。QDial...

  • Day02

    Qt窗口部件 窗口定义Qt中把没有嵌入其他部件中的部件称为窗口。 QWidget *widget = new Q...

  • Python Qt GUI设计:QMainWindow、QWid

    QMainWindow、QWidget和QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用,...

  • Qt学习笔记(八)选项卡窗口(QTabWidget)

    1、基本使用 同样创建一个继承自QWidget的窗口派生类,添加槽事件: 链接槽 添加和删除Tab

网友评论

      本文标题:QWidget 和 QML窗口 相互嵌套

      本文链接:https://www.haomeiwen.com/subject/sclkdhtx.html