tag 标签: qt

相关博文
  • 热度 3
    2023-11-17 15:39
    1605 次阅读|
    0 个评论
    QGraphicsView 本身并没有鼠标操作功能。需要另写函数实现。基本的思路是写一个新的类,继承 QGraphicsView , class ChartView : public QChartView 再重载鼠标操作函数。 void mousePressEvent ( QMouseEvent * event ) override void mouseMoveEvent ( QMouseEvent * event ) override void mouseReleaseEvent ( QMouseEvent * event ) override void wheelEvent ( QWheelEvent * event ) override 需要使用 3 个私有的变量记录鼠标的动作状态 private : bool isClicking ; // 记录鼠标左键按下和释放,只有在按下鼠标再拖动时才产生动作。 int startX ; // 记录鼠标按下时起始点位置 int startY ; 使用两个公共指针,指向序列数据和折线图 public : QLineSeries * series ; // 用于折线图的数据序列 QChart * chart ; // 图指针 在鼠标左键按下的事件处理函数中使 isClicking 为 true ,同时使用 StartX StartY 记录起始点位置 在鼠标左键释放的事件处理函数中使用 isClicking 为 false 在鼠标移动事件中,获取移动的距离,改变数轴的范围。这样就可以实现鼠标点击拖动。 在鼠标滚轮滚动的事件中,获取滚轮滚动量和方向,同步改变数轴的范围,实现图片左右移动。 生成一个 chartview.h 文件,并添加到工程中。 # ifndef CHARTVIEW_H # define CHARTVIEW_H # include < QApplication # include < QtCharts # include < QLineSeries # include < QChart # include < QChartView # include < QValueAxis # include < QMouseEvent QT_CHARTS_USE_NAMESPACE class ChartView : public QChartView { public : QLineSeries * series ; QChart * chart ; ChartView ( QWidget * parent = nullptr ) : QChartView ( parent ), isClicking ( false ) { // 创建折线图 series = new QLineSeries (); series append (- 3 , 4 ); series append (- 2 , 3 ); series append (- 1 , 2 ); series append ( 0 , 1 ); series append ( 1 , 3 ); series append ( 2 , 2 ); series append ( 3 , 4 ); chart = new QChart (); chart addSeries ( series ); chart createDefaultAxes (); chart legend hide (); setChart ( chart ); setRenderHint ( QPainter :: Antialiasing ); setRubberBand ( QChartView :: RectangleRubberBand ); } protected : void mousePressEvent ( QMouseEvent * event ) override { if ( event button () == Qt :: LeftButton ) { isClicking = true ; startX = event x (); startY = event y (); } } void mouseMoveEvent ( QMouseEvent * event ) override { if ( isClicking ) { int deltaX = event x () - startX ; int deltaY = event y () - startY ; // QChart *chart = chart(); if ( event modifiers () == Qt :: ControlModifier ) { QValueAxis * axisX = qobject_cast < QValueAxis ( chart axes ( Qt :: Horizontal ). at ( 0 ) ); QValueAxis * axisY = qobject_cast < QValueAxis ( chart axes ( Qt :: Vertical ). at ( 0 ) ); if ( axisX && axisY ) { qreal deltaXRatio = deltaX / chart plotArea (). width (); qreal deltaYRatio = deltaY / chart plotArea (). height (); qreal deltaXValue = deltaXRatio * ( axisX max () - axisX min ()); qreal deltaYValue = deltaYRatio * ( axisY max () - axisY min ()); axisX setRange ( axisX min () - deltaXValue , axisX max () - deltaXValue ); // min() + deltaYValue, max() + deltaYValue); } } else { chart scroll (- deltaX , deltaY ); } startX = event x (); startY = event y (); } } void mouseReleaseEvent ( QMouseEvent * event ) override { if ( event button () == Qt :: LeftButton ) { isClicking = false ; } } void virtual wheelEvent ( QWheelEvent * event ) override { qreal temp = event angleDelta (). y (); QValueAxis * axisX = qobject_cast < QValueAxis ( chart axes ( Qt :: Horizontal ). at ( 0 ) ); if ( temp 0 ) axisX setRange ( axisX min () + 1 , axisX max () + 1 ); else axisX setRange ( axisX min () - 1 , axisX max () - 1 ); } private : bool isClicking ; int startX ; int startY ; }; # endif // CHARTVIEW_H 在窗口中增加一个 Graphics view 控制,并提升为这个扩展的类。 现在这个折线图就可以使用鼠标操作了。 因为这个类中有公有的 QLineSeries 指针,在获取指针后可以对数据序列进行操作。 void MainWindow :: on_pushButton_clicked () { static int i = 7 ; QLineSeries * p ; p = ui graphicsView series ; // 获取数据序列指针 p append ( i , 3 ); i ++; } 测试一下:
  • 热度 4
    2023-9-6 17:37
    1078 次阅读|
    0 个评论
    在 QT 中不同模块之间传递数据可以使用全局共享的方式,比如建立一个称为 SysPara 的类继承于 QObject 类。 头文件中公有函数中提供一个获取这个类的指针 GetInstance() 私有成员中 存放一个 指向 SysPara 的 s_instance 指针。 class SysPara : public QObject { Q_OBJECT public : static SysPara * getInstance (); // 其他成员函数和数据成员 int gloabledata; QString gloablestr; private : explicit SysPara ( QObject * parent = nullptr ); static SysPara * s_instance ; }; 在 C 文件中实现这些函数功能,在构造函数中,可以将公有成员做初始化。 在 getInstance 函数中先判断 s_instance 是不是为空指针,是则实例化 SysPara ,然后返回 s_instance SysPara * SysPara :: s_instance = nullptr ; SysPara :: SysPara ( QObject * parent ) : QObject ( parent ) { // 构造函数的实现 gloabledata = ; gloablestr = ; } SysPara * SysPara :: getInstance () { if (! s_instance ) { s_instance = new SysPara (); } return s_instance ; } 这样设计的好处是,可以在项目任意地方使用。当第一次使用时自动做初始化。 需要使用时在任意地方先获取全局类的指针 SysPara * pPara = SysPara :: getInstance (); 然后就可以使用 来操作公有成员了。 gloablestr
  • 热度 4
    2023-8-25 11:48
    1433 次阅读|
    0 个评论
    在原工程中新创建一个界面类。系统会生成一个窗口 ui 及相应的描述这个 form 的类头文件和 CPP 文件并加入到工程中。 将类名修改成想要的类型后。直接生成。 Pro 文件中增加 QT += charts 在 ui 文件中放一个 QGraphicView 控制,并提升为 QtChartView 在生成的 h 文件中增加 # include < QtCharts / QChartView # include < QtCharts / QLineSeries # include < QValueAxis QT_BEGIN_NAMESPACE QT_CHARTS_USE_NAMESPACE QT_END_NAMESPACE 除了要包含 QtCharts 这些库之外,还需要使用 CHARTS 的命名空间。 class DialogPMTData : public QDialog { Q_OBJECT 在类定义中增加公有元素 QLineSeries 用于存放拆线数据序列, QValueAxis QValueAxis 用于指定坐标轴 QChart 用于指定图片的组成。 public : explicit DialogPMTData ( QWidget * parent = nullptr ); ~ DialogPMTData (); QLineSeries * LineSerial ; QChart * chart ; QValueAxis * xaxis ; QValueAxis * yaxis ; private : Ui :: DialogPMTData * ui ; }; 在构造函数中实例化这些指针 DialogPMTData :: DialogPMTData ( QWidget * parent ) : QDialog ( parent ), ui ( new Ui :: DialogPMTData ) { ui setupUi ( this ); LineSerial = new QLineSeries ; LineSerial append ( 1 , 3.3 ); LineSerial append ( 2.1 , 0.2 ); LineSerial append ( 3 , 1.1 ); LineSerial append ( 5.4 , - 0.2 ); LineSerial append ( 6.0 , 0.1 ); chart = new QChart (); chart legend hide (); chart addSeries ( LineSerial ); // createDefaultAxes(); xaxis = new QValueAxis (); yaxis = new QValueAxis (); xaxis setRange ( 1.0 , 6.0 ); yaxis setRange (- 0.2 , 2.3 ); chart addAxis ( yaxis , Qt :: AlignLeft ); chart addAxis ( xaxis , Qt :: AlignBottom ); LineSerial attachAxis ( xaxis ); LineSerial attachAxis ( yaxis ); chart setTitle ( "PMT data 20ms" ); //chartView = new QChartView(chart); ui PMTDataView setChart ( chart ); } 在 MainWindow 中加入这个窗口类,并作为公有对象。并定义一个定时器,用于定时刷新图像,并增加一个槽函数用于刷新图像。 class MainWindow : public QMainWindow { Q_OBJECT public : MainWindow ( QWidget * parent = nullptr ); ~ MainWindow (); SerialComm AASCom ; DialogPMTData PMTView ; QTimer SerialParsetimer ; private slots : void PmtDataParse1 (); 在 MainWindow 的构造函数中定义并启动定时器。连接定时器 timeout 信号到槽函数。 MainWindow :: MainWindow ( QWidget * parent ) : QMainWindow ( parent ) , ui ( new Ui :: MainWindow ) { ui setupUi ( this ); connect (& SerialParsetimer , & QTimer :: timeout , this , & MainWindow :: PmtDataParse1 ); // 设置定时器的时间间隔,单位为毫秒 int interval = 10 ; // 每 10 毫秒运行一次 SerialParsetimer . start ( interval ); PMTView . show (); } 在槽函数中从接收到的数据中识别出正确数据,并更新图像的数据系列,计算坐标轴然后显示出来。 void MainWindow :: PmtDataParse1 (){ btoi_typedef btoi ; int i ; //ret = 0; int posstart = AASCom . rxbuf indexOf ( "DATA" ); int posend = AASCom . rxbuf indexOf ( "\r\n\r\n" ); if ( posstart != - 1 ){ if ( AASCom . rxbuf length = posstart + 608 ){ if ( AASCom . rxbuf mid ( posstart + 604 , 4 ) == "\r\n\r\n" ){ PMTView . LineSerial clear (); for ( i = 0 ; i < 150 ; i ++){ memcpy ( btoi . byte , AASCom . rxbuf mid ( i * 4 + 4 , 4 ), 4 ); PMTView . LineSerial append ( i , btoi . idat / 256 ); } AASCom . rxbuf remove ( posstart , 608 ); double ymin , ymax , deltay ; ymin = PMTView . LineSerial at ( 0 ). y (); ymax = ymin ; for ( int i = 1 ; i < PMTView . LineSerial count (); i ++){ ymin = qMin ( PMTView . LineSerial at ( i ). y (), ymin ); ymax = qMax ( PMTView . LineSerial at ( i ). y (), ymax ); } PMTView . LineSerial setColor ( QColor ( rand ()% 255 , rand ()% 255 , rand ()% 255 )); deltay = ymax - ymin ; ymin -= deltay / 10 ; ymax += deltay / 10 ; PMTView . yaxis setRange (( int ) ymin ,( int ) ymax ); PMTView . xaxis setRange ( 0 , 149 ); PMTView . chart update (); } else AASCom . rxbuf remove ( posstart , 4 ); } } } 这样从串口接收到的数据,就能在另一个窗口中显示出来了。 另外,程序运行时,需要改变窗口尺寸时同步改变图像显示的尺寸,可以将 ChartView 控件拖入一个垂直布局中, 并在构造函数中加入: this setLayout ( ui verticalLayout );
  • 热度 6
    2023-6-9 10:31
    866 次阅读|
    0 个评论
    最近在使用串口读一些数据,但是总会出现些发、送之间的冲突问题,为了弄清楚问题的所在,于是产生了想法,做了一个日志保存。 void Widget::SaveLogTxt(QString dat ) { QDateTime currenttime = QDateTime::currentDateTime(); QString strDate = currenttime.toString("yyyy/MM/dd"); QString strTime = currenttime.toString("hh:mm:ss.zzz"); QString path = QCoreApplication::applicationDirPath(); QString strPath = "C://Users//user//Desktop//RS485/log.txt"; qDebug()<
  • 热度 12
    2023-4-10 11:49
    2003 次阅读|
    1 个评论
    串口将接收到的数据,进行解析后,使用QT绘图,动态刷新显示。 先将项目文件中增加 charts 支持 QT += charts 在主窗口定义中增加 QT_CHARTS_USE_NAMESPACE 在 ui 中使用 graphic view 控件占用图形显示的位置,并将控件提升为 QChartView 控件。 Qchart 可以绘制折线、条形图或饼图。折线需要有 QLineSeries 容纳折线的坐标数据。 先定义私有成员 QLineSeries * LineSerial ; ,需要在构造函数中实例化。 chart = new QChart(); hide(); addSeries(LineSerial); //将线性序列加入到图 QValueAxis *xaxis = new QValueAxis(); //建立X,Y轴 QValueAxis *yaxis = new QValueAxis(); setRange(0,20); // 设定 数轴范围 setRange(0,10); addAxis(yaxis,Qt::AlignLeft); addAxis(xaxis,Qt::AlignBottom); attachAxis(xaxis); attachAxis(yaxis); setTitle("Simple line chart example"); //设定图的抬头 setChart(chart); // 将 图加入到chatview 这样就可以将折线图显示出来了。 使用串口数据动态刷新折线图 在串口接收的槽函数中,收到的数据是使用 readall() ,读到一个 QString 里面,但有可能只是零碎的数据片段。获得数据后,追加到先前接收到的数据后面,再进行处理。这里有一个专门的处理函数,在槽函数中调用。依据要求,传入数据段指针和需要处理的数据序列指针。使用 QString 中的各种方法,判断数据是不是完整的,找到数据头和尾。然后进行解析,将合法数据追加到数据序列里。 int bubfreqscanpharse(QString *p,QLineSeries *pls){ indexOf("@ 6.00 MHz"); int ret = 0; static int linecolor = 0; if(npos != -1){ right(2)=="\r\n"){ // QDebug() << "get tail"; split("@"); if(datlist.size()==42){ int i; float x,y; clear(); for(i=1;i<42;i++){ x = datlist .mid(1,4).toFloat(); y = datlist .mid(11,4).toFloat(); append(x,y); } setColor(QColor(qrand()%255,qrand()%255,qrand()%255)); ret = 1; } clear(); } } return ret; } 串口接收处理槽函数 void MainWindow::readData() { readAll(); // 串口收到的数据放到data中 append(data); // 追加data到接收缓冲区 setText(data); // 显示刚收到的数据 // 调用数据处理函数,并传入缓冲区数据和链接到图的数据序列指针 if(bubfreqscanpharse(buf,LineSerial) == 1){ createDefaultAxes(); } }
相关资源
  • 所需E币: 0
    时间: 2023-12-12 15:27
    大小: 3.18KB
    上传者: 开心就很好了
    今天给大家讲解关于Qt的内容,我会在文章里面带着大家从0到1为你系统构建Qt知识体系,然后全流程实战开发项目“云对象存储浏览器”,让大家少走弯路,更快速的掌握Qt技术。那么我们先来认识一下,什么是QT,他的具体作用是什么,应用在哪些方面?Qt是一个1991年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。QT之所以能够在全世界范围内得到广大软件开发者的青睐和使用,一个很大的原因是QT入门确实是非常容易。很少的代码就能折腾出一个比较复杂的软件界面。QT已经支持传统模式下的软件界面开发技术体系以及新模式下的软件界面开发技术体系。传统模式比如QTWidgets,这种模式下的竞争对手比如MFC早就“躺平”了表示不再升级更新了。接下来,我们开始代码实战,编写mainwindows.cppMainWindow::MainWindow(QWidget*parent)  :QMainWindow(parent)  ,ui(newUi::MainWindow){  ui->setupUi(this);  //一般在qt的构造函数中进行初始化操作  //显示当前窗口的时候,显示另外一个窗口TestWidget#if1  //创建窗口对象,没有给W对象指定父对象  //要显示这个窗口必须要进行show()操作  TestWidget*w=newTestWidget;  w->show();#else  //创建窗口对象,给W对象指定父对象  //explicitTestWidget(QWidget*parent=nullptr);  //如果创建一个窗口对象的时候给其指定了父对象,这个窗口就不是一个独立窗口  //这样的话当前父窗口显示的时候,子窗口就一并被显示出来了  //这时候子窗口是没有边框的  TestWidget*w=newTestWidget(this);#endif  //创建对话框窗口  Dialog*dlg=newDialog();  //非模态  dlg->show();}#include"mainwindow.h"#include"ui_mainwindow.h"#include"testwidget.h"MainWindow::MainWindow(QWidget*parent)  :QMainWindow(parent)  ,ui(newUi::MainWindow){  ui->setupUi(this);     //一般在qt的构造函数中进行初始化操作  //显示当前窗口的时候,显示另外一个窗口TestWidget  //创建窗口对象,没有给W对象指定父对象  TestWidget*w=newTestWidget;  w->show();}MainWindow::~MainWindow(){  deleteui;}获取类的属性constQMetaObject*metaobject=object->metaObject();intcount=metaobject->propertyCount();for(inti=0;i<count;++i){  QMetaPropertymetaproperty=metaobject->property(i);  constchar*name=metaproperty.name();  QVariantvalue=object->property(name);  qDebug()<<name<<value;}在common中引入的坐标依赖<dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-lang3</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-core</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-annotations</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-databind</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.datatype</groupId>  <artifactId>jackson-datatype-jsr310</artifactId></dependency>迭代查询代码,一级缓存与二级缓存结合:@GetMapping("query")publicObjectquery(Stringid){  StringarticleKey="article:"+id;  StringarticleKeyRedis="REDIS_ARTICLE:"+id;  Articlearticle=cache.get(articleKey,s->{    System.out.println("文章id为"+id+"的没有查询到,则从Redis中查询后返回...");    ArticlearticleReal=null;    StringarticleJsonStr=redis.get(articleKeyRedis);    //判断从redis中查询到的文章数据是否为空    if(StringUtils.isBlank(articleJsonStr)){      System.out.println("Redis中不存在该文章,将从数据库中查询...");      //如果为空,则进入本条件,则从数据库中查询数据      articleReal=articleService.queryArticleDetail(id);      //手动把文章数据设置到redis中,后续再次查询则有值      StringarticleJson=JsonUtils.objectToJson(articleReal);      redis.set(articleKeyRedis,articleJson);    }else{      System.out.println("Redis中存在该文章,将直接返回...");      //如果不为空,则直接转换json类型article再返回即可      articleReal=JsonUtils.jsonToPojo(articleJsonStr,Article.class);    }    returnarticleReal;  });  returnarticle;}@ResourceprivateIArticleTypeServicearticleTypeService;@ResourceprivateCache<String,List<ArticleType>>articleTypeCache;@ResourceprivateRedisOperatorredis;@Overridepublicvoidrun(String...args)throwsException{  System.out.println("缓存预热。。。");  //1.查询所有分类数据  List<ArticleType>types=articleTypeService.list();  System.out.println(types);  StringarticleTypeKey="articleTypeList";  //2.设置分类数据到本地缓存  articleTypeCache.put(articleTypeKey,types);  //3.设置分类数据到redis  redis.set(articleTypeKey,JsonUtils.objectToJson(types));}修改hostname,可以区分每个tab是哪台虚拟机--获得http的协议版本号--ngx.say("http协议版本:"..ngx.req.http_version());--获得http的请求方法--ngx.say("http的请求method:"..ngx.req.get_method());--http的请求头内容--ngx.say("http的原始请求头内容:"..ngx.req.raw_header());--获得http的请求头信息localmyHeader=ngx.req.get_headers();--ngx.say("token:"..myHeader.token);--ngx.say("uid:"..myHeader.uid);--获得请求中的参数localargs=ngx.req.get_uri_args();--ngx.say("age:"..args["age"]);--ngx.say("birthday:"..args["birthday"]);--获得请求体body中的数据ngx.req.read_body();localbody_data=ngx.req.get_post_args();forkey,valueinpairs(body_data)do  ngx.say(key,value);end目标:先查询缓存,如果缓存有数据,则在网关中判断返回即可。如果网关中缓存不存在,则把请求向后端服务转发。--导入工具类引用localhttp=require('http');localredis=require("redis_utils")localget=http.get;localargs=ngx.req.get_uri_args();localarticleId=args["id"];localarticleKey="REDIS_ARTICLE:"..articleId;localarticleDetail=redis.get(articleKey);ifarticleDetail~=ngx.nullthen  ngx.say("byopenresty:"..articleDetail);  return;end--发送请求localresult=get("/article/query",args);--返回响应ngx.say("byspringboot:"..result);--ngx.say("测试负载均衡-106");
  • 所需E币: 0
    时间: 2023-10-16 16:19
    大小: 2.13KB
    上传者: huangyasir1990
    Qt高级开发视频教程,QT视频教程下载Qt支持下述平台:MS/Windows-95、98、NT4.0、ME、2000、XP、Vista、Win7、win8、win2008、win10Unix/X11-Linux、SunSolaris、HP-UX、CompaqTru64UNIX、IBMAIX、SGIIRIX、FreeBSD、BSD/OS和其它很多X11平台Macintosh-MacOSXEmbedded-有帧缓冲(framebuffer)支持的嵌入式Linux平台,WindowsCE、Symbian、Symbian^3、SymbianAnna、SymbianBelle、MeeGo、haiku-os。前言:Qt是一个跨平台的C++图形界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库以及Windows平台上的MFC、OWL、VCL、ATL是同类型的东西。Qt和智能手机Qt目前支持主流的Android、iOS、WinPhone等智能机操作系统。MeeGo是基于Qt开发的操作系统,由于被诺基亚抛弃了,只剩一代绝版诺基亚N9手机。诺基亚手机部门出售给微软之后,大部分诺基亚手机系统开发人员都被遣散了。原来诺基亚的一部分人成立新的Jolla(卓蓝)公司,发布了MeeGo的衍生版智能手机系统Sailfish(旗鱼),相应的手机和平板也发布开卖了。另一拨人投靠了Tizen(泰泽),Tizen是英特尔和三星力推的智能手机系统,该系统整合了Limo和MeeGo,因为MeeGo系统被诺基亚抛弃,英特尔其实是被出卖了,所以只能联合三星重造智能手机系统Tizen。目前基于Tizen的首款手机三星Z1在印度上市了。在Tizen阵营,国内有中兴、百度涉及了。Qt开源项目里也有QtforTizen版本,有兴趣的可以去搜搜。Qt的优势(熟悉)Qt与各种竞品相比,主要的优势是跨平台特性。跨平台特性指的是:一次编程,到处编译。除此之外,Qt也拥有一些其它竞品的共同优势特点:面向对象开发丰富的API,并配以大量的开发文档易用且开源的开发环境
  • 所需E币: 1
    时间: 2023-7-11 17:33
    大小: 86.3KB
    上传者: 张红川
    QT开发环境的搭建流程.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:33
    大小: 303.15KB
    上传者: 张红川
    QT软件打包方法.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:32
    大小: 277.81KB
    上传者: 张红川
    ubuntu16.04交叉编译Qt程序.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:32
    大小: 1.17MB
    上传者: 张红川
    QT中网络编程2.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:32
    大小: 260.64KB
    上传者: 张红川
    QT网络编程.pdf
  • 所需E币: 2
    时间: 2023-7-7 11:19
    大小: 20.59MB
    上传者: Argent
    《Qt5编程入门》源码
  • 所需E币: 1
    时间: 2023-7-1 20:22
    大小: 26.84MB
    上传者: Argent
    【正点原子】STM32MP1嵌入式Qt开发指南V1.1
  • 所需E币: 1
    时间: 2023-7-1 20:11
    大小: 5.31MB
    上传者: Argent
    【正点原子】STM32MP157出厂系统Qt交叉编译环境搭建V1.1
  • 所需E币: 1
    时间: 2023-4-20 11:36
    大小: 70.58MB
    嵌入式Qt开发项目教程-王浩-陈邦琼-浦灵敏-宋林桂
  • 所需E币: 1
    时间: 2023-4-11 10:52
    大小: 75.21MB
    QtonAndroid核心编程-安晓辉
  • 所需E币: 1
    时间: 2023-4-7 16:28
    大小: 91.86MB
    QtQuick核心编程-安晓辉
  • 所需E币: 1
    时间: 2023-3-14 17:06
    大小: 92.43MB
    上传者: Argent
    QtCreator快速入门_第三版__霍亚飞编著
  • 所需E币: 5
    时间: 2023-2-13 22:21
    大小: 2.38MB
    上传者: czd886
    基于Qt的移动机器人上位机软件设计与实现
  • 所需E币: 5
    时间: 2023-2-8 22:07
    大小: 1MB
    上传者: ZHUANG
    基于QT的网络设备拓扑管理平台设计与实现.
  • 所需E币: 4
    时间: 2022-10-7 21:34
    大小: 919.56KB
    上传者: ZHUANG
    基于QT的无线多路视频监控系统
  • 所需E币: 4
    时间: 2022-10-6 11:07
    大小: 227.28KB
    上传者: ZHUANG
    基于Qt和OpenCV的无线视频监控系统
  • 所需E币: 0
    时间: 2022-7-28 22:14
    大小: 2.11MB
    上传者: ZHUANG
    基于QT和单片机的外卖柜.
  • 所需E币: 0
    时间: 2022-5-12 15:39
    大小: 3.65MB
    上传者: czd886
    基于嵌入式Qt技术的车辆运行状况移动监控终端技术研究