如何动态地创建多个长的一样的主窗口哪(数据当然不一样), 用QML也是可以实现的.

简单的地说, 就是调用多次load即可.

    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);
QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/part1.qml")); engine.load(url);
//多次调用
engine.load(url); return app.exec();

那多开了多个窗口之后, 如何设置不同的数据哪? 如何区分不同的窗口哪

    QObject *rootObj1 = engine.rootObjects()[0];
QObject *rootObj2 = engine.rootObjects()[1];

就可以找到刚刚创建的窗口, 以及里面的控件, 例如下面修改输入框的文字和颜色

    //直接修改控件属性: 控件的objectName为 textInput, 如果只有一个TextInput, 则省略参数
QQuickItem *textInput2 = rootObj1->findChild<QQuickItem*>("textInput");
if (textInput2){
textInput2->setProperty("text", "I am second one");
textInput2->setProperty("color", QColor(Qt::blue));
}

之前我们用ListView的时候, 设置的setContextProperty该如何独立设置哪?

    engine.rootContext()->setContextProperty("myModel", &model);

经过试验, 发现这个rootContext独一份, 也就是说这是全局统一的rootContext,而通过contextForObject获取的Context是只读的, 没有办法修改.

那看来就只能通过控件本身的setProperty修改了

例如, 修改listView的model数据:

    QQuickItem *listView1 = rootObj1->findChild<QQuickItem*>("listView");
if (listView1){
qDebug("find listview1");
listView1->setProperty("model", QVariant::fromValue(model1));
}

注意, 为了声明ListView的Model的数据类型, 需要做一些定义

    //注册类型: 让视图知道注入的是啥类型
qmlRegisterType<MyListModel>("MyList", 1, 0, "MyListModel");

视图QML部分:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.5 import MyList 1.0 Window {
id: rectangle1
visible: true
width: 340
height: 280
objectName: "window" property string keyname: "whoknows" ListView{
width: 100; height: 100 id: listView
objectName: "listView" Layout.fillWidth: true
Layout.fillHeight: true //默认数据为空, 但是声明了类型
model: MyListModel{} delegate: Rectangle {
height: 25
width: 100
Text { text: "hello " + model.name }
} } }

其中 MyListModel 是一个继承自 QAbstractListModel的模型类, 此处仅为演示, 完整的类需要考虑增删修改等各种函数实现.

项目代码: https://github.com/cnscud/learn/tree/master/qt/multiplewindows

QML用同一模版多开主窗口的更多相关文章

  1. 【转】【WPF】WPF 登录窗口关闭时打开主窗口

    在WPF中设计登录窗口关闭时打开主窗口,自动生成的App.xaml不能满足要求, 1.把App.xaml的属性窗口中的生成操作设定为 无 2.添加Program类 static class Progr ...

  2. QML用Instantiator动态创建顶级窗口

    关键点 使用Model驱动Instantiator QML里面的hashmap: QQmlPropertyMap 上一次说到用 QQmlApplicationEngine 多次load的方式创建多个一 ...

  3. C# WPF 建立无边框(标题栏)的登录窗口

    前言:笔者最近用c#写WPF做了一个项目,此前未曾做过完整的WPF项目,算是一边学一边用,网上搜了不少资料,效率当然是不敢恭维的,有时会在一些很简单的问题上纠结很长时间,血与泪的教训可不少. 不过,正 ...

  4. 由基于qml,c++的串口调试工具浅谈qml与c++混合编程

    最近在做一个基于sim900 的串口通信工具,基于qml和c++来实现. 首先,对于串口,qt有自带的QSerialPort,可以实现同步,和异步通信,qt creator也有自带的例子,本例子是从其 ...

  5. PYQT窗口托盘目录

    #UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui try:    _fromU ...

  6. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...

  7. Android--Activity(活动)

    1. 安卓中的 Activity 大致等于桌面应用中的window 2. Activity 的生命周期由系统控制, 所以在开发时要假设 Activity 会被随时销毁掉的情况, 比如: 应用中有一个 ...

  8. matlab GUI界面编程总结

    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...

  9. 使用OpenCV&&C++进行模板匹配.

    一:课程介绍 1.1:学习目标 学会用imread载入图像,和imshow输出图像. 用nameWindow创建窗口,用createTrackbar加入滚动条和其回调函数的写法. 熟悉OpenCV函数 ...

随机推荐

  1. Java并发之Semaphore源码解析(一)

    Semaphore 前情提要:在学习本章前,需要先了解笔者先前讲解过的ReentrantLock源码解析,ReentrantLock源码解析里介绍的方法有很多是本章的铺垫.下面,我们进入本章正题Sem ...

  2. 3、SpringBoot整合之SpringBoot整合JDBC

    SpringBoot整合JDBC 一.创建SpringBoot项目 选择Spring Web.JDBC API.MySQL Driver 二.在pom配置文件中修改JDBC版本,导入lombok &l ...

  3. POJ 2506 Tiling dp+大数 水题

    大致题意:现有两种方块(1X2,2X2),方块数量无限制.问用这两种方块填满2Xn的矩阵的填法有多少种. 分析:通俗点说,找规律.专业化一点,动态规划. 状态d[i],表示宽度为i的填法个数. 状态转 ...

  4. Docker学不会?不妨看看这篇文章

    大家好,我是辰哥! 上一篇文章(2300+字!在不同系统上安装Docker!)教大家如何在系统上安装docker,今天咱们来学习docker的基本使用. 辰哥将在本文里详细介绍docker的各种使用命 ...

  5. Springboot:单元测试Junit基本注解@BeforeClass、@AfterClass、@Before、@After、@Test、

    一.unit中集中基本注解,是必须掌握的. @BeforeClass – 表示在类中的任意public static void方法执行之前执行 @AfterClass – 表示在类中的任意public ...

  6. java.util.Date 与 java.sql.Date

    java.sql.Date 继承 java.util.Date 区别: 1.java.sql.Date 一般用于数据库 2.java.sql.Date 没有时分秒,涉及时分秒的函数都会报异常(且这些方 ...

  7. MVC 与 三层架构

    https://www.bilibili.com/video/av29086718/?p=24 MVC: MVC与三层架构进行比较:

  8. edraw max for mac 安装

    1.下载网址:https://xclient.info/s/edraw-max.html#versions 2.安装断网安装,直接打开 .dmg文件安装 3.按照阅读文件中的第二步,将opt.cell ...

  9. php漏洞 md5函数漏洞

    0x01: 背景:php在处理哈希值时,用!=和==来比较的时候,如果哈希字符串以0E开头的时候,哈希值会默认为0,所以两个不同的字符串经过md5加密成哈希值,如果哈希值开头是0E的话,会默认成相等. ...

  10. runtime使用总结

    runtime这个东西,项目是很少用到的,但面试又避不可少,了解其内部的机制对底层的理解还是很有必要的. 1.动态添加属性 拓展类别属性的简单实现 a.定义字面量指针 static char dyna ...