【QT】
QT开发学习
玛丽奥ZJY
这个作者很懒,什么都没留下…
展开
-
QT学习:Qt 捕捉窗口关闭事件与信号的捕捉
有时候我们希望在关闭窗口之前做一些操作,例如保存缓存数据或向用户提示是否关闭窗口等等。由于一般的窗口都是继承自QWidget, 那么我们可以通过覆盖QWidget中的虚函数closeEvent(QCloseEvent* event);来达到这个目的。(1)首先添加依赖库:#include <QCloseEvent>2)接着声明和定义closeEvent函数:a).h文件protected: void closeEvent(QCloseEvent *event.原创 2020-10-28 23:19:50 · 3428 阅读 · 0 评论 -
QT学习:QT文件操作
一、文本读写操作一个简单的文本读写操作文本格式为utf8。开文件显示乱码应该是文件编码问题,使用utf8无此问题(代码运行在linux平台)void MainWindow::on_pushButtonSave_clicked(){ QString fileName = QFileDialog::getSaveFileName(this, tr("保存当前日志"),原创 2020-10-28 19:14:43 · 193 阅读 · 0 评论 -
QT学习:QT多线程示例+一种通用高并发数据处理最简单思路
波特率115200=115200位/s=11520字节/s(无校验位)多个串口和网络发来的数据,需处理。波特率9600约等于1000个字节/s的数据,尤其在ARM上直接卡–>多线程–>一个线程收数据—>一个线程处理数据当协议一样,要将串口数据解析转为网络端口监听,之前可用tcp通信处理。还可以:各种数据接收后排队存入一个全局变量,再单独开辟一个线程从这个全局变量读取第一个数据,处理完则移除第一个数据。Qt中的链表直接提供了一个takeFirst函数,用while循环读取,在读取的时原创 2020-10-26 08:04:58 · 2487 阅读 · 1 评论 -
QT学习:Qt程序CPU占用率较高的解决办法
Qt程序CPU占用率较高的解决办法分析思路总的来说,Qt程序CPU占用率较高的原因可能有以下几点:1、在paintEvent中调用update函数,造成无限循环2、频繁刷新数据3、复杂的浮点运算4、死循环5、paintEvent里操作太多我遇到这个问题的程序是利用多个子线程(接收子线程)同时接收并解析网口的数据,同时另外一个子线程(融合子线程)对多个子线程解析得到的数据进行融合处理,接收子线程和融合子线程之间通过Qt的信号-槽机制进行数据交互。通过分析发现,各子线程运行之后均处转载 2020-10-26 08:02:08 · 4637 阅读 · 0 评论 -
QT 学习:QT中的3种指针介绍与使用
QPointerQPointer是Qt提供的一个比较特别的智能指针,和其它智能指针有很大的不同,该智能指针专门为自动释放内存资源而设计的。正文QPointer本质是一个模板类,属于Qt对象模型的特性,它为QObject提供了guarded pointer,当其指向的对象被销毁时,它会被自动置NULL。需要注意的是:QPointer所指向的对象必须是QObject或其派生类对象。因为其对象析构时会执行QObject的析构函数,进而执行QObjectPrivate::clearGuards(t.原创 2020-10-22 22:53:17 · 8744 阅读 · 0 评论 -
QT学习:Qt中QObject::sender()的用法
当某一个Object emit一个signal的时候,它就是一个sender,系统会记录下当前是谁emit出这个signal的,所以你在对应的slot里就可以通过 sender()得到当前是谁invoke了你的slot,对应的是QObject->d->sender.有可能多个Object的signal会连接到同一个signal(例如多个Button可能会connect到一个slot函数onClick()),因此这是就需要判断到底是哪个Object emit了这个signal,根据sender的原创 2020-10-22 22:39:27 · 499 阅读 · 0 评论 -
QT学习:QT5的程序打包发布(将QT5的工程项目打包成一个exe程序)
最近,在学习QT5的过程中,想尝试着把自己写的工程程序给打包发布出来,在任何一台windows系统都能运行,这样就不会限于电脑需不需要安装QT安装包了。首先,先介绍自己使用的环境。我使用的QT版本是。我的电脑windows系统是win10专业版的。下面的打包教程,都是亲测可用的。但个人认为,即便是不同的windows操作系统,不同的QT版本,也应该是可以的。希望大家能及时反馈,我好及时更新。第二,介绍一下我所使用的打包工具。一个是QT5自带的windeployqt(这个大家不需要下载安装),另外一个是Eng原创 2020-10-22 17:45:23 · 495 阅读 · 1 评论 -
QT学习:QT教程总结
推荐几个视频课程和文档:讯为嵌入式Qt(有串口调试助手的案例):讯为嵌入式Qt 传智播客Qt(C++跟这位老师学的,逐行逐句讲解是真的细):传智播客Qt Qt基础教程V2.0.doc 文档:Qt基础教程V2.0.doc...原创 2020-10-22 00:42:18 · 322 阅读 · 0 评论 -
QT学习:QtChart——简单的动态波形图
众所周知Qt 5.7过后Qt添加了官方的Chart库,终于可以用官方的库替代QWT和QCustomerPlot。本文只是简单的融合了几个Qt官方例子。程序运行图如下:文章目录#功能点其实大家来看博客,就是来看有啥功能,能ctrl + C加ctrl + V到自己项目里的,至于原理,有兴趣的同学可以自己去看看Qt源码,所以这里就主要讲一下本例有什么功能:数据动态更新。例子里是定时器,定时更新一个正弦波。 放大缩小。通过鼠标滚轮实现图像放大缩小功能。 比例复原。当你不小心把图像弄丢..原创 2020-10-21 22:42:18 · 1663 阅读 · 0 评论 -
QT学习:QTcpServer多线程实现
QTcpServer多线程实现目的:每个客户端连接的tcpSocket分别分配一个专门的线程来处理。实现时分别继承QTcpServer和QTcpScoket实现出自己需要的类。继承QTcpServer为每个客户端连接时分配线程,并接受处理tcpScoket的信号和槽、、还有发送信息,储存连接信息等。继承QTcpScoket为处理通信数据和增加信号的参数,以便和tcpServer更好的配合。首先是继承并重写QTcpServer的incomingConnection函数去自己实现tcpsoc原创 2020-10-21 21:55:49 · 3761 阅读 · 1 评论 -
Qt学习:QTimer
简述QTimer类提供了重复和单次触发信号的定时器。QTimer类为定时器提供了一个高级别的编程接口。很容易使用:首先,创建一个QTimer,连接timeout()信号到适当的槽函数,并调用start(),然后在恒定的时间间隔会发射timeout()信号。注意:当QTimer的父对象被销毁时,它也会被自动销毁。|版权声明:一去、二三里,未经博主允许不得转载。详细说明在Qt之模拟时钟中,1秒(1000毫秒)更新一次:QTimer *timer = new QTimer(this.转载 2020-10-21 17:50:52 · 2000 阅读 · 0 评论 -
外传篇 6 - 从字节流装配文本协议对象------------------狄泰软件学院
1.如何将接收缓冲区中的数据装配成协议对象上一节中提到的unserialize函数用于将一个符合协议规则的字符串装配成为一个协议对象。可是在实际工程开发过程中可能会是一个问题:接收缓冲区中的数据一定是满足协议的定义规则吗? 答案是:不一定2.如果接收缓冲区中的数据不满足协议规则能否将其装配成一个协议对象接收缓冲区中的数据足够 如果数据量足够是否能够装配成不只是一个对象? 剩下的数据如何处理(属于下一个协议对象)? 数据量不足 是否达到协议最小长度(8字节)? 如何处理数据量超.原创 2020-10-20 19:25:19 · 176 阅读 · 0 评论 -
外传篇 5 - 文本协议的设计与实现------------------狄泰软件学院
1. 发送缓冲区和接收缓冲区的概念缓冲区:暂存数据的内存空间 发送缓冲区:数据先进入发送缓冲区,之后由操作系统发送到远端主机 接收缓冲区:远端数据被操作系统接受后放入接收缓冲区2. 数据粘黏问题接收端无法知道数据的发送方式。3. 应用层协议网络程序设计中期望 每次发送一条完整的消息,每次接收一条完整的消息(发送和接收都是以一条完整的消息为单位进行) 即使接受缓冲区中有多条消息,消息之间有明显的界限,不会出现消息粘粘 消息中增加一...原创 2020-10-20 19:21:39 · 181 阅读 · 0 评论 -
外传篇 4 - TCP 服务端编程------------------狄泰软件学院
一、TCP 服务端编程二、TCP 服务端编程类的调用三、TCP服务端编程介绍四、QTcpServer的使用方式五、注意事项六、服务端和客户端的交互流程七、示例ServerDemo.cpp#include "ServerDemo.h"#include <QHostAddress>#include <QTcpSocket>#include <QObjectList>#include <QDebug>原创 2020-10-20 19:15:43 · 183 阅读 · 0 评论 -
外传篇3、 TCP 客户端编程------------------狄泰软件学院
1.Qt中TCP客户端编程对Qt编程而言,网络只是数据传输的通道; Qt提供了QTcpSocket类(封装了TCP协议细节); 将QTcpSocket的对象当做黑盒使用,进行数据首发。1.1QTcpSocket类的继承1.2QTcpSocket的使用连接服务器主机(connectToHost()) 发送数据/接受数据(write()/read()) 关闭连接(close())1.3QTcpSocket的注意事项默认情况下,QTcpSocket使用异步编程的方式 操作完成原创 2020-10-20 19:03:40 · 272 阅读 · 0 评论 -
QT移植:银河麒麟(Kylin)完整移植Qt5.9.2, 包含QCharts和QML等全部模块
最近项目接触到国产飞腾服务器,搭载的是我们国家自主的银河麒麟操作系统,系统自带Qt5.6,只有widget那套框架,没有QML也没有QCharts,因此尝试重新编译一个较新和稳定的Qt版本,所以选择了Qt5.9. 在此记录一下, 以便将来再用。Qt源码内的README文档已经把编译安装步骤写得很详细,出了问题第一时间对照文档是否有遗漏或疏忽。一、 准备工作 1、官网下载Qt源码,Qt Creator源码。 http://download.qt.io/archive/qt...原创 2020-10-17 11:48:17 · 2513 阅读 · 0 评论 -
QT移植:超详细Qt5.9.5移植攻略
导语:目前启扬智能默认提供的Qt版本是4.8,但是现在已经发展到最新的5.9版本。当现有版本的Qt库不能满足实际开发需求时,则需要进行Qt移植。本文就来介绍下如何将Qt5.9.5移植到ARM开发板上。以启扬imx6开发板为例,使用Ubuntu14.04虚拟机作为移植环境。下面跟着我左手右手一个慢动作,开始吧!一、准备工作1、主机环境:Ubuntu14.04;开发板:启扬IAC-IMX6-kit;(如果使用的是Ubuntu12.04,需要将gcc升级到4.8以上)..转载 2020-10-17 11:47:18 · 1823 阅读 · 0 评论 -
QT移植:i.mx6q 移植Qt5.9.1(完美支持opengl、Qt quick2、QML)
下面就分享下如何打造一个能流畅运行QML的i.mx6Q开发板环境。本人环境如下: 飞凌i.mx6Q开发板,这个板子的Linux系统太老了,很多东西没有,像SD卡升级内核这种后期工厂批量生产的方式就不支持,早知道买NXP官网的了(好像淘宝有另一家用的是新内核)。 开发板图片 Linux 3.0.35内核,就因为是这个老版本,导致多做了些工作,后面有说。 U-Boot 2009.08 Ubuntu 14.04 64位 准备工作官网下载Qt5.9.1.原创 2020-10-17 11:44:53 · 2576 阅读 · 1 评论 -
QT学习:给label添加图片资源
方法一:首先,要在项目里添加一个资源文件。然后给资源文件添加前缀,把我们自己的图片拷贝进去。此处右击可以拷贝图片路径在ui设计界面添加一个label,起名为labelpicture。MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->labelpicture-&.原创 2020-10-16 11:25:13 · 15486 阅读 · 4 评论 -
第八十五课、多线程与界面组件的通信(下)------------------狄泰软件学院
一、多线程与界面组件的通信1、子线程更改界面组件状态的本质(1)、子线程发射信号通知主线程界面更新请求(2)、主线程根据具体信号以及信号参数对界面组件进行修改2、另一种子线程通知主线程的方式 :发送自定义事件(1)、自定义事件用于描述界面更新细节(2)、在主窗口类中重写事件处理函数event(3)、使用postEvent函数(异步方式)发送自定义事件类对象(抛到应用程序的事件队列,然后分发出去)A、子线程指定接收消息的对象为主窗口对象B、在event事件处理函数中更新原创 2020-10-15 11:24:04 · 251 阅读 · 0 评论 -
第八十四课、多线程与界面组件的通信(上)------------------狄泰软件学院
一、多线程与界面组件的通信1、GUI设计原则(1)、所有界面组件的操作都只能在主线程中完成(2)、因此,主线程也叫UI线程2、子线程对界面组件进行更新的解决方案-----信号与槽(1)、在子线程类中定义界面更新信号(updateUI)(2)、在窗口类中定义更新界面组件的槽函数(setInfo)(3)、使用异步方式连接更新信号到槽函数(updateUI--->setInfo)A、子线程通过发射信号的方式更新界面组件B、所有界面组件对象只能依附主线程MyThr.原创 2020-10-15 09:17:35 · 185 阅读 · 0 评论 -
第八十三课、另一种创建线程的方式------------------狄泰软件学院
一、历史的痕迹1、注意(1)、面向对象的程序设计实践的早期工程中习惯于通过继承的方式扩展系统的功能2、现代软件架构技术(1)、尽量使用组合的方式实现系统功能(2)、代码中仅体现需求中的继承关系3、通过继承方式实现新的线程类的事实(1)、线程子类仅保护void run()函数不同,接口部分完全相同4、结论(1)、通过继承的方式实现多线程没有任何实际意义(只是为了得到线程入口而已)(2)、QThread对应于操作系统中的线程(3)、QThread用于充当一个线原创 2020-10-15 09:09:27 · 218 阅读 · 1 评论 -
第八十二课、线程的生命周期------------------狄泰软件学院
一、线程的生命周期1、一个工程中的实际(1)、c++对象有生命周期(2)、线程也有生命周期(3)、工程实践中的经验准则要想办法保证:线程对象(QThread对象)的生命周期>对应线程的生命周期问题代码:在栈中定义局部线程对象 t.start()后继承向下执行,然后线程对象销毁,里面的成员变量 i 也销毁,但是run()还未结束,就会操作一个被销毁的对象,程序崩溃二、同步型线程的设计1、概念:线程对象主动等待线程生命周期结束后才销毁2、特点(1)、同时支...原创 2020-10-15 09:09:16 · 129 阅读 · 0 评论 -
第八十一课、信号与槽的连接方式------------------狄泰软件学院
一、深入信号与槽的连接方式1、深入信号与槽的连接方式(1)、Qt::DirectConnection : 立即调用(2)、Qt::QueuedConnection : 异步调用(3)、Qt::BlockingQueuedConnection : 同步调用(4)、Qt::AutoConnection : 默认连接(5)、Qt::UniqueConnection : 单一连接2、小知识(1)、信号与槽的连接方式决定槽函数调用时候的相关行为3、知识回顾(1)、每一个线程原创 2020-10-14 17:51:24 · 246 阅读 · 0 评论 -
第八十课、多线程中的信号与槽(下)------------------狄泰软件学院
一、线程体函数开启了事件循环,线程如何正常结束1、QThread::exec()使得线程进入事件循环(1)、事件循环结束前,exec()后的语句无法执行(2)、quit()和exit()函数用于结束事件循环(3)、quit() <---->exit(0),exec()的返回值由exit()参数决定2、注意(1)、无论事件循环是否开启,信号发送后会直接进入所依附线程的事件队列(2)、然而,只有开启了事件循环,对应的槽函数才会在线程中被调用二、什么时候需.原创 2020-10-14 15:17:47 · 150 阅读 · 0 评论 -
第七十九课、多线程中的信号与槽(中)------------------狄泰软件学院
一、对象的依附性1、对象依附于哪个线程?(1)、默认情况下,对象依附于自身被创建的线程(如对象在主线程main()函数)中被创建,则依附于主线程)2、对象的依附性与槽函数执行的关系?(1)、默认情况下,槽函数在对象所依附的线程中调用执行3、对象的依附性是否可以改变?(1)、QObject::moveToThread用于改变对象的线程依赖性,使得对象的槽函数在依附的线程中被调用执行MyObject.h#ifndef MYOBJECT_H#define MYOB.原创 2020-10-14 15:10:54 · 181 阅读 · 0 评论 -
第七十八课、多线程中的信号与槽(上)------------------狄泰软件学院
一、多线程中的信号与槽1、QThread类拥有发射信号和定义槽函数的能力(因为QThread继承自QObject)(1)、关键信号A、void start():线程开始运行时发射该信号B、void finished():线程完成运行时发射该信号C、void terminated():线程被异常中发射该信号TestThread.h#ifndef TESTTHREAD_H#define TESTTHREAD_H#include <QThread>class .原创 2020-10-14 15:02:41 · 182 阅读 · 0 评论 -
第七十七课、银行家算法------------------狄泰软件学院
一、银行家算法1、问题描述(1)、研究银行家如何将总数 一定的资金,安全地借给若干个顾客,使顾客既能满足对资金的需求,也使银行家可以收回自己的全部资金,不至于破产2、以下限制条件(1)、每个顾客在借款前必须提前说明所需资金总额(2)、每次借钱都是以一个单位进行(如,一个单位为一万人民币)(3)、顾客在拿到一个单位的借款前可能需要等待(4)、银行保证顾客的等待事件是有限的(借或者不借)3、算法实例4、算法策略:将资金优先借给需求较少的客户5、应用场景(1原创 2020-10-14 10:13:40 · 237 阅读 · 0 评论 -
第七十六课、多线程间的互斥(下)------------------狄泰软件学院
一、多线程间的互斥1、程序的临界资源与线程锁的数量关系(1)、一般性原则:每一个临界资源都需要一个线程锁进行保护2、死锁的概念(1)、线程间相互等待资源而造成彼此无法继承执行3、发生死锁的条件(1)、系统中存在多个临界资源且临界资源不可抢占(每次只有一个线程使用)(2)、线程需要多个临界资源才能继续执行死锁的产生#include <QCoreApplication>#include <QThread>#include <QM..原创 2020-10-14 10:08:22 · 128 阅读 · 0 评论 -
第七十五课、多线程间的互斥(上)------------------狄泰软件学院
一、多线程间的互斥1、生产消费者问题(1)、有n个生产者同时制造产品,并把产品放入仓库中(2)、有m个消费者同时从仓库中取出产品(3)、规则A、当仓库未满,任意生产者可以存入产品B、当仓库未空,任意消费者可以取出产品2、生活中的线程互斥例子标示牌用于指示是否可用:红绿灯标识十字路口是否可用:3、线程互斥的相关概念(1)、临界资源(Critical Resource):每次只允许一个线程访问(读/写)的资源(2)、线程间的互斥(竞争):多个线程在同一个时原创 2020-10-14 10:02:42 · 124 阅读 · 0 评论 -
第七十四课、多线程间的同步------------------狄泰软件学院
(2)、在宏观上,所有线程并行执行(3)、多个线程间相互独立,互不干涉2、特殊情况下,多线程存在依赖煮菜和煮饭这两个线程结束后,才能进行吃饭的线程3、同步的概念(1)、在特殊情况下,控制多线程间的相对执行顺序(2)、QThread类支持线程间的同步wait()函数的使用#include <QCoreApplication>#include <QThread>#include <QDebug>/* * sum(n.原创 2020-10-14 09:59:11 · 96 阅读 · 0 评论 -
第七十三课、Qt中的多线程编程------------------狄泰软件学院
一、Qt中的多线程编程1、Qt通过QThread直接支持多线程(1)、QThread是一个跨平台的多线程解决方案(2)、QThread以简洁易用的方式实现多线程编程(3)、注意A、Qt中的线程以对象的形式被创建和使用B、每一个线程对应着一个QThread对象2、QThread中的关键成员函数(1)、void run() :线程体函数,用于定义线程功能(执行流)(相当于主线程的入口函数main())(2)、void start(): 启动函数,将线程入口地址设置为ru.原创 2020-10-14 09:56:14 · 259 阅读 · 0 评论 -
第七十二课、进程与线程的概念------------------狄泰软件学院
一、进程的概念1、程序是计算机存储系统中的文件数据(1)、源代码:文本文件,描述程序的行为和功能(2)、可执行程序:二进制文件,直接加载并执行2、进程的概念(1)、广义概念:程序关于某个数据集合的运行活动(2)、狭义概念:程序被加载到内存中执行后得到进程3、程序和进程的区别(1)、程序是硬盘中的静态文件:存储系统中的一段二进制表示(2)、进程是内存中动态的运行实体:数据段、代码段、指针等4、程序和进程的联系(有进程一定有程序,但有程序不一定有进程)(1)、一个原创 2020-10-14 09:51:22 · 186 阅读 · 0 评论 -
第六十七课、基础图形绘制(中)------------------狄泰软件学院
一、基础图形绘制1、Qt图形系统中的坐标系(1)、物理坐标系(设备坐标系)A、原点(0,0)在左上角的位置,单位:像素(点)B、x坐标向右增长,y坐标向下增长(2)、逻辑坐标系(如数学中的坐标系)A、数学模型中的抽象坐标系,单位由具体问题确定B、坐标的增长方向由具体问题决定2、一些事实(1)、QPainter使用逻辑坐标系绘制图形(2)、逻辑坐标系中图形点大小和位置经由转换后绘制于具体设备(3)、默认情况下的逻辑坐标系与物理坐标系完全一致3、视口与窗口(站原创 2020-10-13 21:21:49 · 162 阅读 · 0 评论 -
第六十六课、基础图形绘制(上)------------------狄泰软件学院
一、基础图形绘制1、Qt图形系统中的关键角色(1)、QPainterA、Qt中的画家,能够绘制各种基础图形B、拥有绘图所需的画笔(QPen),画刷(QBrush),字体(QFont)(2)、QPaintDeviceA、Qt中的画布,画家(QPainter)的画图板B、所有的QWidget都继承自QPaintDevice2、小贴士(1)、QPainter中的所有绘制参数都可以自定义(2)、任意的QWidget对象都能够作为画布绘制图形3、画家(QPainter)原创 2020-10-13 21:16:59 · 136 阅读 · 0 评论 -
第六十一课、模型视图中的委托(上)------------------狄泰软件学院
SubStyledItemDelegate.cpp#include "SubStyledItemDelegate.h"#include <QDebug>SubStyledItemDelegate::SubStyledItemDelegate(QObject *parent) : QStyledItemDelegate(parent){ connect(this, SIGNAL(closeEditor(QWidget*)), this, SLOT(on...原创 2020-10-11 13:05:26 · 156 阅读 · 0 评论 -
第六十课、自定义模型类(下)------------------狄泰软件学院
一、界面设计1、界面效果2、界面关系图3、右键上下文菜单的实现(1)、定义菜单对象(2)、连接菜单中的QAction对象到槽函数(3)、定义事件过滤器,并处理ContextMenu事件(4)、在当前鼠标的位置打开菜单对象Widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QTableView>#include "ScoreInfoModel.h.原创 2020-10-11 09:45:40 · 117 阅读 · 0 评论 -
第五十九课、自定义模型类(中)------------------狄泰软件学院
一、自定义模型类1、系统架构图2、DataSource类的设计与实现(1)、设置数据源并读取数据(2)、对数据进行解析后生成数据对象DataSource.h#ifndef DATASOURCE_H#define DATASOURCE_H#include <QObject>#include "ScoreInfo.h"#include <QList>class DataSource : public QObject{ Q_OBJ.原创 2020-10-11 09:42:56 · 161 阅读 · 0 评论 -
第五十八课、自定义模型类(上)------------------狄泰软件学院
一、自定义模型类1、QStandardItemModel是一个通用的模型类(1)、能够以任意的方式组织数据(线程、非线性)(2)、数据组织的基本单位为数据项(QStandardItem)(3)、每一个数据项能够存储多个具体数据(附加数据角色)(4)、每一个数据项能够对数据状态进行控制(可编辑、可选...)2、Qt中的通用模型类QStandardItemModel(1)、QStandardItemModel继承自抽象的模型类QAbstractItemModel(2)、QStan原创 2020-10-11 09:32:07 · 275 阅读 · 0 评论 -
第五十七课、模型视图设计模式(下)------------------狄泰软件学院
一、不同的视图显示同一个模型中的数据1、Qt中标准模型定义(例子中使用表格模型)(1)、获取虚拟根节点(2)、动态从堆空间申请并创建三个数据项(3)、分别往三个数据项中放入数据(4)、将数据项放到模型中MainWindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QtGui/QMainWindow>#include <QTableView>#include <QStand.原创 2020-10-11 09:22:27 · 151 阅读 · 0 评论