如何动态地创建多个长的一样的主窗口哪(数据当然不一样), 用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. Python-对比两个目录中Excel文件

    背景:我在5月20日收到了一批Excel文件数据,由于文件很多大约有将近5000个,已经通过编写python脚本处理完成.但是6月9日的时候,又收到了一批新的Excel数据.但是在处理过程中发现,本次 ...

  2. MySQL不支持DELETE使用表别名?

    最近做的需求经常和数据库在打交道, 因为系统页面上某些展示的字段并不是在前端写死的, 而是配置在数据库中, 这样的话便于维护和扩展. 于是遇到了一个MySQL中比较细节性的问题. 日常开发中不少程序员 ...

  3. 闲聊,Python中的turtle

    写在前面 其实我也不知道为什么我会写这个,本文涉及信号与传递,Python 正题 近期看到一个3年前的视频,1000个圆一笔画出一个Miku 在观看完源码了以后,我发现这是这调用的是基本的goto,用 ...

  4. 【转载】CentOS-yum安装Docker环境

    安装Docker环境 $ yum install docker -y 启动Docker $ systemctl start docker 设置自启动 $ systemctl enable docker ...

  5. CentOS-Docker安装Elasticsearch(单点)

    下载镜像 $ docker pull elasticsearch:7.6.0 运行镜像 $ docker run --restart=always --name elasticsearch -d -p ...

  6. consul 多节点/单节点集群搭建

    三节点配置 下载安装包 mkdir /data/consul mkdir /data/consul/data curl -SLO https://github.com/consul/1.9.5/con ...

  7. PHP Kafka 消息队列使用

      转载自:https://learnku.com/articles/44442 1. 安装 Kafka 服务# 直接到 kafka 官网 , 下载最新的 wget https://mirror.bi ...

  8. Swoole异步投递task任务

    [使用场景] Swoole的task模块可以用来做一些异步的慢速任务.耗时场景.如webim中发广播,发送邮件等,把这些任务丢给task进程之后,worker进程可以继续处理新的数据请求,任务完成后会 ...

  9. 计算机网络体系结构整理-第九单元移动IP

    第九章 移动IP 什么是移动:移动指的是用户连接位置的改变,而不是设备物理位置的改变 移动可以是离散的或连续的 移动IP的基本要求:1.IP地址不变 2.宿地址路由 3.信息量和交互简化 4.安全 5 ...

  10. fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

    fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化 在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串 ...