前言


要使用qt设计一款上位机,从保存的数据文件中显示时域、频域图。

QT基本概念及其下载

我参考了C语言中文网。里边有比较全面的QT基本概念以及下载教程。对于版本的选择,用于公司开发的话,比较稳定的5.9和5.12都是可以的。至于长期支持,是指在qt软件出现bug后可以向其报告错误,qt会为你解决这一bug。对于小程序和入门人员来说,并不会涉及到qt都解决不了的bug,所以直接选择稳定版本即可。

QT控件提升

qt本身的控件也就那么几种,例如按钮、文本框之类的。
如果想要比较好的效果,就需要使用控件的提升。这个在MFC中也很常见,基于qt的一个基本控件作为父类,写一个子类用于更高级的操作和显示。
例如在这个项目中,我需要一个显示界面,需要使用基于基础的widget类的的QCustomplot类,具体提升方法有很多文章。demo简单来说便是将.cpp和.h文件加到自己的工程中,同时在.pro工程文件中增加相应支持(这一步很关键)。例如:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

可视化编程

demo中已经详细记录了如何新建一个qt工程,利用.ui文件进行可视化编程,这里不再赘述。
记录遇到的一些问题。

布局技巧

在排版的时候,可以利用先将想要的控件都拖过来,再选中需要排列的控件(ctrl + 左键单击多选),右键进行布局。




当然也可以使用快捷键加速布局。

layout中的控件大小不好调

比如我在布局好的控件中加一个spacer。

这个spacer会随着整个layout(最大的红框)的大小调整而自适应调整,但是如果不希望改变layout的大小的同时改变spacer的大小,需要修改其属性,将其大小改为固定,即可修改其长宽进行自定义大小,同时其他控件会进行自适应调整。

槽函数机制

界面应用程序开发的共同点是,通过点击相应按钮,可以产生相应的信号并插入待处理队列。当执行到某一信号时,会执行对应的函数。在qt中,需要将这些通过处理信号调用的函数定义为槽函数。
例如添加一个定时器并绑定槽函数。

QTimer* timer;
timer = new QTimer();
timer->setInterval(1000);
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeOut()));

在函数声明时,应该这样:

private slots:void onTimeOut();

某则,在timeout()信号发出时,系统将找不到onTimeOut()函数,即使你声明并实现了这一函数。
对于其他按钮点击消息,直接在相应控件上右击并转到槽便可以快速创建槽函数。
另外,槽函数声明之后必须实现,某则会报错。例如我不小心新建了pushButton的click()信号对应的槽函数,之后按ctrl + z撤销了函数的实现。然而并没有自动为我撤销.h文件中对槽函数的声明,这样会报错。

从任意位置读取二进制文件

这一项目是从二进制文件中读取数据并进行回放,文件可能是GB甚至TB级别,不可能全部加载进内存。采用QFile+QDataStream实现。QFile负责加载并创建文件对象,QDataStream负责流式读取二进制数据。

// RecvPrintf_Slots是负责log信息显示的函数
/****************/
// 加载文件
QFile dataFile; // 二进制数据文件
QString filename = QFileDialog::getOpenFileName(this,tr("选择二进制数据文件"),".",tr("文件格式(*.dat)"));
dataFile.setFileName(filename);
if(!dataFile.open(QIODevice::ReadOnly))
{RecvPrintf_Slots("加载文件失败!");return;
}else{RecvPrintf_Slots("文件加载成功!\n");QString str = "当前数据文件为: " + filename + "\n";RecvPrintf_Slots(str);
}
/*******************/
// 读取数据
dataFile.seek(plotStart); // plotStart为qint64类型,设置读取位置,单位为B
QVector<qint16> port_y;
QDataStream aStream(&dataFile); //用文本流读取文件
for(int i = 0; i < 1024; i++){qint16 tmp;// 每次读16bitaStream.readRawData((char*)(&tmp), sizeof(qint16));port_y.append(tmp);
}
/*******************/

qt开发界面程序快速入门总结相关推荐

  1. 树莓派python界面qt_树莓派QT入门教程——使用Qt开发界面程序控制GPIO

    树莓派QT入门教程--使用Qt开发界面程序控制GPIO 玩转树莓派2017-07-12 12:36 树莓派入门教程--使用Qt开发界面程序 前言 Qt是一个1991年由奇趣科技开发的跨平台C++图形用 ...

  2. 视频教程-微信小程序快速入门视频课程-微信开发

    微信小程序快速入门视频课程 北京八维研修学院技术工程师,5年大型项目实战开发经验,3年授课经验. 孟宪杰 ¥168.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 AP ...

  3. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  4. 游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟)

    游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟) 介绍 开发环境 游戏原理 文件结构 详细操作 全部代码 介绍 拓展什么的都没有,真正 ...

  5. 微信小程序快速入门+四个实战小程序(一)——入门准备

    一)系列达成目标介绍 二)小程序创建的准备 1)注册开发者账号 2)下载编译器 ------------------------------------------------------ 一)系列达 ...

  6. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  7. Qt 开发ARM64程序

    Qt 开发ARM64程序 flyfish 编译 CMakelists.txt cmake_minimum_required(VERSION 3.14)project(untitled LANGUAGE ...

  8. DirectShow应用程序快速入门

    作者:suntaoznz 转自:http://blog.csdn.net/suntaoznz/article/details/600493 目录(?)[+] DirectShow应用程序快速入门 摘要 ...

  9. 微信小程序快速入门【一】

    微信小程序快速入门[一] 文章目录 微信小程序快速入门[一]

最新文章

  1. java 魔法王国,游历魔法王国
  2. 推荐系统中基于深度学习的混合协同过滤模型
  3. 使用websploit在局域网全自动渗透
  4. 服务器系统磁盘,服务器系统重装与磁盘阵列
  5. Linux sed命令使用
  6. 前端开发工程师——网易云课堂
  7. SSM中怎样使用JUnit4+spring-test编写单元测试
  8. bzoj2753: [SCOI2012]滑雪与时间胶囊
  9. RNA-Seq分析软件HTSeq的安装
  10. oracle ora 08103,ORA-08103: 对象不再存在
  11. 【转】Go Micro(2)——微服务工具箱
  12. Python智能对话机器人实现
  13. vue中删除表格中的一行记录后,如何让表格更新(性能优化)
  14. MySQL Mac 终端环境变量配置
  15. 江山三侠—Flash短片轻松学(第2季)
  16. 9个优秀的标签云免费生成工具
  17. linux系统触摸板双击,在Ubuntu 18.04系统中搞定触摸板多点触控
  18. 高考数学解题技巧:基本不等式求最值神奇方法-神奇设k法
  19. TransDecoder识别转录本中编码区并预测蛋白
  20. CAD控件 出三维控件!和手机CAD控件了,欢迎大家使用!

热门文章

  1. Android 使用 sqlcipher 加密数据库
  2. 高低电平报警器的设计
  3. TabLayout自定义选择背景滑块
  4. CStdioFile
  5. 有知道深圳艾奕康(以前叫茂尔盛)、新钶信息系统公司、梦网科技的吗?下班后取消放首页...
  6. 2020易支付系统源码
  7. XCode7打开XCode8项目的Storyboard
  8. Mybatis二级缓存的缺陷
  9. OBS 插件推流以及日志模块
  10. 华为网络安全论述题解析(2)