c++与QT学习记录
给李工干项目涉及到相关知识,终究躲不过c艹,开个帖子记录学习,方便查询相关
FF
资料来源
C++:http://c.biancheng.net/cplus/
QT:http://c.biancheng.net/qt/ // QT官方教程
快捷键记录
1)帮助文件:F1
(光标在函数名字或类名上,按 F1
即可跳转到对应帮助文档,查看其详细用法)
2).h 文件和对应.cpp 文件切换:F4
3)编译并运行:Ctrl + R
4)函数声明和定义(函数调用和定义)切换:F2
5)代码注释取消注释:Ctrl + /
(选中代码再按快捷键)
6)字体变大变小:Ctrl + 鼠标滚轮向上向下
7)移动代码:选中所要移动的代码 -> 按住 ctrl + shift -> 键盘方向键
8)查找替换关键字:Ctrl + F
9)快速打开代码所在目录:编辑模式下 -> 选中项目文件 -> 右击 -> 选择“显示包含的目录”,即可显示项目所在目录(此方法同样可以打开代码文件所在目录)
关于语言相关资料来源https://wizardforcel.gitbooks.io/wudi-qt4/content/19.html
linux常用指令
man | 获得联机帮助,是类 Unix 用户的在线帮助手册 |
---|---|
cd | 切换当前路径命令 |
pwd | 显示当前路径 |
ls | 显示目录下面的文件和子目录情况 |
chmod | 变更文件和目录的属性 |
mkdir | 建立目录 |
rm | 删除目录或文件 |
su | 切换用户登录到 shell,常见从一般用户到 root 用户或者相反顺序 |
exec | 执行程序,并且不返回到当前 shell |
ldd | 查看应用程序使用的动态库 |
nm | 查看程序或库的调试信息 |
objdump | 查看程序或库的信息 |
env | 查看环境变量 |
grep | 从文件中查找字符串 |
find | 查找文件 |
which | 查找命令的可执行文件 |
uname | 查看操作系统版本 |
ps | 查看进程信息 |
top | 查看系统资源信息 |
vmstat | 查看系统虚拟机各资源信息 |
vi/vim | 使用 vi/vim 编辑器 |
make | 处理工程文件,生成可执行文件或库或其他资源文件 |
gdb/dbx | 调试工具命令 |
strace/ltrace | 跟踪程序调用的系统函数情况 |
file | 查看文件的格式 |
fuser | 查看进程使用了哪些文件 |
关于各个文件配合关系—距离说明
.h | 定义窗体类的头文件,定义了类Widget |
---|---|
.cpp | Widget 类的功能实现源程序文件 |
.ui | 窗体界面文件,由UI设计器自动生成,存储了窗体上各个组件的属性设置和布局 |
---|---|
ui_widget.h | 编译后,根据窗体上的组件及其属性、信号与槽的关联等自动生成的一个类的定义文件,类的名称是Ui_Widget |
UI布局
布局组件 | 功能 |
---|---|
Vertical Layout | 垂直方向布局,组件自动在垂直方向上分布 |
Horizontal Layout | 水平方向布局,组件自动在水平方向上分布 |
Grid Layout | 网格状布局,网状布局大小改变时,每个网格的大小都改变 |
Form Layout | 窗体布局,与网格状布局类似,但是只有最右侧的一列网格会改变大小 |
Horizontal Spacer | 一个用于水平分隔的空格 |
Vertical Spacer | 一个用于垂直分隔的空格 |
快捷键查询
按钮及快捷键 | 功能 |
---|---|
Edit Widget (F3) | 界面设计进入编辑状态,就是正常的设计状态 |
Edit Signals/Slots(F4) | 进入信号与槽的可视化设计状态 |
Edit Buddies | 进入伙伴关系编辑状态,可以设置一个Label 与一个组件成为伙伴关系 |
Edit Tab Order | 进入Tab 顺序编辑状态,Tab 顺序是在键盘上按Tab 键时,输入焦点在界面各组件之间跳动的顺序 |
Lay Out Horizontally (Ctrl+H) | 将窗体上所选组件水平布局 |
Lay Out Vertically (Ctrl+L) | 将窗体上所选组件垂直布局 |
Lay Out Horizontally in Splitter | 将窗体上所选组件用一个分割条进行水平分割布局 |
Lay Out Vertically in Splitter | 将窗体上所选组件用一个分割条进行垂直分割布局 |
Lay Out in a Form Layout | 将窗体上所选组件按窗体布局 |
Lay Out in a Grid | 将窗体上所选组件网格布局 |
Break Layout | 解除窗体上所选组件的布局,也就是打散现有的布局 |
Adjust Size(Ctrl+J) | 自动调整所选组件的大小 |
项目功能实现
ui_xxx.h 文件
查看 crtl在头文件查询 资料来源
https://blog.csdn.net/modi000/article/details/107550427
关于使用designer ui编写c++
第二种方法相对比较简单一点,就是将Ui::Dialog ui或Ui::Dialog ui写成一个新定义类的一个数据成员,也就是qtcreator提供的那种方法。(也叫*单继承方法,只继承了QDialog类)
以下来源:https://www.cnblogs.com/rainbow70626/p/6919240.html
1 |
|
/home/xiaomu/QT/build-Application-Desktop-Debug/ui_qwdialog.h
UI—go to slot
*//定义bool型输出变量*
- bool enable = false;
- //调用文字属性设置变量,传输输入变量enable用于保存是否点击了ok按钮,第二个参数为文字属性对话框默认值
- QFont font = QFontDialog::getFont(&enable,QFont(“宋体”,20,QFont::Bold),this,”自定义文字属性”);
- //当点击属性对话框的ok按钮后,变量enable的值为true
- if(enable)
- {
- ui->label->setFont(font);
1 | // qApp->setFont(QFont("宋体",20,QFont::Bold)); |
非自动生成的,需要在cpp文件中手动添加链接关系
.h文件中声明函数
.cpp文件中设置功能,若非自动生成,则需要在cpp文件setup处手动添加连接关系,具体查看测试文件qwdialog
关联-QT信号与槽机制详解
信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。
信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。
槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
信号与槽关联是用 QObject::connect() 函数实现的,其基本格式是:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
connect() 是 QObject 类的一个静态函数,而 QObject 是所有 Qt 类的基类,在实际调用时可以忽略前面的限定符,所以可以直接写为:
connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
其中,sender 是发射信号的对象的名称,signal() 是信号名称。信号可以看做是特殊的函数,需要带括号,有参数时还需要指明参数。receiver 是接收信号的对象名称,slot() 是槽函数的名称,需要带括号,有参数时还需要指明参数。
SIGNAL 和 SLOT 是 Qt 的宏,用于指明信号和槽,并将它们的参数转换为相应的字符串。例如,在 samp2_1(前面章节中的项目)的 ui_widget.h 文件中,在 setupUi() 函数中有如下的语句:
QObject::connect(btnClose, SIGNAL(clicked()), Widget, SLOT(close()));
其作用就是将 btnClose 按钮的 clicked() 信号与窗体(Widget)的槽函数 close() 相关联,这样,当单击 btnClose 按钮(就是界面上的“Close”按钮)时,就会执行 Widget 的 close() 槽函数。
关于信号与槽的使用,有以下一些规则需要注意:
一个信号可以连接多个槽,例如:
connect(spinNum, SIGNAL(valueChanged(int)), this, SLOT(addFun(int));
connect(spinNum, SIGNAL(valueChanged(int)), this, SLOT(updateStatus(int));这是当一个对象 spinNum 的数值发生变化时,所在窗体有两个槽进行响应,一个 addFun()用于计算,一个 updateStatus() 用于更新状态。
当一个信号与多个槽函数关联时,槽函数按照建立连接时的顺序依次执行。
当信号和槽函数带有参数时,在 connect()函数里,要写明参数的类型,但可以不写参数名称。
多个信号可以连接同一个槽,例如在 samp2_2(前面章节中的项目)中,让三个选择颜色的 RadioButton的clicked() 信号关联到相同的一个自定义槽函数 setTextFontColor()。
connect(ui->rBtnBlue,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnRed,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnBlack,SIGNAL(clicked()),this,SLOT(setTextFontColor()));这样,当任何一个 RadioButton 被单击时,都会执行 setTextFontColor() 函数。
一个信号可以连接另外一个信号,例如:
connect(spinNum, SIGNAL(valueChanged(int)), this, SIGNAL (refreshInfo(int));
这样,当一个信号发射时,也会发射另外一个信号,实现某些特殊的功能。
严格的情况下,信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参数。如果不匹配,会出现编译错误或运行错误。
在使用信号与槽的类中,必须在类的定义中加入宏 Q_OBJECT。
当一个信号被发射时,与其关联的槽函数通常被立即执行,就像正常调用一个函数一样。只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码。
信号与槽机制是 Qt GUI 编程的基础,使用信号与槽机制可以比较容易地将信号与响应代码关联起来。
QtDesiger 更改按钮的背景、字体颜色、大小
1、简介
更改QtDesgner 按钮上的背景、字体颜色、字体大小、字体格式
2、更改背景
代码中:
1 | self.pushButton.setStyleSheet("border-image:url(./image/test.png)") |
3、更改字体颜色、大小、格式
1 | self.pushButton.setStyleSheet("color:rgb(0,0,255)") |
font 修改
纯QT代码较复杂,暂时不考虑。
qtcreator 使用快捷键
功能 | 快捷键 | 解释 |
---|---|---|
Switch Header/Source | F4 | 在同名的头文件和源程序文件之间切换 |
Follow Symbol Under Cursor | F2 | 跟踪光标下的符号,若是变量,可跟踪到变量声明的地方;若是函数体或函数声明,可在两者之间切换 |
Switch Between Function Declaration and Definition | Shift+F2 | 在函数的声明(函数原型)和定义(函数实现)之间切换 |
Refactor\Rename Symbol Under Cursor | Ctrl+Shift+R | 对光标处的符号更改名称,这将替换到所有用到这个符号的地方 |
Refactor\Add Definition in .cpp | 为函数原型在 cpp 文件里生成函数体 | |
Auto-indent Selection | Ctrl+I | 为选择的文字自动进行缩进 |
Toggle Comment Selection | Ctrl+/ | 为选择的文字进行注释符号的切换,即可以注释所选代码,或取消注释 |
Context Help | F1 | 为光标所在的符号显示帮助文件的内容 |
Save All | Ctrl+Shift+S | 文件全部保存 |
Find/Replace | Ctrl+F | 调出查找/替换对话框 |
Find Next | F3 | 查找下一个 |
Build | Ctrl+B | 编译当前项目 |
Start Debugging | F5 | 开始调试 |
Step Over | F10 | 调试状态下单步略过,即执行当前行程序语句 |
Step Into | F11 | 调试状态下跟踪进入,即如果当前行里有函数,就跟踪进入函数体 |
Toggle Breakpoint | F9 | 设置或取消当前行的断点设置 |
项目相关-数据显示
QLabel 用于显示字符串,QLineEdit 用于显示和输入字符串。这两个类都有如下的两个函数用于读取和设置显示文字。
1 | QString text() const |
column row
action添加图像节点
1 | void MainWindow::on_actAddFiles_triggered() |
QFileSystemModel 提供了一个可用于访问本机文件系统的数据模型。
文本文档读入数据并显示
多UI并列设计
QT MDI 应用四界面方案 —- usel删去
读写文件方式 7_1 采集项目中的图片
- 用 QFile 类的 IODevice 读写功能直接进行读写 io设备
- 利用 QFile 和 QTextStream 结合起来,用流(Stream)的方法进行文件读写。 读写相关
关于中文乱码
最后读取编码,并且发送一定位数的编码数据
- QFile 负责文件的 IO 设备接口,即与文件的物理交互;
- QDataStream 以数据流的方式读取文件内容或写入文件内容。
dat文件读取与写入
以下qt例程 (用qt4写了一遍5-sample)
熟悉显示功能、读取功能、截取视频流方式
1.mainwindow 窗口样式界面简单,省略 label Qlabel
2.application dialog样式 —-学习常用按键以及命名习惯
包含 修改字体、颜色
使用功能键位:(class)QPushButton QCheckBox 方框打勾 QRadioButton 圆圈打勾 QPlainTextEdit
命名习惯(暂时这样):btn(OK、CLOSE、cancel) chkBox(Bold、Under、italic)、rBtn(Black、Blue、Red) txtEdit
3.纯代码编写界面 sample2.3,同2——了解原理、以后再学习
建立一个 Widget Appliation 项目
关键是取消创建窗体,即不勾选“Generate form”(创建界面)复选框,无选项框选
iniUI
声明函数—代码建立功能键位—建立功能映射—connect相关
声明class 自动生成,不要修改,注意变量
4.字符串读取模板
qt宏、顺序容器关联容器、迭代器、foreach关键字、库模块,嗨呀,没弄懂….以后再说
各类附加模块
qt界面修改尺寸——geometry
frame 框架修改
#frame{border:1px solid rgb(0,255,0)} //frame代表你需要设置边框的frame对象名,1px是边框的线宽,solid为边框形式为实线,rgb为边框颜色
css border:solid实线,dashed虚线;dotted点状,,double双线
border:0.5px solid rgb(25,25,25)
border:2px dashed rgb(255,15,15)
border:0px solid
关于Qstyle Stylesheet
如果你对某个widget设置QStyle,那么该样式只对该widget有效,其子widget不受影响;但如果设置样式表,那么所有的子widget会继承该样式表。
利用sheet实现只修改外部不修改内部
1 | QGroupBox { |
图像化设置圆形
一、使用setStyleSheet方法
使用的主要是使用border-radius 属性,关于这个属性,可选的样式有
border-top-left-radius 设置左上角圆角;
border-top-right-radius 设置右上角圆角;
border-bottom-left-radius 设置左下角圆角;
border-bottom-right-radius 设置右下角圆角;
border-radius 设置四个角圆角;
关于border-radius 后面的参数
(1)一个参数
(2)两个参数
border-radius: 15px 50px
第一个参数设置X轴方向的半径
第二个参数设置Y轴方向的半径
从图中可以看出设置一个参数代表X轴和Y轴设置了同样的值,而两个参数分别为X轴和Y轴方向的半径。大家可以根据不同需要去设置参数。
border:2px groove gray;border-radius:50px;padding:2px 4px solid
pushbutton样式选择
1 | QPushButton{border-radius:10px; |
pushbutton与toolbutton
tool工具栏按钮
push 普通按钮
comm.h √ comm.cpp √
设置参数值不用管,使能 重置 停止 运行
难顶,浪费了一天时间
控制模型不改了,就用楼下的电脑修改就好
其余控制通过5.8进行,我可太笨了
关于ads通信,发送图片