Qt的全面学习笔记【持续更新】
目录大纲
- 序
- 认识Qt
- 学习网站
- 安装Qt
- 构建项目及设置配置
- Qt右击上下文菜单的某些选项之间区别
- 创建主窗口、设置窗口居中、dialog与widget与mainWindow比较
- pro文件
- rc文件
- Qt中加入C文件
- 添加文件
- 多个UI界面的联系
- QML
- qmake
- QSS
- Qt翻译语言家——Linguist
- 为什么main()函数总是有"return a.exec"
- int main(int argc, char *argv[]){}
- include <xxx.h> 与 include "xxx.h" 的区别
- #ifndef XXX_H #define XXX_H .... #endif
- ~MainWindow()
- ~QString()
- setCodecForTr()与setCodecForCStrings() 、setCodecForLocale()
- tr() string和QString乱码的解决
- setText() setPlainText()
- Qt中获取当前路径
- QByteArray
- QWdiget
- QLayout
- QComboBox
- QSpinBox
- QThread
- QMath
- QDebug
- QSettings
- QStandardItem
- QMessageBox
- QPushButton
- 绘图类
- QPainter 及其使用
- QPalette调色板
- const
- virtual
- moc,Q_OBJECT
- emit,signal,slot
- Q_PROPERTY
- Q_UNUSED
- Qsrand与Qrand
- QRectF QRect
- QPoint与QPointF
- QSize
- 数学计算函数
- QFile常用函数及使用
- Dialog
- 容器类
- 在学习STL风格迭代器的两种分类("QMap与QHash")时,要接触的知识点【时间复杂度为主】
- explicit与implicit
- globalPos()与pos()
- TextEdit
- typedef
- qreal
- 键盘事件
- 界面刷新
- 解决乱码
- 线程
- 异常/问题
- “collect 2:error :ld returned 1 exit status”
- 编写串口软件出现的异常
- "munmap_chunk(): invalid pointer"
- "error: ‘tr’ was not declared in this scope"——“tr”未在此作用域中声明
- “: -1: error: 没有规则可以创建“mainwindow.o”需要的目标“../qt_battery/ui_mainwindow.h”
- “Project ERROR: Unknown module(s) in QT: declarative”
- “ error: ‘class Ui::MainWindow’ has no member named ‘timerLabel’ ui->timer ”
- “deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] char *i2c_device = "/dev/stm32_control";”
- “QObject::connect: No such slot QLabel::valueChange2() in ../batteryDisplay/m。。。”(即:“QObject::connect: No such slot Xxx....”)
- "/qopengl.h:140: error: GL/gl.h:没有那个文件或目录"
- "error:forward declaration of class"
- “Project ERROR: Unknown module(s) in QT: opengl”
- “: -1: warning: TARGET is empty”
- "Signal received The inferior stopped because it received a signal from the operatina system."
- "libpng warning: iCCP: known incorrect sRGB profile"
- C:\...\项目名2.0.0.20161005\forms\about.cpp: -1: warning: C4819(编码问题)
- “glibc detected”
- “QT5丢失Qt5Cored.dll”
- error: cast from ‘disp_color*’ to ‘unsigned int’ loses precision [-fperm
- error: '::ioctl' has not been declared
- APPCRASH 故障模块名称: ntdll.dll
- 安装VS时KERNELBASE.dll出故障了
- 快捷键
- Linux中命令
- 自定义控件及其他Qt使用例子
- QProcess
- Java,C++,C某些的比较
- Qt Assistant
- 指针及运算符
- 打包发布
- 全志平台T3
- 按键消抖
- 如何保证代码稳定性
- 架构设计文档
- Qt调度器
- Qt看门狗
- Qt使用运动卡
- Qt5串口收发数据(通信)
- 动态变化的例子
- 挑战
- 随便看看
序
本人会些Java、C++,速成做了Qt前端工程师,但是做项目时遇到很多不懂或问题,想在此分享于大家,也方便自己回顾;若有关于Qt问题,可评论提出,或许能帮些忙;若编写有误,也可评论,我会积极纠正的,提前道声谢谢~
认识Qt
- Qt1
- 1991年由Qt Company(原公司名:奇趣科技)开发的跨平台C++ 图形用户界面(GUI)应用程序开发框架——Qt。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。
Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。 - 1996年进入商业领域,成为全世界范围内数千种成功的应用程序的基础。它也是目前流行的Linux桌面环境(KDE)的基础,KDE是Linux发行版的主要一个标准组件。
- 2008年,奇趣科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。
- 2012年,Qt被Digia(芬兰IT服务公司)收购。
- 2014年,Digia宣布成立“The Qt Company”全资子公司,以进一步推动Qt产品的开发和市场扩张。
- 2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。
学习网站
安装Qt
在Linux时
- Linux操作系统——qtcreator5.8安装教程
- 安装后,我的Qt Creator是4.2.1版,Qt是5.8.0版。
在Windows时
- Win10系统安装Qt5.8.0,不会出现“缺少某dll文件”的问题。
- 打开Qt软件,载入已有项目:
- [提示译文:没有找到这个Qt Creator实例创建的 .user 设置文件。您以前是否在其他机器上使用过这个项目,或者使用过不同的使用路径?您是否仍然要加载设置文件“C:\Userslyanfa\Desktop\DialogDialog.pro.user”?]
- 按No后会跳转到这个窗口,要点击“Configure Project”按钮。
- 注:若刚安装Qt Creator,第一次载入项目最好点No,然后配置环境,到了第二次第三次第N次都可以按Yes,环境可自动配置成Qt5.8.0 MinGW 32bit。
- 若按Yes,直接在“编辑”的“项目框”中出现对应项目。
- 无论是按Yes还是No,最终运行时,构件套件都是Qt5.8.0 MinGW 32bit配置。
- [提示译文:没有找到这个Qt Creator实例创建的 .user 设置文件。您以前是否在其他机器上使用过这个项目,或者使用过不同的使用路径?您是否仍然要加载设置文件“C:\Userslyanfa\Desktop\DialogDialog.pro.user”?]
- Win7系统中安装Qt,也许会出现这样的问题。
- 如何安装Qt 5.8.0 +mingw
- 若你下载了VS2010或VS其他版本的软件,则你需要找上图的“1、”;
- 若没有下载,只想下载Qt Creator,则找上图的“2、”;
- 若找不到5.8.0版,那你不用麻烦了,直接进入下面的文档链接
安装或异常解决方案文档:
链接:https://pan.baidu.com/s/18a7CKGmvMTKwVK6fv7YEfg 提取码:xjjx
找到Qt5.8SetUp文件夹,下载之后,双击安装—》安装时一定要勾选Tools的MinGW选择(默认不勾选),否则后面项目运行会报错—》安装时,可能会弹出警告
- 可以看:计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll的疑难杂症解决方法、 Win7中出错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll、 因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll”问题的解决办法(无法定位程序输入点 xxx于动态链接库 api-ms-win-crt-runtime-l1-1-0.dll上:这篇是真正解决我问题的文章;安装64位的Qt,弹出警告“无法定位程序输入点ucrtbase.abort于动态链接库api-ms-win-crt-runtime-11-1-0.dll”,我就安装dll补丁,安装失败,接着安装Service Pack1之后安装补丁,成功了!)】】
- 插曲:所谓的报错:【Error while building/deploying project movie (kit: Desktop Qt 5.8.0 MSVC2015…】
-
Cannot find file: E:\Qt程序\day.pro. When executing step "qmake"的问题
-
Qt Creator 报错:Error while building/deploying project helloworld (kit: Desktop Qt 5.6.2 MinGW 32bit) When executing step “qmake”【当我安装Qt5.8.0时未勾选Tools的MinGW环境配置,当我项目运行时,就会报这样的异常(当时环境配置是Qt默认环境),我使用过文章的“方法一”,似乎也不奏效,可能问题源头是“未配置MinGW”】
OrQt学习一: Qt 在 win7 的安装和环境配置【图的“1、”是方案二,图的“2、”是方案一】
QT5.8.0+MSVC2015安装以及环境配置(不需要安装VS2015)【简单粗暴的讲解,当时只觉得唯有这个是有用的信息:跳转Qt官方Qt5.8.0版本的软件下载链接】 -
[下面俩文章,我暂时未用过]
QT creator 5.8.0/5.9+opencv2.4.13.6安装与配置方法
QT5.12安装图文教程与安装成功后环境配置详细教程
32位系统与x86系统关系
参考:
32位系统为什么又叫x86系统呢?
Any CPU X86 X64区别
构建项目及设置配置
Qt右击上下文菜单的某些选项之间区别
创建主窗口、设置窗口居中、dialog与widget与mainWindow比较
- Qt MainWindow 程序主窗口
- Qt 设置窗口居中显示和窗体大小
- 07_Qt的三大窗口dialog、widget、mainwindow
- 讲解MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
- QT基础:33—QT的窗体类以及窗体设置函数
设置QLabel文本居中
QLineEdit、QLabel的字体、大小、颜色
//设置输入文本框的文本为Timers格式字体、20大小、粗体
ui->lineEditText->setFont(QFont("Timers",20,QFont::Bold));
Or
QLineEdit *lineEdit;
lineEdit->setFont(QFont("Timers",20,QFont::Bold));
//设置"无效的角度值!"字符串为Timers字体格式、9大小、红色的粗体
QPalette palette;
palette.setColor(QPalette::WindowText,Qt::red);//QLineEdit以及QLabel的文本颜色就用QPalette::WindowText
ui->lab->setText("无效的角度值!");
ui->lab->setFont(QFont("Timers",9,QFont::Bold));
ui->lab->setPalette(palette);
Or
QLabel *label;
label->setText("无效的角度值!");
label->setFont(QFont("Timers",9,QFont::Bold));//第一个参数设置字体格式,第二个参数设置字体大小,第三个参数设置字体粗体
label->setPalette(palette);
另一种:
QString Setting =tr("Language");
ui->label->setText(Setting);
Font.setPointSize(20);//设置字体大小
ui->label->setFont(Font);
Palette.setColor(QPalette::WindowText,Qt::white);//字体是白色的
ui->label->setPalette(Palette);
LineEdit的监视器
- 再谈Qt Focus事件【安装EventFilter过滤器,起到了“监视离开文本框的焦点Focus的控制”作用,成功了】
//在构造函数中,set ui LineEdit filter过滤器
ui->lineEdit->installEventFilter(this);
-------------------------------------------------
#include <QKeyEvent>
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == ui->lineEdit)//首先判断控件(这里指 lineEdit)【判断是否是被事件过滤器过滤的对象】
{
if (event->type() == QEvent::FocusOut)// 这里指 lineEdit 控件的失去焦点事件
{
lEdit = ui->lineEdit->text();
if("" != lEdit.trimmed())
{
......
}
else if("" == lEdit.trimmed())
{
ui->lineEdit>setText("0");
}
}
//该if语句,可忽略,作用:按了回车键,会做出指定反应
if (event->type() == QEvent::KeyPress)
{
QKeyEvent * keyEvent = static_cast<QKeyEvent*>(event);
if(keyEvent->key() == Qt::Key_Return)//更改文本框内的值,按“Enter”键执行位置模式指令
{
int count;
double angle;
......
}
}
}
}
pro文件
- pro = project
- 当你打开一个Qt程序,必定要选择“打开xxx.pro文件”
- QT pro文件详细写法+实例
- QT中PRO文件写法的详细介绍,很有用,很重要!
- QT pro文件详解
pri文件
- Qt中 .pro 文件和 .pri 文件简介
- pri = “pro + include”;
- 可以把 ×.pro 文件内的一部分内容单独放到一个 ×.pri 文件内,然后include到×.pro 文件中
- 如:将×.pro 文件用上的"configure function build"分类,独立出分别放入configure.pri、function.pri、build.pri,接着在×.pro 文件中include即可
include( $${PWD}/../../。。。/examples/examples.pri )
PS:若多个pri文件,最好集成于一个example.pri中,而在pro文件中,include的example.pri即可(include括号里的路径中不能出现回车符或者空格,否则系统找不到对应的文件)
rc文件
Qt中加入C文件
- Qt 调用 C语言函数的一种解决方案 C++ 调用 C 语言函数、在Qt程序中加入C文件【用这个方法成功】
- QT初体验c语言嵌套使用、 初学Qt之–在Qt中调用外部C语言模块【用Qprocess包含、运行C文件】
- qt中引用c/c++文件
Linux中的Qt软件:
1.将xxx.c拷贝到项目中(若有src文件夹,可放入其中)
2.如图所示,在Qt项目的源文件上鼠标右键,弹出“添加现有文件”
3.弹出“文件管理器”,选中项目目录下对应的xxx.c,再点击Open按钮即可
4.然后xxx.c导入成功了,如图所示,但这还不算结束
xxx.c大概内容:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdint.h>
#include <unistd.h>
typedef uint8_t __u8;
typedef int32_t __s32;
typedef uint16_t __u16;
......
struct ixxta {
char read_write;
__u8 command;
int size;
union ixta *data;
};
......
void xxxge(char *file)
{
printf("%s ... r addr\n",file);
printf("%s ... w addr val\n",file);
}
......
int ixxxta()
{
const char *v = "ixxx-0";
const char *v1 = "0x34";
const char *v2 = "0xB9";
......
return 1;
}
5.要建同名的xxx.h,在里面定义xxx.c中声明了的函数,如图所示:
xxx.h大概内容:
typedef uint8_t __u8;
typedef int32_t __s32;
typedef uint16_t __u16;
extern "C"
{
void xxxge(char *file);
......
int ixxxta();
}
6.最后,若在xxx类(如:mainWindow)中要调用,可直接include,然后在xxx.cpp(如:mainWindow.cpp),可以根据个人想法直接调用“xxxge”、“ixxxta”等函数
cpp文件改c文件
- 将CPP文件移植成C文件方法和注意的问题【将cpp文件的写法改成c文件的写法,较繁琐】
添加文件
添加资源,在资源里添加并使用图片
- QT creator:创建和添加资源resource【创建资源文件】
- Qt中为工程添加资源文件、给按钮添加图片【只是大概讲解‘添加资源文件’,但主要是给按钮添加图片】
qrc文件
- Qt5之qrc资源文件【创建qrc文件】
- Qt中的qrc文件【讲解分析】
在已有的项目中分别添加头文件、源文件 与 使用.h文件
多个UI界面的联系
QML
- QT安装QML环境配置与QML学习指南【Linux、Windows的项目配置QML环境的指导指南】
qmlscene、qmlviewer
- qmlscene与qmlviewer【qmlscene是Qt5以上版本使用的查看QML文件效果的工具,qmlviewer是Qt4的QML查看器】
qmake
- Linux环境下:若将Qt项目放入开发板中,则要在终端输入指令生成exec文件,用得上:qmake、make clean、make这三个指令
- 【qmake常用语法】(看不出与qmake有关)
qmake手册——qmake语言
Qt编程中qmake的使用详解
linux和windows中命令行编译qt程序步骤
Windows,linux下编译qt源码(比较简单)
与Cmake、Qbs 区别
为什么会这么问,在创建Qt Quick项目的时候遇到了,心有疑惑则需立即解答:
- Qt 编译方式之 qbs
- 浅谈Qt的编译方式:qmake/cmake/qbs及qbs被弃用的原因【使用Cmake是一种趋势】
- Qt之QMake编译转换为CMake编译
- Qmake VS Cmake【简单的项目可以用qmake,复杂度高的建议使用Cmake】
- make makefile cmake qmake都是什么,有什么区别?
Cmake搭配编译器
可以是MSVC2015/2017的,但可能出现“感叹号”,所以可改用MinGW编译器
推荐Qt转Cmake工具
QSS
推荐QSS Editor辅助工具
Qt翻译语言家——Linguist
推荐翻译工具digital translate
为什么main()函数总是有"return a.exec"
- 关于qt的主程序调用exec()
- a.exec()的作用,该怎么解决
[译文: 第一行:进入主事件循环并等待,直到调用exit()。返回设置为exit()的值(如果通过quit()调用exit(),则返回0)。
第二行:需要调用此函数来启动事件处理。主事件循环从窗口系统接收事件,并将这些事件分派给应用程序小部件。
第三行:要使应用程序执行空闲处理(即在没有挂起事件时执行特殊函数),请使用超时为0的QTimer。使用processEvents()可以实现更高级的空闲处理方案。
第四行:我们建议您将清理代码连接到aboutToQuit()信号,而不是将其放在应用程序的main()函数中,因为在某些平台上,QCoreApplication::exec()调用可能不会返回。例如,在Windows上,当用户注销时,系统在Qt关闭所有顶级窗口后终止进程。因此,在QCoreApplication::exec()调用之后,不能保证应用程序有时间退出事件循环并在main()函数结束时执行代码
"引用"栏的译文: 汇编代码:
进入主事件循环并等待,直到调用exit()。返回设置为exit()的值(如果通过quit()调用exit(),则返回0)。
有必要把这个函数称为…] - Qt exec()做了什么
- qt: exec()的用法,accept()和accepted的概念
myDlg.exec()==QDialog::Accepted
- my1.exec()==QDialog::Accepted
- exec():显示模式对话框【不关闭此对话框,不能执行别的操作】
- my1是一个对话框或下拉框,当调用exec方法时,弹出‘框’,等待用户响应,用户可能点击确定或选择xxx项,那么exec返回QDialog::Accepted值(int类型),如果点击取消或不选择点击框外范围,则返回QDialog::Rejected(int类型)
- 这句话是通过返回值来确定用户的响应结果。
- 一般作为if语句的条件
模态与非模态的区别
模态对话框
- 模态窗体一般指:在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
非模态对话框
- 非模态窗体是指:当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。
show()与exec()的区别
show()
- 可以显示非模式也可以显示模式对话框。
- 当设置modal为true时,显示模式对话框;若false(默认值)则显示非模式。
MyDialog myDlg;
myDlg.setModal(true); myDlg.show();//模态
myDlg.setModal(false);或者myDlg.setModal(); myDlg.show();//非模态
exec()
- 显示模式对话框。
myDlg.exec();
同中不同:模式对话框的显示不同
- show()
- 显示的模态对话框并非真正意义上的模态,虽然在对话框弹出的时候,程序的其它操作(按钮、窗口切换等)都失效了;但是程序仍然在调用对话框之后,继续执行后面的代码。但这样,就不会得到窗口的返回值。
- exec()
- 在调用之后,程序就被锁定在原地。等待窗口的关闭。
顺便提下:C语言的main函数为什么要返回0?
int main(int argc, char *argv[]){}
- main函数参数argc,argv说明
- argc 是指命令行输入参数的个数(以空白符分隔) ;
argv存储了所有的命令行参数。
include <xxx.h> 与 include “xxx.h” 的区别
#ifndef XXX_H #define XXX_H … #endif
之间的关系与区别
#ifndef 本文件的头文件名全大写XXX_H
#define 本文件的头文件名全大写XXX_H
........某内容.......
#endif
延伸
#ifdef…#else…#endif与#ifndef…#else…#endif
- #if #ifdef #ifndef #elif #else #endif的用法【#ifdef、#ifndef、#if使用实例】
- c++ #ifndef#define#endif的用法(整理) 【以上提到的#指令与if判断的使用整理】
#if defined…#endif
#if…#elif…#else…#endif与if…else if…else
- 【C基础】#if、if、#ifdef、#if defined之间的区别【含#if 与if #ifdef的区别以及宏的几种用法大多内容】
- C语言条件编译(#if,#ifdef,#ifndef,#endif,#else,#elif)
- #if、#elif、#else 和 #endif 指令详解 (C/C++)【后面有时间看看,感觉多余】
- 使用多个if和使用if else if的区别【效率上的比较】
- if else用法详解,C语言if else用法完全攻略【用法攻略,可忽略】
区别
\ | #if | if |
---|---|---|
名称 | 条件编译 | 条件语句 |
介绍 | 是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分 | 是 C 语言中的关键字,它根据表达式的计算结果来觉定执行那个语句,它里面的每个分支都编译了的 |
简单说 | 根据 宏条件 选择性地编译语句,它是编译器在编译代码时完成的 | 根据条件表达式选择性地执行语句,它是在程序运行时进行的 |
代码 | qb-01区代码 | qb-02区代码 |
意思 | 如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译 | 做A条件判断 |
什么时候用 | 如果你的条件在程序编译前就已经确定了,那就用#if | 如果条件需要在程序运行过程中才能判断,则用if |
qb-01:
#define A 0 //把A定义为0
#if (A > 1)
printf("A > 1"); //编译器没有编译该语句,该语句不生成汇编代码
#elif (A == 1)
printf("A == 1"); //编译器没有编译该语句,该语句不生成汇编代码
#else
printf("A < 1"); //编译器编译了这段代码,且生成了汇编代码,执行该语句
#endif
qb-02:
#define A 0
if (A > 1)
printf("A > 1"); //编译器编译该语句,但因为A == 0 未执行
else if(A == 1)
printf("A == 1"); //编译器编译该语句,但因为A == 0 未执行
else
printf("A < 1"); //编译器编译该语句,因为A == 0 故执行
~MainWindow()
- Qt程序报error: undefined reference to `MainWindow::~MainWindow()’
- 析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。
- 构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号。
- 函数名是标识符的一种,原则上标识符的命名中不允许出现~符号,在析构函数的名字中出现的~可以认为是一种特殊情况,目的是为了和构造函数的名字加以对比和区分。
- 析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。
- 析构函数里的delete,销毁组件、部件缓存,减少内存或释放内存,防止内存泄漏。
~QString()
- QString类
- QString::~QString ()
- 表示:销毁这个字符串并且如果这是 这个字符串 的最后一个复制,就释放“真实的”字符串。
QString
QString::replace()
- 原型: 常用:QString &replace(int i, int len, const QString &after);
- 头文件:qstring.h
- 说明:第一个参数:字符下标,从0开始;第二个参数:替换字符串长度;第三个参数:替换成xxx字符串,&after就是xxx。函数表示:替换 i下标往后len个字符的位置为xxx字符串。
- 注:除了这个函数,还有几个“重载”函数,如图所示:
参考:C++ string中的replace函数详解
QByteArray::replace()
- 头文件:qstring.h
- 常用的话,可能是第一个replace函数,如图所示:
- 我调用QByteArray的replace(),出现了些许问题:
- 分析:
- 很明显,该replace()是QString::replace(int i, int len, QChar after),不是QByteArray::replace();
- 并且直接赋字符值,系统会把它识别成char类型,而不是QChar类型;
- 但是,报错中表示:replace()函数第三个参数是char类型,且不能将char直接赋值于char,
- 我就懵了,不是QString::replace(int i, int len, QChar after);难道是QString::replace(int i, int len, const QChar *s, int slen);或者QString::replace(int i, int len, const QString &after); ???
- 解决:
- QByteArray本来就是字节数组,可以对某个字符或者某下标的数组进行更改,所以根本就不需要QByteArray::replace(),而是直接:
- 分析:
int value = 4;//二进制为0100
QString convertedValue = QString("%1").arg(value,4,2,QLatin1Char('0')).toUpper();
QByteArray ba = convertedValue.toLatin1();
ba[2] = 1;//ba == 0110;
QString::number()
- 原型: 常用:
static QString number(int value, int base=10);
【若base值未赋值,默认为10】 - 说明:十进制整型value值转成十进制字符串
可以用于“int类型转成QString类型”
int val = 6;
QString str = QString::number(val);
错误:QString str = new QString() 或 new QString 或 new QString("43");
否则,报错:"错误:从'QString*'转换为请求的非标量类型'QString'"
正确:QString str = "";或QString str;
非标量与标量类型
参考:
《SQL与关系数据库理论——如何编写健壮的SQL代码》一一2.5 标量类型vs.非标量类型
错误:转换为非标量类型(Error: Conversion to non-scalar type)
错误:从“基本类型”转换为请求的非标量类型“NamedType <基本类型>”
共用体 结构体 枚举的特点与区别
QString::at ( uint i )
- 原型:QChar QString::at ( uint i ) const
- 返回在索引i处的字符,或者如果i超过字符串的长度返回0。
const QString string( "abcdefgh" );
QChar ch = string.at( 4 );// 打印ch == 'e'
QString str = "After finishing the homework,she does her housework~";
qDebug() << "str[2] = " << str.at(2);//打印:str[2] = 't'
QString::arg()
1.
QString m = tr("%1:%2:%3").arg("12").arg("60").arg("60");
//结果是m = "12:60:60"
2.
QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char( ' ' )) const
[在QString头文件:inline QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const]
分析:
第一个参数是要填充的数字(一定是十进制,若二进制数值传入,也会被认为是"十进制"数值),
第二个参数为最小宽度,
第三个参数为进制,
第四个参数为当原始数字长度不足最小宽度时用于填充的字符
如:
QString text = QString("%1:%2")
.arg(123, 5, 10, QChar('0'))
.arg(456, 5, 10, QChar('0'));
//结果是text = "00123:00456"
从QString头文件看出:一个arg()函数最多实现九个参数;
若一定要实现九个以上的参数值呢,可以这样:
QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11")
.arg("1","2","3","4","w","6","7","8","9").arg("a","b");
//结果是:"1 2 3 4 5 6 7 8 9 a b"
16进制转2进制
QString的isEmpty与isNull
- QString的isEmpty与isNull区别
- Qt: QString::isEmpty()与QString::isNull()区别
- isEmpty()如果字符串没有字符,则返回true;否则返回false。
- isNull() 如果字符串是无效的,则返回true;否则返回false。
- 区别:
(1)由于历史原因,Qt对无效字符串和空字符串进行了区分。对于大多数应用程序,重要的是字符串是否包含任何数据,这可以使用isEmpty()函数来确定;
(2)无效的字符串指的是QString没有初始化,这也是isEmpty与isNull的区别;
(3)无论QString有没有初始化,QString()与QString(“”)的isEmpty都为真,而QString()的会被判定为无效字符串。
isEmpty与isNull的基本区别
QString().isEmpty(); // returns true
QString("").isEmpty(); // returns true
QString("x").isEmpty(); // returns false
QString("abc").isEmpty(); // returns false
QString().isNull(); // returns true
QString("").isNull(); // returns false
QString("abc").isNull(); // returns false
toInt()
- Qt十六进制转十进制转ASCII码,附ASCII码表
- 原型:int toInt(bool *ok=Q_NULLPTR, int base=10) const;
- 如:toInt(0,16)
- 表示:十六进制转十进制的函数
- 表示:十六进制转十进制的函数
QString str1("F");
int i1 = str1.toInt(0,16);
qDebug() << i1 << " = i1~~~";
std::string与QString
如:
int data = 123;
QString convertedValue = QString("%1").arg(data,16,2,QLatin1Char('0')).toUpper();
//arg()函数在上面已说明,int类型的data转QString类型,而toUpper()函数:把小写字母转换为大写字母。
QByteArray ba = convertedValue.toLatin1();//将QString转QByteArray类型
ba[15] = '1';//可以直接更改QByteArray某index的字符
std::string str = ba.toStdString();
//QByteArray的toStdString()专门从QByteArray转成std::string类型
/* 该语句就是你们要找的!!! */
QString convertedValue1 = QString::fromStdString(str);
//利用QString的fromStdString函数,将std::string类型转成QString类型
或者
QString qstr = QString::number(123);//int类型的数据转QString类型
string s = qstr.toStdString();//除了QByteArray有toStdString(),QString也有
QString qstr2 = QString::fromStdString(s);//将std::string类型转成QString类型
延伸
atoi()和itoa()
- atoi()和itoa()函数详解以及C语言实现
- 各类数字与字符串转换的标准库函数【存在些许问题,但是函数的意义是可信的】
- C语言 atoi()和itoa()函数 整数与字符串的相互转换
atoi()
- atoi函数 字符串转数字,数字转字符串C函数
- C语言 字符串和数字转换函数
- 原型:int atoi(const char *str );
- 所属头文件:stdlib.h【Windows系统的Qt才有,不是一个标准的c函数】
- 作用:把字符串转换成整型数。
- 说明:参数str:指 要进行转换的字符串。
stoi()
参考:
该函数,在 进制间的转换 方面中,起到很大作用:
C++中二进制、字符串、十六进制、十进制之间的转换
【c++ 二进制字符串转成10进制数】
itoa()
- Linux编程:11 itoa函数未定义标识符
- C错误:对’_itoa’的未定义引用
- 原型:char *itoa( int或者long value, char *string,int radix);
- 所属头文件:stdlib.h【Windows系统的Qt才有,不是一个标准的c函数】
- 作用:将整数value 转换成字符串存入string 指向的内存空间 ,radix 为转换时所用基数(保存到字符串中的数据的进制基数)。
- 说明:value:要转换的数据。string:目标字符串的地址。radix:转换后的进制数,可以是10进制、16进制等,范围必须在 2-36。
setCodecForTr()与setCodecForCStrings() 、setCodecForLocale()
函数 | 描述 |
---|---|
QTextCodec::setCodecForCStrings(textc) | 主要用在用字符常量或者QByteArray构造QString对象时使用的默认编码方式。 |
QTextCodec::setCodecForTr(textc) | 这个函数的作用是设置传给tr函数时的默认字串编码。 |
QTextCodec::setCodecForLocale(textc) | 这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。 |
tr() string和QString乱码的解决
QString拼接数值或字符串
- qt QString 字符串的拼接,支持变量拼接的方法【使用QString::arg()函数】
- QString拼接【拼接的四种方式,其中,‘+’操作符只能用于组合拼接字符串,若组合字符串与数值的话用sprintf()函数或者另外两个函数】
- QT开发(二十七)——QT常用类(一)【提到QString的拼接函数】
setText() setPlainText()
Qt中获取当前路径
- Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法【QString QCoreApplication::applicationDirPath():获取程序当前运行目录】
QByteArray
- Qt学习笔记:QByteArray Class
- QByteArray详解
- QByteArray_Qt文档
- (Qt)深受QByteArray的陷害
- 关于QByteArray用法的小总结
- QByteArray使用方法举例
- Qt中16进制数据的QByteArray与QString的转换
- QByteArray在Qt5.9中的赋值和显示以及存储形式(toHex()函数)
- (C#基础) byte[] 之初始化, 赋值,转换。
- QByteArray简单入门
QString convertedValue = QString("%1").arg(data,16,2,QLatin1Char('0')).toUpper();
//arg()函数在上面已说明,int类型的data转QString类型,而toUpper()函数:把小写字母转换为大写字母。
QByteArray ba = convertedValue.toLatin1();//将QString转QByteArray类型
ba[15] = '1';//可以直接更改QByteArray某index的字符
std::string str = ba.toStdString();
//QByteArray的toStdString()专门从QByteArray转成std::string类型
QWdiget
QWidget *parent = 0
- qt QWidget *parent = 0
- 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话
- Qwidget详解
- 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话
- MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)的理解
- MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)解析
- 表示某控件不是任何控件的子控件;
- 参数 parent 指向父窗口,如果这个参数为 0,则窗口就成为一个顶级窗口。
setStyleSheet(“QLabel{border:5px solid rgb (0x00,0xff,0x00,0x00);}”)
- QWidget背景(透明)问题【译为简体版:Qt 的一些心得】
- (转载)Qt5.9中setStyleSheet设置图形界面详细用法
- Qt 之 样式表的使用——设置样式的方法
- QT基础:63—Qt样式表(setStyleSheet函数、.qss文件)
- QSS-qt样式表
QWidget *m_statusInd = new QWidget;
m_statusInd->setFixedSize( 16, 16 );
m_statusInd->setStyleSheet("background-color: red");
//使用部件Widget的setStyleSheet函数
Qt::FocusPolicy
- Qt::FocusPolicy的使用
- Qt.FocusPolicy
- QWidget的setFocusPolicy的注意事项
- 原型:
void setFocusPolicy(Qt::FocusPolicy policy);
- 有五种属性:
- 原型:
属性 | 表示的十六进制 | 描述 |
---|---|---|
Qt::TabFocus | 0x1 | 接受Tab键焦点 |
Qt::ClickFocus | 0x2 | 接受鼠标单击做焦点 |
Qt::StrongFocus | TabFocus or ClickFocus or 0x8 | 接受Tab键和鼠标单击做焦点 |
Qt::WheelFocus | StrongFocus or 0x4 | 滑轮作为焦点选中事件 |
Qt::NoFocus | 0 | 不接受焦点 |
#include <QLineEdit>//若头文件没有继承QWidget,就要加上这个
QLineEdit *edit = new QLineEdit;
edit->setFocusPolicy(Qt::StrongFocus);//默认使用Qt::StrongFocus属性
设置标题栏与图标
this->setWindowTitle("Qt系统");
this->setWindowIcon(QIcon(":/img/logo.png"));
QListWidget
QLayout
addLayout与addWidget
- QT布局之addWidget和addLayout(widget基类)【QWidget的addWidget()】
- Qt中QLayout.addWidget()参数结构及用法【QLayout的addWidget()】
- QT 布局时使用 addStretch 可伸缩设置
- Qt 布局设置stretch,不起作用解决方法
- Qt addStretch()
- addLayout()方法用于向布局中添加子布局。
- addWidget()方法用于向布局中添加控件。
注:因qstatusbar头文件继承了"QWidget"类,则截图的addWidget函数是QWidget类的【但QWidget类头文件里并没有addLayout()及addWidget()两函数】;该头文件定义的addWidget函数只有两个参数,其中stretch参数与addStretch()函数效果一样,在m_statusText控件与m_statusInd控件之间空开(间距)10像素。 - addStretch()方法用于某控件前面平均分配间距(即空白,类似段落前的间距)。
layout布局
QComboBox
- Pyqt5_QComboBox【与Qt5_QComboBox差不多】
addItem()
- 原型:常用:
inline void addItem(const QString &text, const QVariant &userData = QVariant());
- 说明:添加一个下拉选项
- 说明:添加一个下拉选项
for(int i=0; i<8; i++)
ui->cmbCode->addItem(QString::number(i));
QSpinBox
- Qt 之 QSpinBox 和 QDoubleSpinBox
- QSpinBox旨在处理整数和离散值(例如:月份名称)。如图所示:图-1
- QDoubleSpinBox则用于处理浮点值。如图所示:图-2
- 他们之间的区别就是处理数据的类型不同,其他功能都基本相同。
图-1
图-2
setEnabled()
- 原型:
void setEnabled(bool);
- 所在文件:qwidget.h
- 这个"选值框"是否启用setEnabled():
- 设置成true时,相当于激活了框,框的状态不再是死的,而是会对触摸或者点击产生反应,并且可以响应一些触发事件。
- 而设置成false时,框呈灰色的,无论是否可点击(即使将setClickable()设置成true),都无法响应任何触发事件。如图所示:图-1
图-1
QThread
sleep()
Windows下
- Qt中如何使用Sleep函数
- QThread::sleep(10);参数的单位为秒
- Sleep(15000);参数的单位为毫秒
#include <QDebug> //qDebug()要求的
#include <QTimer> //QTimer要求的
#include <synchapi.h> //Sleep()要求的
QTimer *ti = new QTimer(this);
ti->start(1000);
qDebug() << "Start to sleep 10 seconds~~";
QThread::sleep(10);
qDebug() << "End to sleep 10 seconds But start to Sleep 15 seconds~~";
Sleep(15000);
qDebug() << "End to Sleep 15 seconds~~";
Linux下
QMath
pow()
- C++中pow()函数
- 【C/C++】 二进制字符串 转 十进制整型
- 原型:
double pow( double x, double y );
- 描述:计算x的y次幂
- 头文件:#include “math.h”
- 原型:
运用:
二进制字符串转为十进制数值
QString val = "0000000010001100";
QByteArray ba = val.toLatin1();
int nVal = 0;
for(int i = 15;i>=0;i--)
{
if(ba[i] == '1')
{
int t = 15-i;
nVal += pow(2, t);//2的t次幂
}
}
QDebug
- qDebug用法总结
- qDebug 的使用
- qDebug的用法
- 经常用到:重定向操作符(<<)
- 头文件:#include “qdebug.h” 或者 #include <QtDebug> 或者#include <QDebug>[因为编辑器原因,将英文半角尖括号符号用了全角的尖括号]
QString chin = "中文繁体";
qDebug() << chin.toStdString().c_str();
char da = 'a';
qDebug("%04x",da);
qDebug()<< "MainWindow : Init Completed ";
qDebug() << "Hello" << 123;
qDebug() << QString("Hello") << QPoint(10, 10);
int num = 20;
char str[20]="hello world";
qDebug("如果只写在括号里,是不需要QDebug头文件的 %d %s", num, str);
QSettings
- QSettings使用二(普通ini文件的读写:实际操作)
- QSettings 类
- QSettings 自定义格式
- Qt配置信息设置(QSettings在不同平台下的使用路径)
- QSettings 用法总结(很好用)
- QT QSettings 操作(导入导出、保存获取信息)*.ini文件详解
- QSettings配置读写-win注册表操作-ini文件读写
- 所属文件:#include <QSettings>
QSettings st = new QSettings("qModMaster.ini",QSettings::IniFormat);
//IniFormat存储格式:'读写配置ini文件'可以储存一些系列配置,即将设置存储在INI文件中。
QStandardItem
- QStandardItem_Qt文档
- QRowTable表格控件(三)-效率优化之-合理使用QStandardItem
- 是一个数据结构,它可以存储一个cell单元格的各种信息,比如文本、图标、是否可选、字体、别景色、前景色等等。并且QStandardItem可以有孩子和兄弟,它是为model提供数据存储的节点。
- 使用该类:#include “qstandarditemmodel.h” 或者 #include <QStandardItem>
- 可能用上的
void setEditable(bool editable);
- 说明:若editable为true,设置表格某列的某项可编辑,若为false,则不可编辑。
QAbstractItemModel
- QAbstractItemModel_Qt文档
- QT开发(三十八)——Model/View框架编程
- Qt浅谈之十九:Model/View实现表格和统计图【相当于QtCreator工具书的View章节】
- Qt5模型/视图结构-视图(View)
QStandardItemModel
- Qt QStandardItemModel用法(超级详细)
- QListView,QTreeView和 QStandardItemModel的简单使用
- 【QT】模型与视图,QStandardItemModel and QTreeView
- Qt 常用类——QStandardItemModel
- 是标准的基于项数据的数据模型,以类似于二维数组的形式管理内部数据,适合于处理表格型数据,其显示一般采用 QTableView。
- 是标准的以项数据(item data)为基础的标准数据模型类,通常与 QTableView 组合成 Model/View 结构,实现通用的二维数据的管理功能。
- 使用该类:#include “qstandarditemmodel.h” 或者 #include <QStandardItem>
- 为什么QStandardItemModel和QStandardItem,引入同样的头文件?
- 因为在qstandarditemmodel.h头文件中,定义声明了“class QStandardItemModel”、“class Q_GUI_EXPORT QStandardItem”。
- 继承了QAbstractItemModel类
- 构造函数原型:
QStandardItemModel(int rows, int columns, QObject *parent = Q_NULLPTR);
- 说明:声明数据模型(表格)有rows+1(说明row是某行的下标)行、columns列,基类是Q_NULLPTR2。
- 注:Q_NULLPTR表示该类(此处指QStandardItemModel)不作为顶层容器。
- 可能用上的
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- 说明:取下标为row的行及第column+1列的QModelIndex()父类类型的值作为index索引值。
- 可能用上的
void setItem(int row, int column, QStandardItem *item);
- 说明:row与column从0开始,设置row+1这么多行column+1这么多列的项(一项项组合起来成一个表格)。
//在头文件的类外定义声明
static const int AddressColumn=0;
static const int ValueColumn=1;
//在cpp中的类的函数中定义声明
int m_startAddress = 2;//设置开始的索引号从2开始
int m_noOfItems = 4;//读取指定表格的两列四行(或者指四项[是"键-值"————“addressItem-valueItem”的形式])
for (int row = 0; row < m_noOfItems ; row++)
{
//将int类型转QString类型赋值于QStandardItem的addressItem变量
QStandardItem *addressItem = new QStandardItem(QString::number(m_startAddress+row));
model->setItem(row, AddressColumn, addressItem);//设置addressItem放在 row从0开始遍历的对应行 及 索引号为0的列 中(即,addressItem放在每行的第一列)
addressItem->setEditable(false);//设置addressItem项不可编辑,不可双击或点击触发编辑事件
QStandardItem *valueItem = new QStandardItem("-");//设置valueItem的值为字符"-"
model->setItem(row, ValueColumn, valueItem);//让valueItem放在每行的第二列
//valueItem->setEditable(valueIsEditable);//若为false,调用这个函数的控件不能被编辑,如果设为true或者不调用这个函数,则控件可以编辑。
}
延伸:C++11中可使用nullptr替代Q_NULLPTR
- nullptr3表示对象句柄、内部指针或本机指针类型不指向对象(即,空指针)。nullptr空指针常数可以转换为任意类型的指针类型。
- 如图所示:(Windows的Qt中找到的)
区别
- 宏Q_NULLPTR向读代码的人说明了意图,而nullptr向编译器说明意图。Q_NULLPTR没有提供类型安全,仅仅是“装饰”作用的。若软件兼容或支持C++11,宏Q_NULLPTR会自动扩展为nullptr。如果编译器不支持c++11,它将被替换为NULL(被替换为0)。
- 什么时候用Q_NULLPTR?【
Johannes Matokic解答的译文:实际上Q_NULLPTR只有一个目的:允许使用nullptr而不丧失对不支持c++ 11/ c++ 0x的编译器的支持,因为直接使用nullptr会导致这种设置中的错误。其不利之处在于,与nullptr相比,回退到NULL(或旧Qt版本中的0)可能会导致意外的运行时行为,并限制所支持的用例。在极少数情况下,你的目标是不兼容c++ 11的编译器,使用Q_NULLPTR,但是要确保在禁用c++ 11特性时代码能够正常工作。在所有其他情况下,nullptr是更好的选择,因为它会导致编译错误,而不是与遗留编译器一起使用时出现错误的运行时行为。Qt 5.7,后来取消了编译不使用c++ 11的支持,所以如果依赖于这些版本,就不需要Q_NULLPTR。还有其他一些特性,如qMove或Q_DECL_OVERRIDE,它们在支持编译器时提供了更好的语义,而不会破坏旧编译器上的编译。
Martin Hennings解答的译文:使用Q_NULLPTR来保持编译器的独立性。如果您现在决定使用nullptr,那么您的代码将无法使用较旧的c++98编译器进行编译。如果决定使用NULL,就会失去c++11类型安全性,即使在当前编译器中可用。出于同样的原因,存在qMove(x)等宏以及相应的定义Q_COMPILER_RVALUE_REFS。】
- 什么时候用Q_NULLPTR?【
setData()
- 项目中经常使用该函数,在qstandarditemmodel.h中:
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- 将项目在索引index处的角色role数据设置为值value。
- 如果成功返回true;否则返回false。
- 如果数据设置成功,则应该发出dataChanged()信号。
- 基类实现返回false。这个函数和data()必须为可编辑的模型重新实现
static const int ValueColumn=1;//在头文件的类外定义声明
//在cpp中的类的函数中定义声明
QStandardItemModel *model = new QStandardItemModel(0,2,this);
//以代码所在的该类为基类,初始化:一行两列的表格;第一参数,指的是行下标index;第二参数,指的是表格的每行有几列。
for (int i = 0; i < m_noOfItems; i++)
{
QModelIndex index = model->index(i, ValueColumn, QModelIndex());
//取下标为i,第valueColumn列的QModelIndex类型的索引号
//qDebug() << index << " = index!";
//若i=0,打印QModelIndex(0,1,0x18da0380,QStandardItemModel(0x18d29be8)) = index!
model->setData(index,"N/A",Qt::DisplayRole);
//将索引号index行列要显示出来(DisplayRole角色属性)的值设置为"N/A",
}
data()
- 用了setData(),怎么少的了用data()函数?
- 在qstandarditemmodel.h中,原型:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- 说明:返回由索引index(表格的行索引号从0开始)引用的项的给定角色role(默认为Qt::DisplayRole)下存储的数据。
QTableView
- 若只使用QStandardItemModel,会遇到个表格问题,将十进制转16位的二进制后,表格的列不能自动调整大小!
- 此时,使用QTableView再好不过了!
//根据内容自动调整所有列的列宽
//设置表格的列与内容相匹配
ui->tblView->resizeColumnsToContents();
//我将放在mainWindow.cpp的某函数中,起作用了呀!
//【若你的未起作用,可以看看第三篇文章,或许对你有帮助】
- QTableView根据内容自动调整列宽行高
- QTableView根据内容自动调整大小(resizeColumnToContents解决不了的)
- Qt表格视图-简单表格
- QT模型(表格绘制)
- QT表格的实现
- Qt中模型/视图结构
QTableWidget
QTreeView
参考:
QTreeWidget
参考:
- QTreeWidget 的用法
- QTreeWidget 的基本用法
- QTreeWidget使用小结
- QTreeWidget Qt最常用最好用的树状列表窗体
- QT中如何让QTreeWidget某一列可以编辑,如何实现某一列控件的自定义化
- Tree Widget控件获取指定行指定列的内容
- QT中设置QTreeWidget某一列可编辑
继承了QTreeView类:
QItemSelectionModel
- Qt文档 QItemSelectionModel
- Qt 学习之路:视图选择 (QItemSelectionModel)
- 基类是QObject,但制作表格时可能会用到该类,跟踪视图的选定项,获取单元格改变的值。
- Qt 的信号顺序问题(以QListWidget 的itemSelectionChanged为例)
- Qt QStandardItemModel用法(超级详细)
QMessageBox
- 消息对话框,用于显示提示、警告、错误等信息,或进行确认选择。
- Qt 5种标准对话框及使用方法详解【其中一种就是QMessageBox】
- qt5信息提示框QMessageBox用法或QMessageBox用法
- 原型:
static StandardButton critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton);
- 说明:被用于保留严重错误。弹出警告(有红×的图标)窗口,第一参数表示父类是this(MainWindow该类),这样的话将窗口弹在父类“主窗口”的前面居中位置,而且窗口是模式的,第二参数是窗口的标题,第三参数是窗口弹出的内容,第四参数表示未赋值的话,默认(缺省)按钮的文本为OK,第五参数是缺省选择的按钮,缺省表示没有选择(该参数没什么用)。
//弹出窗口最多有三个按钮,超三个就会报错!
QMessageBox::critical(this, "Request failed","Add items to Registers Table.","Ready","Cancel","Close");
//设置三个或者两个按钮后,右上角的红×都是失效的!
//默认第一个按钮亮起蓝色框,按钮文本可以用中文表示
//只有设置一个按钮或者使用默认按钮OK的时候,右上角的红×才是有效的!
QMessageBox::critical(this, "Request failed","Add items to Registers Table.","Ready");
QString errorDetails = "404";
第三参数可以是:(拼接的字符串)
QString("An internal error occurred. Please ") +
"call technical support at 123456789 and report\n"+
"these numbers:\n\n" + errorDetails +
"\n\n<Application> will now exit."
e.g:
msg001:
msg002:
msg001:QMessageBox::warning(this,"Information",tr("文本框内容不许为空!!!"));
msg002:QMessageBox::information(this,"Information",tr("connection ok"));
critical() 与 Critical
- 都在qmessagebox.h中定义。
- QMessageBox::Critical用来显示Critical图标。而QMessageBox::critical()函数应用于保留严重错误。
QPushButton
setChecked()
- 原型:
void setChecked(bool);
- 所在文件:qabstractbutton.h
- 说明:设置选中状况。会影响click、toggled触发事件的bool值。
- 实操情景:若设置true,就一直是选中状态(怎么点,都是蓝色按钮),不可变换按钮文本,触发不了toggled事件,但能触发clicked事件。
- QCheckBox也有该函数,选中是“勾选复选框”状态。
isChecked()
- 原型:
void setChecked(bool);
- 所在文件:qabstractbutton.h
- 说明:提示按钮是否已经标记、已选中;返回按钮的状态,已选中:返回值为True;未选中:返回False。大多用于“判断”。
setCheckable()
- 原型:
void setCheckable(bool);
- 所在文件:qabstractbutton.h
- 说明:设置按钮是否能够被选中;若设置为true,表示能选中该按钮,但出现选中变蓝再选中变米白色的情况,不是这个函数控制的,而是setChecked函数控制,默认点一次,setChecked(true)变蓝,反之亦然。
- 实操情景:如果设置True,则表示按钮将保持已点击(变蓝色)和释放状态,只要再点一次,按钮可从蓝色变正常色;若为false,按钮不可点击。
ui->btTest->setCheckable(false);//表示btTest按钮不可选中,特征:呈灰色,不可点击
- 延伸:Qt——UI界面的QPushButton的树视图中勾选Checkable属性(clicked和toggled事件比较)、Qt中PushButton的pressed,released,clicked三种响应的区别
绘图类
QPixmap、QImage、QBitmap、QPicture
- QPixmap、QImage、QBitmap、QPicture【显示指定图片为例子】
- Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)
- QPixmap简单使用、QPixmap的使用
- QImage与QPixmap完全解析
- Qt中用QPixmap::load来加载图片
QIcon或QLable缩放 QPixmap的自适应
- Qt实用技巧:代码中QIcon缩放(QPixmap的手动放大和QIcon自动缩小)
- pixmap和label设置图片自适应大小
- Qt:QPixmap的图片缩放方法
- [QT]QPixmap图片缩放和QLabel 的图片自适应效果对比
- pixmap和label设置图片自适应大小
- qt 中 QPixmap 类的使用及用 QLabel 显示图像 -计算机视觉 with OpenCV 3 and Qt 5
- Qt QPixmap设置图片
QPainter 及其使用
QPalette调色板
setAutoFillBackground
- Qt中setAutoFillBackground
- qt 透明度设置(setWindowOpacity 和 setAutoFillBackground 和 带透明度的画刷填充就好了)
- 此函数保存小部件背景是否自动填充,true 为是 false为否。
const
- 转:关于C++ const 的全面总结【全面】
【这篇文章有些问题,不过我在这纠正一下,如图所示】
- QT学习笔记——“const"【简述】
- C++中const的使用和放在函数前和函数后的区别【指针使用const关键字】
virtual
- C++:多态与纯虚函数、虚函数【简述】
- qt中的虚函数【相对全面】
- C++ 中的虚函数、纯虚函数区别和联系或C++虚函数与纯虚函数用法与区别(转)【前面看不懂的,看这篇应该就懂了】
- 关于虚函数和 Qt 的 Event 函数的简单说明【通过例子说明】
moc,Q_OBJECT
- 官方解释:Q_OBJECT宏必须出现在类定义的私有部分中,该类定义声明自己的信号和插槽,或者使用Qt的元对象系统提供的其他服务
- mocOrmoc
- Q_OBJECT宏的作用
- QT中添加Q_OBJECT出现的问题【多重继承时QObject一定要放在最前面】
- [该文章的译文:刚收到这个错误消息而编译一个小类,它来源于QTreeWidgetItem:错误C2039:“staticMetaObject”:不是’QTreeWidgetItem’的成员。这就是说QTreeWidgetItem不是从QObject继承的,这意味着您自己的单继承类也不是从QObject继承的。继承QObject是使用Q_OBJECT宏的先决条件之一,如果您和我一样,您可以自动地将Q_OBJECT宏插入到任何与Qt GUI相关的类中。如果您没有在子类中使用任何元对象,例如信号/插槽或属性,那么只需取出Q_OBJECT宏。如果您需要使用信号和插槽,您还需要使您的子类从QObject中多次继承。如果您采用这种方法,请记住,多重继承要求QObject位于第一,否则您将得到与上面相同的错误,或者类似于您的类从moc的两个QObject子类继承]
emit,signal,slot
- Qt 信号槽 signals slots 特点 限定符的区别【谈到public slots、private slots】
- QT 中 关键字讲解(emit,signal,slot)
- Qt5 emit——不同窗口之间的触发信号
- 关于QT的emit的一点疑问——论坛
emit
- 发出信号(A类信号函数)
- 连接信号(A类信号函数)与槽(B类或本类槽函数)
- emit也可以向一个已定义的信号函数提供参数
- emit无非就是告诉编译器编译的时候A类信号函数 的定义实现在另一个地方(A类),从B类的connect方式中可以找到。
A类:
.h里:
Q_SIGNALS:
void SShowB();
.cpp里:
按键释放事件函数里:
switch (event->key()){
case Qt::Key_M:{
hide();//隐藏当前或A类窗口
emit SShowB();
}
}
B类:
.h里:
private:
A a;
B b;
public slots:
void SlotShowThisWindow();
.cpp里:
在构造函数里:
connect(&a,SIGNAL(SShowB()),this,SLOT(SlotShowThisWindow()));//显示当前窗口
声明SlotsShowB函数:
void SlotShowThisWindow(){
show(); //显示当前或B类窗口
}
信号与槽的连接关系 sender()函数
Q_SLOTS Q_SIGNALS namespace
Q_PROPERTY
Q_UNUSED
- 是宏,可以去掉编译器因形参未使用产生的警告,可以规避代码静态检查工具未使用参数检测。
- Q_UNUSED 的使用
- Q_UNUSED ( name ) 的用法
Qsrand与Qrand
- Qt生成随机数的方法【了解及比较 分别为:C++随机数的用法Orrand()和srand()函数的用法及QT生成随机数】
在Qt中,设置随机种子的方法是void qsrand(uint seed)。它的参数seed是一个无符号32位数,一般都是与调用时间关联起来【qsrand用法】
比如使用QT获取0-10之间的随机数
#include <ctime>
//这里以时间为种子
qsrand((quint32)time(0));
int res = 0+qrand()%10;
qsrand(QTime::currentTime().msec()); //取时间作为产生随机数的种子
timer->start(qrand()%5000+1000);//qrand()%5000+1000是产生一个在 1000-6000间的数,timer->start()是根据上述产生的数值来启动定时器
QRectF QRect
- Qt 4.8: QRectF Class Reference【还可查阅其他关键字的定义】
QRect Class Reference
QPoint与QPointF
QSize
QRect QSize QPoint 的使用
数学计算函数
- qAbs() qMin() qMax() qBound()
- Qt学习(二)算法(qAbs()、qMax()、qRound()、qSwap())及正则表达式
- Qt四舍五入取模取余操作【qRound与qRound64】
QRegExp
#include <QRegExp>
bool MainWindow::validate(QString str)
{
QString regexStr("^(-?\\d+)|(-?\\d+)(\\.\\d+)$");//Qt匹配正数、负数、浮点数;若结尾是.或-【若出现正负数、浮点数以外的值】,match==false
QRegExp regex(regexStr);//QRegExp regex = new QRegExp(regexStr);会报错
bool match = regex.exactMatch(str);//检查传进来的str字符串是否符合指定的正则表达式,符合为true,反之亦然
if (match)
return true;
else
return false;
}
QString arg1 = "-32.3";
bool a = validate(arg1.trimmed());
//打印 a==true
QString arg2 = "。";
bool b = validate(arg2.trimmed());
//打印 b==false
QFile常用函数及使用
- QT 对文件的操作(创建、拷贝、写入、删除)
- Qt拷贝文件、文件夹、创建文件夹、删除文件夹操作
- QT 读取txt文件的几种方法
- Qt实现读取、显示、修改并保存txt文件
- Qt – MainWindow实现文本新建/打开/保存/另存
QDir
mkpath和mkdir的区别
过滤器Filter
- Qt学习-QFileInfoList遍历文件夹以及过滤文件【用了QFileInfoList类,但依然有效过滤指定的".jpg、.h264”,主要用了QDir的setNameFilters()函数】
- QT输入输出(三)之 目录遍历(QDir)
- Qt5.9获取指定目录下的文件夹下的文件名称(函数:QDir::setFilter())
- Qt之遍历文件夹_经典详解
跟QDir有关
QStringList filter;
filter << "*.jpg" << "*.h264";
dir2.setNameFilters(filter);
代码实现创建文件夹功能
- Qt创建文件夹【用指针变量】
- 【Qt5】判断文件夹是否存在并新建文件夹【用普通变量】
代码实现删除文件夹
Dialog
FileDialog
- FileDialog::getOpenFileName()函数用法及FindDialog::FindDialog(QWidget *parent) :QDialog(parent)
- 使用前要:#include <QFileDialog>
容器类
- Qt容器类(总结)(新发现的QQueue和QStack,注意全都是泛型)
- Qt容器类之三:通用算法【三个算法:排序、查找、复制】
- QT的通用算法
在学习STL风格迭代器的两种分类(“QMap与QHash”)时,要接触的知识点【时间复杂度为主】
explicit与implicit
- 其实是:隐式转换和显示转换之间的比较
- C++ 隐式转换和显示转换【看完这个,explicit的用法差不多会了】
- C++ explicit关键字详解
- C++中的explicit关键字介绍
- C++中的explicit关键字
globalPos()与pos()
函数 | 描述 |
---|---|
globalPos() | 给出的坐标信息是相对于桌面的,即以桌面左上角为原点。 |
pos() | 是相对于窗口的,以窗口左上角为原点(去除边框)。 |
- 即pos()给出的是一个相对位置坐标。而globalPos(),给出的是一个绝对坐标。
- qt的pos()和globalpos()(globalpos是相对于桌面的)
TextEdit
- 文本框,代码控制写入字符串,可能出现中文乱码
- Qt中QTextEdit显示字符串
- QTextEdit如何显示汉字?——论坛
- qt怎么在textedit中显示中文
typedef
qreal
- QT中qreal关键字详解(RGBDSLAM_V2)【图的来源】
也有这个说法:“在桌面操作系统中(比如Windows, XNix等)qreal其实就是double类型;而在嵌入设备系统中,qreal则等同于float 类型。”
键盘事件
键盘事件之回车事件Qt::Key_Return与Qt::Key_Enter
- 分别是字母区大键盘回车键Qt::Key_Return、数字区小键盘回车键Qt::Key_Enter
- qt 回车事件之Qt::Key_Return与Qt::Key_Enter
- qt绑定回车键和确定按钮
- Qt键盘回车事件keyPressEvent之Qt::Key_Enter与Qt::Key_Return
界面刷新
- 【一般使用update()函数】
- QT 界面刷新
解决乱码
线程
异常/问题
“collect 2:error :ld returned 1 exit status”
- 可能忘记导入“已有的cpp或h文件”了
- 采用“编写代码”的方式来实现应用程序功能时,遇到的异常/问题,“collect 2:error :ld returned 1 exit status”,用这篇文章的第三个解决方法(根据我当时需求,我先注释头文件没有定义的槽函数,后面完善功能,才继续编写,定义槽函数)
- QT编译报错,error: collect2: error: ld returned 1 exit status. 【论坛,随便看看,可能扯到该篇文章:C++继承中关于子类构造函数的写法、自学QT之QT编程中出现collect2.exe👎 error: error: ld returned 1 exit status的解决办法】
- QT错误:collect2:ld returned 1 exit status的解决方法之一
- collect2: error: ld returned 1 exit status 错误分析
编写串口软件出现的异常
D:…\mainwindow.cpp:20: error: undefined reference to `SPComm::isOpen() const’
- 说明SPComm类的isOPen()函数没有定义
- 解决:在cpp里写入即可:
bool SPComm::isOpen() const
{
if(m_serialPort->isOpen())
return true;
else
return false;
}
D:…\debug\spcomm.o: -1: In function `ZN6SPCommC2EP7QObject’:
- 解决:在pro文件加上"QT += serialport"
“munmap_chunk(): invalid pointer”
“error: ‘tr’ was not declared in this scope”——“tr”未在此作用域中声明
“: -1: error: 没有规则可以创建“mainwindow.o”需要的目标“…/qt_battery/ui_mainwindow.h”
- 报错来源:
在qt_battery项目目录下打开终端进行qmake和make编译,生成了项目的Makefile、.exe文件、moc_xxx.cpp文件、xxx.o、moc_xxx.o文件,之后做某些操作(身为小白的我,没有习惯在终端指定项目目录下编译,但这个‘所谓的某些操作’之前必须要先编译),完成后,我在终端执行“make clean”指令,将.o文件清空,并将剩下的文件(除了xxx.cpp xxx.h xxx.pro)放入回收站,然后在Qt中调试模式运行qt_battery程序,在控制台中出现该异常了 - 解决:
缺什么给什么,编译过的项目,就不能像“没在终端编译过,没生成.o文件,也可直接在Qt软件中调试运行,程序能照常运行”的项目了,必须“qmake和make编译”产生Makefile、.exe文件、moc_xxx.cpp文件、xxx.o、moc_xxx.o文件之后,才去Qt软件中调试运行。
- 若项目简单,没有“界面文件”(就不会在某.cpp中加入"
#include “ui_mainwindow.h”"),则不会报这个错。
“Project ERROR: Unknown module(s) in QT: declarative”
-
接触的这个项目是从别人那拷贝的,因为环境配置(有人另称为交叉工具链【我虚拟机Linux里的Qt使用的是GCC编译器套件】)不同,弹出了这异常,导致不能正常执行该程序(下面第三张图,按钮呈灰色,表示不能运行程序)
-
QT中的未知模块:声明性的/Unknown module(s) in QT: declarative
【可参考:QtDeclarative module】
以上都没有说怎么解决,我就自个找找看:在xxx.pro文件中将"QT += declarative"代码注释(加“#”表示注释),就不会出现该异常,但有新的异常出现了。。。 -
补充:
一个异常解决了之后还有新的异常,可能存在某些原因:项目涉及底层程序或某些驱动程序,不好注释更改,又或者富有复杂性、移植性不高,不易配置相应的库或环境配置。。。但是“办法总比问题多”,吼~嘎油!
GCC:GCC(GNU编译器套件)常用简要介绍、GCC编译器(Linux gcc命令)30分钟入门教程
“ error: ‘class Ui::MainWindow’ has no member named ‘timerLabel’ ui->timer ”
- 有人这么解决的:C语言,C++编译遇到问题:has no member named ''XXX‘
- 而我的解决方式:
- 分析:“异常的意思是:主窗口的ui界面没有timerLabel标签控件”,
- 找问题:“QLabel控件有名字为timerLabel的!”,
- 解决:在对应项目文件夹下----》在空白处右击鼠标弹出菜单----》选择打开终端,编译一遍:“qmake”、 “make clean”、 “make”(接着我关闭项目,重新载入项目【若编译之后运行还是出现了异常,则多做这个步骤】),然后运行,异常解决了
- 补充:
- Qt的常见编译错误
- Qt系列 :用MSVC2015编译常见编译错误及解决方案【目前遇不到这样的问题,先放着或许某天用得上】
“deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] char *i2c_device = “/dev/stm32_control”;”
- (译为:不推荐将字符串常量转换为“char*”)
- warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 【解决:const char *i2c_device = “/dev/stm32_control”;】
- 也有这种方法:解决C++中[Warning] deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]【char* s改为char s[]】
- warning:deprecated conversion from string constant to 'char *'解决方案【全面方案】
“QObject::connect: No such slot QLabel::valueChange2() in …/batteryDisplay/m。。。”(即:“QObject::connect: No such slot Xxx…”)
- Qt 信号和槽异常: QObject::connect: No Such slot baseClassName::subClassfunction() in …【补充:摘抄网友:检查槽函数名拼写是否有误,以及对应的signal和slot的参数是否一致
如果还不行的话,清理项目,删掉原有的moc_xxx.cpp,重新执行qmake.
还有一点要注意的是:signal和slots的参数要一样】 - QT运行出错:QObject::connect: Parentheses expected以及QObject::connect: No such slot ***【异常的产生是因为connect()的第四个参数的槽函数少了“()”】
“/qopengl.h:140: error: GL/gl.h:没有那个文件或目录”
- 如何摆脱这些编译器错误glu.h?(how do i get rid of these compiler errors in glu.h?)
- 【Qt】Qt5.9.0: error: GL/gl.h: 没有那个文件或目录【输入指令sudo aptitude install libgl1-mesa-dev】
- 错误GL/gl.h: No such file or directory的解决方法
但【当时到底怎么解决,因未及时做笔记,则在此无法讲述解决方案】:
- QT常见错误之GLU头文件没法使用
- 解决找不到GL/gl.h的问题
“error:forward declaration of class”
“Project ERROR: Unknown module(s) in QT: opengl”
- Project ERROR: Unknown module(s) in QT: opengl【遇到这个问题,搜百度,目前都没有解决好问题,这个关于OpenGL的项目我就先放下不弄了,就是很苦恼,我明明安装更新了GL库还是出现这个异常,不知道哪位大神能指教一二】
- Project ERROR: Unknown module(s) in QT: webkitwidgets
- 编译QT5.7.0遇到 ERROR: Unknown module(s) in QT: quick
“: -1: warning: TARGET is empty”
“Signal received The inferior stopped because it received a signal from the operatina system.”
- 异常译文:下级停止,因为它收到了来自操作系统的信号。
Signal name : SIGSEGV Signal meaning : Segmentation fault"
- 【突然弹出提示,我都懵了,百度上都帮不了我,我后面自己解决了,知道是那段代码造成的,但具体不知道错哪里,我就一直调试,后面解决了,因为隔太久才记录该异常,具体解决方案给予不了,只能看下次是否遇上,再记录具体解决方法了】
- Qt 错误:The inferior stopped because it received a signal from the Operating System
- qt调试时出现的错误:The inferior stopped because it received a signal from the Operating System.
- Linux下QT界面编程解决SIGSEGV的SIGNAL错误
“libpng warning: iCCP: known incorrect sRGB profile”
- libpng warning: iCCP: known incorrect sRGB profile解决办法
- libpng warning: iCCP: known incorrect sRGB profile告警处理
- 解决问题:libpng warning: iCCP: known incorrect sRGB profile
C:…\项目名2.0.0.20161005\forms\about.cpp: -1: warning: C4819(编码问题)
- 完整版异常:C:\项目名(1)\项目名_V2.0.0.20161005\forms\about.cpp👎 warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)
- 可能导入他人项目时,编码格式不一致:(Windows:找菜单–》选项–》窗口的文本编辑器–》行为–》文件编码–》选择UTF-8)
- 可能本地安装了VC,影响Qt软件导入他人项目,需要卸载Qt软件,重新导入
“glibc detected”
- “glibc detected”, free(), invalid pointer解决方法【free函数我这边无效】
- Linux+QT+OpenCv摄像头调试心得(3)---- glibc detected *** free(): invalid pointer: 0xafeff000
“QT5丢失Qt5Cored.dll”
我会遇到这个问题,是因为:
“将Debug或Release目录下的.exe文件 直接移至其他电脑,双击运行”,然后里面弹出这个“警告框:丢失Qt5Cored.dll”。
解决:打包发布exe【请看Qt——Windows端打包发布文章,即刻解决】
error: cast from ‘disp_color*’ to ‘unsigned int’ loses precision [-fperm
其实就是使用类型不当的问题,要么强制转换,要么改用同样的类型:
- error: cast from ‘char*’ to ‘unsigned int’ loses precision
- 关于Linux下C编译错误(警告)cast from ‘void*’ to ‘int’ loses precision
error: ‘::ioctl’ has not been declared
APPCRASH 故障模块名称: ntdll.dll
安装VS时KERNELBASE.dll出故障了
注:因Qt项目需求,需安装VS、VC,其中遇到了问题,就此做个笔记。
- Windows7 64位中出现的KERNELBASE.dll错误的解决方法
- Windows程序闪退Windows日志捕获Kernelbase模块错误
- 电脑出现kernelbase.dll错误的两种解决方法
可能因为VS2015安装包有问题,安装完VS2015,双击图标后,弹出该窗口,解决:
将VS全部卸载(卸干净),下载新的完整的VS安装包,安装之后,双击图标,不会再出现该窗口!
推荐参考:VS2015、VSCode安装(卸载vs导致MVSVCP140.dll缺失的解决;VSCode:han汉hua化、改变字体大小、改变背景色、解决乱码、打开PDF等文件)
快捷键
- 当使用Qt时,快捷键的使用是必不可少的,而且提高不少的工作效率呢~
常用
快捷键 | 意义 | 备注 |
---|---|---|
Ctrl+X | 剪切选中范围 | |
Ctrl+V | 粘贴 | |
Ctrl+C | 复制 | |
Ctrl+O | 打开文件 | |
Ctrl+S | 保存修改内容 | |
Ctrl+N | 弹出“新建项目”窗口 | |
Ctrl+↑ | 滚动条向上 | (Ctrl+↓作用与之类似) |
Ctrl+← | 焦点在的那行,若在单词或词组后,会出现在单词或词组的前面 | (Ctrl+→作用与之类似) |
Ctrl+/ | 在选中部分区域的头和尾加上"/* */“,在选中整个函数代码或语句块代码的每行前面加上”//“注释符号,若没有选中区域,在光标所在的行加上”//“,若已经有"注释符号”,快捷键之后会取消"注释符号" | |
Ctrl+Z | 撤回[向前撤回] | |
Ctrl+Shift+Z | 重写[向后重写] | 一般用Ctrl+Y表示向后撤回,但Ctrl+Y好像不是重写作用,反正按了没有反应 |
Ctrl+Shift+V | 将剪切板弹出,选择拷贝的文本粘贴到当前文本中 | 如图:kj-20 |
Ctrl+回车Enter | 光标只要在该行(无论是代码前还是代码中或尾),快捷键之后,该行的下一行出现空行,光标出现在空行中 | |
Shift+回车Enter | 光标在整行代码前面,快捷键之后在该行的上一行会插入空行,但光标还在该行代码前面 | 其实与回车Enter效果一样 |
Shift+Ctrl+回车Enter | 光标则与上面的相反了,只要在该行(无论是代码前还是代码中或尾),快捷键之后,该行的上一行出现空行,光标出现在空行中 | |
Shift+’ | 在选中区域的头与尾加上双引号"" | 注意:一定在英文输入的双引号才有这样的快捷键效果 |
Tab | 若未选中代码,光标在代码中,相当于“空格”的作用,会在光标前空一格或两格或四格;光标在代码最前面,会在光标前空四格 ,整行代码往后走。若选中代码,整体都会向后走,每行代码最前多四格空格 | Shift+Tab是其反向操作 |
Shift+Tab | 若未选中代码,光标在代码中,会将光标前的空格清除;光标在代码最前,会将光标的该行向前减少四个空格。若选中代码,整体会向前走,每行代码减少四个空格 | 与Tab是反方向的作用 |
Ctrl+Tab | 当前窗口与前一个窗口的跳转 | |
Ctrl+H | 选中某部分改过的代码,按快捷后,会打开Diff窗口,比较选中代码范围或文件的差异 | 如图:kj-01(红色部分是改之前的代码,绿色部分是已改的代码) |
Ctrl+F | 若未选中单词,会自动捕捉光标附近的单词,若选中整个语句,会出现淡蓝色背景的框 框住选中的语句,弹出Find小窗口进行查找 | 如图:kj-02(第一张图,选中的值有重复的,呈黄色,第二张图,选中范围,有重复的背景呈黄色,无重复的呈淡蓝色背景) |
Ctrl+A | 选中当前文件的所有内容 | |
Ctrl+B | 对当前项目所有文件进行“遍历编译检查”,系统查看是否存在问题,若存在问题,会在问题控制台呈现。若有代码修改未及时保存,它会弹出提示“以下文件有未保存的修改【如图:kj-16】” | 如图:kj-03 |
Alt+D | 弹出调试菜单的子菜单项 | 如图:kj-04 |
Alt+E | 弹出编辑菜单的子菜单项 | 如图:kj-05 |
Alt+F | 弹出文件菜单的子菜单项 | 如图:kj-06 |
Alt+B | 弹出构建菜单的子菜单项 | 如图:kj-07 |
Ctrl+T | 弹出运行项目的构建项 | 如图:kj-08 |
Alt+T | 弹出工具菜单的子菜单下 | 如图:kj-09 |
Alt+W | 弹出控件菜单的子菜单下 | 如图:kj-10 |
Alt+H | 弹出帮助菜单的子菜单下 | 如图:kj-11 |
Ctrl+I | 选中部分代码,相当于做了一次“Shift+Tab”操作,按了一次,对同样代码按第二次第三次都不会有反应的 | |
Ctrl+J | 若未选中代码,按了快捷键,将光标所在行与下一行之间的空格清除;若选中部分代码,按快捷键后,会将代码中的所有的空格清除,只留下有意义的空格,变成简化的代码行 | 如图:kj-12(第一张是按键前,第二张是选择范围按键后) |
Ctrl+K | 打开项目文件搜索栏,可以进行文件名的搜索 | 如图:kj-13(第一张是按键后,立马弹出的样子;第二张是进行搜索的样子) |
Ctrl+L | 好像没什么用,光标出现在代码中(可选中代码,也可不选择代码),按这个快捷键,文件搜索栏会出现“l <line>:<column>”(因为该编辑器问题,将半角的英文"<>"改用全角的尖括号);若光标不在代码中,而是选中某个文件或文件夹,按键后并没有反应 | 如图:kj-14 |
Ctrl+M | 在光标所在行(无论有没有选中代码),按一次快捷键,会在行数标志旁加“书签”图标;再按一次,取消“书签”图标 | 如图:kj-15 |
Ctrl+Q | 退出Qt窗口(关闭Qt软件)。若你不小心按到,而且刚刚修改的代码未保存,它会弹出提示“以下文件有未保存的修改” | 如图:kj-16 |
Ctrl+R | 按键后,对【如图:kj-17】的红圈圈起的已选中的项目重新构建,相当于“Release(Run)”运行发布操作。若有代码修改未及时保存,它会弹出提示“以下文件有未保存的修改【如图:kj-16】” | |
Ctrl+U | 若未选中代码范围,光标在某单词“前、中、后”,会自动选中单词;关闭在标点符号或标号 “前、中、后”(反正光标不在单词旁),会自动选中标号的 该行 / 整段语句块 / 整段语句 | |
Ctrl+W | 将当前文件关闭 | |
F1 | Windows端Qt中:若选中某函数后按键,会在最右边扩展出“帮助”栏,其中是对应的函数解释,如图所示:18-01图一;若无选中,操作变得无意义,扩展的“帮助”栏:显示“没有可用文档”,如图所示:18-02图二;Linux端Qt中:若选中某函数按键,直接跳转“帮助”项的窗口,查看对应函数解释 | 如图:kj-18 |
F2 | 若选中“函数名”或"类名",按键后跳到对应的“.h”头文件;若选中“变量名”,按键后跳至“定义”之处;若选中“控件名”,按键后跳至“ui_mainwindow.h”头文件 | |
Ctrl+Space空格 | 在未写完的函数名末端(或中部)按快捷键后,会弹出相关函数名;在未写完的变量名末端(或中部)按快捷键后,会弹出相关变量名 | 如图:kj-19 |
kj-01:
kj-02:
kj-03:
kj-04:
kj-05:
kj-06:
kj-07:
kj-08:
kj-09:
kj-10:
kj-11:
kj-12:
kj-13:
kj-14:
kj-15:
kj-16:
kj-17:
kj-18:
18-01图一:
18-02图二:
kj-19:
kj-20:
参考
Linux中命令
- 我这边:命令大多在“ Tera Term【是支持UTF-8协议的开源自由软件终端仿真器,是串口调试工具】 ”软件上输入,连接开发板与虚拟机VWM里的Linux,做桥梁搭建连接
- 有个快捷键必须知道:
- Tab键
- 输入文件名或项目名的开头字母,按Tab键,会自动匹配开头字母相同的名称
- 若有多个前几个字母都相同的名称,则要多写些字母,最好具有唯一性,这样匹配度更高:
有i2c_abcd,i2c_bcde,i2c_cdef三个文件, 则输入“i2c_a”之后按Tab键,自动匹配i2c_abcd名字; 若输入"i2c_"之后按Tab键,不会匹配任何名字; 若输入"i"之后按Tab键,自动匹配i2c_相同部分。 PS:若跳转某目录,输入目录名时,按Tab键,可能会根据“已输入的字母开头”找到相同字母开头相同的名字,可能没有一点反应。
- Tab键
常用
Linux指令 | 意义 | 备注 | 图 |
---|---|---|---|
cp -R或-r或忽略 Test或/test/Test /home或/home/或/home/Test2 | 复制本目录下的Test文件或test目录下的Test文件至home目录下 或 home目录下并改名为Test2文件(可以指定Test文件是哪个目录下的某文件,自动新建或覆盖)。 | Test、Test2:文件名;test:目录名;home:把复制的文件放入指定目录的目录名 ;“-R"或”-r"可忽略、也可二选一。 | Linux-001至003 |
cd / | 进入根目录,最上级目录。 | ||
cd . . | 进入本目录的上级目录。 | 点点之间不可出现空格。 | |
cd test 或 cd /test/ 或 cd /test 或 cd /test/test1/test2 | 进入本目录的test目录 或 根目录下的test目录或 根目录下的test的test1的test2目录。 | ||
mkdir Test 或 mkdir /home/Test | 在本目录创建新文件夹或在根目录下的home目录里新建文件夹。 | 目录名不可与同级文件或文件夹重名。 | Linux-004 |
touch Test 或 touch Test.ini 或 touch Test.txt 或 touch /home/Test 或 touch home/Test 或touch /home/test1/test2/Test 或 touch /udisk/yuv6 /udisk/yuv7 | 在本目录下新建Test或Test.ini或Test.txt普通文本文件 或者 在根目录下的home目录里新建Test文件 或者 在根目录下的home的test1的test2目录下新建Test文本文件 或者 在根目录的udisk目录里新建yuv6和yuv7两个文件。 | 若touch home/Test新建时出现提示:touch: home/Test: No such file or directory则改用“touch /home/Test”命令,因为本目录没有叫home的目录。若同时新建多个文件,就以空格相隔。 | Linux-005 |
rm -f /home/Test 或 rm yuv7 yuv3 | 删除home文件夹下的Test文件 或者 删除本目录的yuv7和yuv3文件。 | 若文件是有后缀的,在指令中的文件名部分就要补上后缀名;-f可忽略。 | Linux-006 |
rm -rf /home/test | 删除home文件夹下的test文件夹;若test目录含文件和文件夹的话,则作用是:删除test文件夹及其含有的文件或文件夹。 | r是递归处理,f是强制删除;一旦删除了一个文件,就无法再恢复它。 | Linux-007 |
rm *.ini *.jpg | 删除当前目录的所有.ini和.jpg后缀的文件。 | ||
more mxx.ini | 将文件从第一行开始,根据输出窗口的大小,适当的输出文件内容,只能向后翻(怎么翻页在文章中有表述,但没实操过)。 | 若文件是有后缀的,在输入指令时文件名要补上后缀名。 | Linux-008 |
less mxx.ini 或 less passwd | 可以向前或向后翻看文件(退出查看,按“Q或q”键),less的用法比起more又更加有弹性。 | 若文件是有后缀的,在输入指令时文件名要补上后缀名。 | Linux-008 |
ps | 查看当前所有进程。 | Linux-009 | |
ls | 查看当前目录的所有文件、文件夹,结果显示一般为:文件或文件夹的名字和图片视频的名字加后缀名。 | ||
killall pinchzoom或其他程序名称 | 关闭正在运行的名为pinchzoom的程序(一般开发板开机默认运行pinchzoom程序[在背景图——奶酪上有一群老鼠乱跑];若要进行其他程序,最好用该命令强制关闭之后才去运行指定的程序)。 | Linux-010 | |
kill -9 1444或进程号PID或1444 1445 | 关闭指定进程号的进程,必须指定进程号PID;否则,如图所示:Linux-011。 | Linux-012 | |
./T3QQ | (在开发板上)运行当前目录/当前文件夹下T3QQ程序,若要退出程序,一般用“Ctrl+C”快捷键就可以关闭当前程序。 | ||
./T3QW & | (在开发板上)的后台执行,补:一般使用Ctrl+C可以退出程序,但,在放入后台执行的情况下,想完全关闭程序,只能kill或killall进程,才能真正的关闭程序。 | Linux-013 | |
ifconfig | 查看网络IP地址(必须有网,结果会出现eth1或eth0、lo;若无网,只存在lo:127.0.0.1,但对于仿真工作来说这是无意义)。 | ||
ifconfig eth1 192.168.XXX.XXX | 修改eth1的ip地址为’192.168.XXX.XXX’。 | ||
reboot | 重启。 | ||
vi 文件名(如:xxx/xx.ini) | 查阅文件内容,按"小写i或大写I",可编辑文件内容,即进入编辑模式,**按"Esc"表示退出编辑模式(若没有进入编辑模式,则为无效按键指令),按(必须是英文符号)“:q!“表示不保存并结束查看,与按”:wq”**表示保存并结束查看。 | vim指令也是这样,若输入之后,出现如图所示:Linux-015这样的情况,换成vi命令即可(哪个简单哪个来嘛~)。 | Linux-016 |
init 0 | 在终端输入该指令,表示停机或关机(千万不能将initdefault设置为0)。 | ||
init 6 | 重启(千万不要把initdefault设置为6)。 | ||
init 1或2或3或4或5 | 不经常用,但分别表示‘单用户模式,只root用户进行维护’ ‘多用户模式,不能使用NFS(Net File System)’ ‘完全多用户模式(标准的运行级别)’ ‘安全模式,一般不可用’ ‘图形化(即图形界面)’ 。 | ||
- Linux 基础学习2、linux中各种文件的颜色表示是什么意思?、LINUX里各个颜色文件名代表什么、LINUX文件名颜色代表意义
- 绿色:代表可执行文件、可执行的程序(.jpg、.png、.c、.exe、.yuv等);紫色或蓝色:代表文件夹、目录;天空蓝色/浅蓝色:代表链接文件,主要是使用ln命令建立的文件,可以直接用cd xxx直接跳转查看目录;红色:代表压缩文件或者包文件; 白色:普通文件(.ini、.txt、.conf、.wac等)
- 绿色:代表可执行文件、可执行的程序(.jpg、.png、.c、.exe、.yuv等);紫色或蓝色:代表文件夹、目录;天空蓝色/浅蓝色:代表链接文件,主要是使用ln命令建立的文件,可以直接用cd xxx直接跳转查看目录;红色:代表压缩文件或者包文件; 白色:普通文件(.ini、.txt、.conf、.wac等)
- Linux-001:
home 与 mnt 是同级目录/文件夹;一个点’.‘表示当前目录,两个点’ . .'(中间不可出现空格)表示上级目录。当cp Test .时,会报提示,表示当前目录有Test的文件了,不可复制粘贴。
- Linux-002:
cp -r . ./Test /home表示将本目录的上级目录下的Test文件复制到home目录下。
- Linux-003:
查看了udis目录下无任何文件或文件夹,将mnt目录下的Test文件的内容复制到udisk目录下的Test2文件中。
# cd /lib32/dhcpcd/
# ls
dhcpcd-hooks dhcpcd-run-hooks
# cd /lib32/dhcpcd/dhcpcd-hooks/
# ls
01-test 02-dump 20-resolv.conf 30-hostname
# cd .. ------[1]
# ls
dhcpcd-hooks dhcpcd-run-hooks
# cd /lib32/dhcpcd/dhcpcd-hooks/
# cp ../dhcpcd-run-hooks /home/hooks ------[2]
# cd ..
# ls
dhcpcd-hooks dhcpcd-run-hooks
# cd /home
# ls ------[3]
Rear_Center.wav T3QTDlg hooks i2c_axp22_test
#
- Linux-004:
到根目录的media的mmcblk0p1的DCIM目录,新建与DCIM同级的my2文件,若进入DCIM上级mmcblk0p1目录,创建目录my2,会弹出提示:不能创建目录my2,因为文件已存在。
- Linux-005:
到根目录,查看文件,touch udisk/yuv7:在本目录的udisk目录里创建yuv7文件,进入udisk目录查看文件,只有touch /udisk/yuv8才能创建文件成功,因为udisk本目录没有udisk文件夹,只有yuv2目录,udisk是根目录下的目录,所以要加上“/”斜杠 。
- Linux-006:
在根目录下的media的mmcblk0p1目录时,删除yuv6与yuv7文件,只有yuv6删除成功,因为“/ . . /udisk/yuv6”(最好是//udisk/yuv6,好理解)代表 根目录的udisk目录的yuv6文件;若在udisk目录,输入指令rm -f /…/udisk/yuv …/udisk/yuv8,两个文件删除成功,和 rm yuv7 yuv3 一样删除成功。
- Linux-007 :
- Linux-008 :
- Linux-009:
- Linux-010:
图1:WriteOnlyTest程序在后台运行,图2:查看进程,图三:在进程结果中发现“WriteOnlyTest程序”正在运行,然后使用killall WriteOnlyTest指令关闭WriteOnlyTest程序,然后再用ps指令查看进程,判断是否关闭成功,图四:发现进程关闭成功了。
- Linux-011:
- Linux-012:
图1:查看进程,图二:在进程结果中发现“WriteOnlyTest程序”正在运行,接着再运行一个WriteOnlyTest,看下是否独立运行,图三:发现两个同名程序独立且互不干扰的运行着,然后使用kill -9 1549 1555指令关闭两个程序名为WriteOnlyTest的进程,然后再用ps指令查看进程,判断是否关闭成功,图四:发现进程关闭成功了。
- Linux-013:
- Linux-015:
- Linux-016:
会用
Linux指令 | 意义 | 备注 | 图 |
---|---|---|---|
devmem ADDRESS [WIDTH [VALUE]] | 应用层可以使用devmem工具访问物理地址,得到指定地址(寄存器)的数据;ADDRESS 是地址;WIDTH是结果的宽度,默认为32位,可以忽略;VALUE可以忽略,一般不使用。 | 如:devmem 0x44e07134 32[busybox devmen表示查看devmen配置] | LinuxCan-001 |
date | 查看硬件平台的系统时间 | ||
rtc | 查看硬件平台的系统时间、硬件时间、当地时间 | ||
uptime | 查看系统 运行了多长时间 | ||
du | |||
sudo | |||
- LinuxCan-001:
参考
- cp命令——复制当前目录、复制文件夹【使用cp三种方式】
- linux下cp复制文件或目录指令介绍OrLinux中cp文件或目录时显示进度OrLinux命令学习总结:cp命令
- cp 命令两个高效的用法
- 【Shell】cp -r -f 强制覆盖拷贝时仍需一一确认问题的处理方法【强制覆盖,无需提示是否确认覆盖同名文件】
- cd命令——Linux命令大全
- Linux下查看文件内容的命令OrLinux查看文件内容
- LINUX中,创建文件夹、文件命令及清除命令。
- Linux 删除文件夹和文件的命令、关于对linux命令rm -rf 的理解
- PS(Linux系统命令)——百度百科
- Linux下ps命令详解 Linux下ps命令的详细使用方法
- linux让命令或程序在终端后台运行的方法(Ubuntu/Fedora/Centos等一样适用)
- Linux的后台运行:&和nohup、Linux任务控制
- Linux 后台运行程序方法总结【&符表示在后台运行指定程序】
- Linux——vi命令详解或Linux vi/vim或vim常用命令总结
- linux 下的init 0,1,2,3,4,5,6知识介绍、linux命令——init 的使用用法、浅谈init进程、linux init.d 脚本的解释、linux中init.d文件夹的说明
- 通过devmem访问物理地址、嵌入式Linux调试_命令devmem_直接读写内存、、、、
- Linux时间(系统时间和硬件时间)
- 如何在终端查看系统运行了多长时间
- Linux命令之du命令、Linux du命令详解
Linux其他
- Linux进程通信——信号
- Linux 的进程间通信:消息队列
- Linux 进程间通信 : 共享内存(上)
- Linux内网渗透
- Linux 命令行下的好东西【一些不常用的命令】
- 小白Linux入门–入门篇:Linux下搭建JavaWeb环境
自定义控件及其他Qt使用例子
- 【代码似乎都不完整,初学者查看可能有点难度】
- Qt编写自定义控件及插件的使用【含创建QtDesigner自定义控件工程】
- Qt自定义控件
- Qt组件之模拟电池充电
- 屏幕取色器(Qt实现)(放大镜,RGB显示,智能调节)
- Qt编写自定义控件电池
Qwt仪表盘
同一小编的文章
- (若完全能使用可能存在些许问题,但只是为了看懂,让自己有些思路,完成可供参考)
- Qt编写自定义控件2-进度条标尺
Qt编写自定义控件43-自绘电池
Qt编写自定义控件属性设计器
Qt编写输入法V2018超级终结版
Qt自定义控件大全+designer源码【将自定义控件作为插件封装到了designer中,打开designer就从左侧控件栏中可以看到自定义控件。自定义控件近期会开放出动态库及头文件免费使用,设计师designer完整源码只能qt4编译,不支持qt5。】————》 Qt自定义控件大全+UI定制+输入法、Qt编写自定义控件插件开放动态库dll使用(永久免费)、Qt编写的开源帖子集合(懒人专用)————》GitHub仓库中下载 Or 码云仓库中下载
QProcess
- QT:关于QProcess中用write()函数调用cmd.exe进程的方法
- Qt输入输出之QProcess
- Qt提供了一个QProcess类用于启动外部程序并与之通信。这个类是异步工作的,而且在后台执行,这样用户界面就可以始终保持响应。
Mplayer
暂停功能
process->write("pause\n");//但是放入项目中,无效,不知道其他人是不是也这样
- 基于Qt和mplayer的播放器设计【也是利用process的write(“pause”),但是对我项目无效】
- mplayer在终端打开后后台执行以及关闭
FFmpeg
- 这个播放器与QProcess类无关,但是与Mplayer有关
暂停功能
- 给ffmpeg增加支持暂停和继续按键功能,以实现暂停媒体流的需求
- Android使用FFmpeg(七)–ffmpeg实现暂停、快退快进播放【也许可作参考】
- 编译ffmpeg源码,并实现暂停操作
- 论坛:ffmpeg.exe 是否可以控制转码过程,暂停 继续等
获取CPU序号
参考:
读取某进程是否存在
PS:还没有代码实现实践
避免Too many open files异常
方法一:Qt项目调用的QProcess::execute()后要close()
#include <QProcess>
或
#include <QtGui>
QProcess* myProcess = new QProcess(this);
QString strVal = "ls";//查看当前目录
myProcess->execute(valOutput);//执行指令
if(myProcess)
{
myProcess->close();
delete myProcess;
myProcess = 0;
}
因为execute相当于start + waitForFinished,所以还可以这样:
myProcess->start(valOutput);//执行指令
myProcess->waitForFinished();
if(myProcess)
{
myProcess->close();
delete myProcess;
myProcess = 0;
}
后者的话,还可以加行代码,作用是:读取指令的打印结果
QString strOutput = myProcess->readAllStandardOutput();
方法二:设置“open files”或“file descriptions”项从1024改为2048
【表示每个用户最大允许打开的文件数量是1024改为2048】
使用指令:ulimit -n 2048
参考:linux 打开文件数 too many open files 解决方法
Java,C++,C某些的比较
枚举
数据类型
- Java与C++的char类型不同。
- c语言基本数据类型(short、int、long、char、float、double)
- java语言中数据类型
C++ 与 Java 数据类型的区别
QTimer QTime QDateTime QDate 对应时间格式
- QDateTime——Qt帮助文档
- Qt学习笔记:QTimer和QTime
- 0003:Qt常用类 - QDate【常用接口的整理】
- Qt由入门到放弃-QDate、QTime、QDateTime的相关函数
- 《Qt5+QDate和QTime获取当前系统日期和时间》【讲解:Qt学习(5)获取当前系统时间-实时显示当前时间。若在Java中:Java时间的处理】或QT 获取当前系统时间并格式化输出
- QT入门系列(7):获取系统时间 日期时间格式
- Qt获取当前时间(超详细)【还讲到了QCalendarWidget 日历组件】
其他
C语言的strtoul函数
- strtoul函数的使用,揭开其神秘面纱
- C 库函数 - strtoul()
- 浅析C语言中strtol()函数与strtoul()函数的用法
- 原型:unsigned long strtoul(const char *nptr,char **endptr,int base )
- 说明:参数一:字符串起始地址,要转换为无符号长整数的字符串;参数二:返回字符串有效数字的结束地址(此处体现二级指针的好处),对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符;参数三:转换基数(10:转成十进制),必须介于 2 和 36(包含)之间,或者是特殊值 0。
const char *axpv1 = "0x34";
int dev_addr = strtoul(axpv1,NULL,0);
C语言的tcgetattr函数
C语言的ioctl函数
- (笔记)Linux下的ioctl()函数详解
- Qt 程序中使用蜂鸣器 ioctl()
- Qt中ioctl
- linux 内核 - ioctl 函数详解
- IOCTL函数用法
- ioctl函数详细说明
- ioctl命令及参数传递
- ioctl函数的使用方法
- ioctl()函数详解
- ioctl用法详解 (网络)
- ioctl 的使用方法详细说明与例子
Qt Assistant
指针及运算符
- 指针:是存放变量地址的;用来访问变量地址。
[]运算符
*、&运算符
- c语言的指针和指针运算符(* and &)
- 指针变量区分*p 、p、&p
- &p的&:取出存放变量的地址
- *p的*:取出存储在地址中的对应值
- *p的p:一个指针变量的名字,表示此指针变量指向的内存地址
酒店,404号房是黑白主题的房间,
p就是404号,表示门牌指向的第四层的4号房(房间地址),
*p就是让我们得知房间内容——黑白主题的窗帘桌子床,
&p就是让我们得知门牌——404号。
a = 3; //将赋值为3
c = &a; //把a的地址赋值于c
d = *c; //取出c存放a地址中的值,并赋值给d
printf("d = %d",d); //打印d
输出为: d = 3
++运算符运算顺序
序号 | 指针 | 运算顺序 | 备注 |
---|---|---|---|
1 | *p++ | 先返回 *p的值,然后p再++。 | |
2 | (*p)++ | 先返回 *p的值,然后 *p的值再++。 | |
3 | *(p++) | 先返回 *p的值,然后p再++。 | 也就是说它和 *p++的运算顺序一样。 |
4 | ++*p | 先将 *p的值++,然后再返回 *p的值。 | |
5 | ++(*p) | 先将 *p的值++,然后再返回 *p的值 | 它和++ *p是一样的。 |
6 | *(++p) | 先将p的值++,然后再返回 * p的值 | 它和 *++p是等价的。 |
1~3三组 是先返回 *p的值,区别就在于到底是p++还是 *p的值++。
4~6三组 是最后都是返回 *p的值,不同点在于是 *p先++还是p++。
运算符重载
成员运算符(.)和指针运算符(->)
Human Tom;
Human* p;
p = &Tom;
Tom.BirthDay = "1969“;
Tom.IntroduceSelf();
效果等价于:
p->BirthDay = "1969";
p->IntroduceSelf();
逻辑、移位运算符
- 深入理解C++移位运算符【干货】
打包发布
-
参考:
- Qt——Windows端打包发布【讲解全面,因为是我写的!】
全志平台T3
- BT601是SDTV[标准数字电视(standard definition television )]的数据结构
- BT709是HDTV[ 高清晰度电视(high-definition TV)]的数据结构
- 【Codecs系列】视频格式国际标准:BT601/BT709/BT2020
- BT601 BT656 BT709 BT1120 解析
typedef enum //定义枚举
{
DISP_BT601 = 0, //用于标清视频
DISP_BT709 = 1, //用于高清视频
DISP_YCC = 2, //用于图片
}disp_color_space;
按键消抖
注:好像不是Qt能控制的,这个需要按键硬件控制。
如何保证代码稳定性
注:其实这个问题,是一个码农一直研究的话题之一,重在经验积累。
架构设计文档
- 技术文档系列之架构设计文档模板
- 技术文档模板【一个实例操作,大略看看模板框架】
Qt调度器
Qt看门狗
Qt使用运动卡
延伸
- 逐点比较法直线和圆弧插补算法及实现
- 推荐算法普查(基于深度学习)
- 铼钠克_官网【致力于高端数控系统的开发、数控设备和直线电机的集成与应用、自动化及机器人产品的研究开发的一家上海企业公司】
- 插补原理及控制方法
- 直线插补算法
Qt5串口收发数据(通信)
- QSerialPort4
- QT5实现串口收发数据(上位机与下位机通信)
- Qt 串口通信(QSerialPort)
- QT(2)----QT获取设备的串口信息
- 基于Qt 5.7 自己写一个漂亮的串口助手
- Qt编写串口通信、调试的小工具
- qt实现串口通讯
Qt5版本之前
- Qextserialport
- Qt实现串口通信总结
动态变化的例子
-
有练习才能更好理解各种类的使用【在VMware软件的Ubuntu虚拟机里安装了Qt5.8.0版本的软件,在里面载入这些工程,配置一下环境配置,就可以运行啦!!!感觉看看效果吧~】
- 用Qt做一个漂亮的电子时钟(纯代码)【《Qt5开发及实例(第3版)–陆文周主编》第四章 4.9.3电子时钟练习:P125-P128(ClockExample项目)】
- 飞舞的蝴蝶(GraphicsView框架)【飞舞的蝴蝶、闪闪的星星、色彩丰富的正方形,使用Graphics View框架,《Qt5开发及实例(第3版)–陆文周主编》第七章 7.1.3 GraphicsView 的坐标系统(练习:7.2图形视图–7.2.1飞舞的蝴蝶)P211-P216(ButterflyExample工程与build-ButterflyExample-Desktop_Qt_5_8_0_GCC_64bit-Debug[图片只能放着调试文件夹中,才能使用,但图片路径是工程文件夹结尾])】
- QPainter+Qtimer 模仿一下简单的电池充电【代码完整,不像上面的“自定义控件”那篇模拟电池充电这么难琢磨(batteryDisplay工程)】
- Qt中使用QLabel显示时间的两种方法【在QLabel显示时间:方法一:QTimerEvent定时器事件timerEvent()、QObject::startTimer(1000)。方法二:connect(timer, SIGNAL(timeout()),this, SLOT(updateTime()))[updateTime函数里是timeLabel->setText(某时间格式的当前时间值)]、timer->start(1000);;若在Java中:java实现时间的动态显示】—》或Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)【这篇与上面那篇相似,但又不同,不过代码不完整】—》或QTimerEvent定时器事件的使用—》或我的QT学习笔记-02-QTimerEvent类定时器—》或基于QTime类和QTimer类实现的计时器—》或Qt学习: QTimerEvent定时器事件的处理程序代码示例(TimeTest工程)、QT中定时器的用法、QT定时器的两种应用(QObject就有timerEvent事件,一种什么样的居心呢?)
- QT国际化 一 (lupdate/linguits/lrelease)【《Qt5开发及实例(第3版)–陆文周主编》14.2 第14章 Qt5多国语言国际化 P400-P410】—》或QT下面的中文乱码问题—ts、qm文件—》QT中的TS文件与QM文件【简单描述:文件定义、作用与联系】或qt中制作添加 .ts 翻译文件【qt4.7.0版本时】—》Qt跨平台(window、linux)实现多语言或Qt国际化之一:国际化、帮助系统和Qt插件—》会了之后但忘记主要步骤,可看:关于QT的软件翻译QTranslator("多语言国际化练习"的LanguageExample和TestHello工程)或Qt界面–多语言国际化的实现
LanguageExample
TestHello- 开发板上Qt不能显示中文的问题 或QT4.5编写程序在arm开发板上无法显示中文的问题【不知道是不是有用,因为当时遇到的问题是,Qt Linguist翻译好的泰语,在Linux虚拟机里运行正常,但是放入开发板中,泰语都变成了矩形——Qt开发板上无法识别泰语,我觉得就是缺泰语字库,但是我朋友说,字库涉及底层原理/底层代码/底层驱动,我就没深究,把泰语换成其他语言了】
- (转载)Qt5.9进度条QProgressBar用法详解
各个实例的源码:链接:https://pan.baidu.com/s/1GsahBDen2hiq0ub5vGW10w 提取码:o52y
- [已解决]请教大家有没有用Qt做过屏保或待机画面的程序?【待机时的图片循环的程序——屏保,论坛中的代码可能不兼容Linux,我的源码,可以兼容Linux:】
链接:https://pan.baidu.com/s/1xlssmqPJXQM73IqRkNsKCg 提取码:bh1f
- 用Qt做一个漂亮的电子时钟(纯代码)【《Qt5开发及实例(第3版)–陆文周主编》第四章 4.9.3电子时钟练习:P125-P128(ClockExample项目)】
挑战
- 才入学呢应该看不懂,反正我刚入学的小白表示看不懂哦~
- Qt浅谈之二十七进程间通信之QtDBus good
随便看看
- 华为海思、麒麟处理器是什么?一文看懂
- 你的加密货币有价值吗?这里有一个深度学习ICO诈骗鉴别系统
- Qt 6 公布发布时间表
- Qt 6.0 发布首个预览版本
- 期待要来的qt6.0吗?年底将重磅来袭
- Qt公司发布Qt 6.0版本的2020年路线图、Qt Roadmap for 2020_QT官网
- Qt 6.0 或将于 Qt 5.14 之后发布,可能依赖 C++17
- 软件版本号讲解:什么是Alpha,Beta,RC,Release
更多推荐
所有评论(0)