2022qt学习
QT GUI编程_子羽丿的博客-CSDN博客这篇博客相当好,强推
学习视频
qt下载安装
下面这个文档写的很详细
Qt安装包下载(Windows平台)_Alex-L的博客-CSDN博客
QT的下载与安装(QT5.9.1)_Qi_1337的博客-CSDN博客_qt 5.9.1安装及配置
qt学习
小知识
知识点速记
argc时命令行变量的数量,argv时命令行变量的数组
QApplication是应用程序对象,有且仅有一个
Widget w;窗口对象默认不会显示,必须调用show方法显示从窗口
return a.exec();让应用程序对象进入消息循环,让代码阻塞到此行
1 | #include "widget.h" |
常用函数
getOpenFileName
static QString getOpenFileName(QWidget *parent = Q_NULLPTR,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = Q_NULLPTR,
Options options = Options());
第一个参数parent,用于指定父组件。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0;
第二个参数caption,是对话框的标题;
第三个参数dir,是对话框显示时默认打开的目录,“.” 代表程序运行目录,“/” 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如“C:\”等;
第四个参数filter,是对话框的后缀名过滤器,比如我们使用“Image Files(.jpg .png)”就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用“;;”分割,比如“JPEG Files(.jpg);;PNG Files(.png)”;
第五个参数selectedFilter,是默认选择的过滤器;
第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
对象树
析构自下而上,构造自上而下。视频中的演示代码也是如此,只不过在寻找子类时会发生打印,但相应的类并没有进行析构

继承
C++中的继承_c++什么是继承_Amoricc的博客-CSDN博客
基类就是父类
派生类就是子类
子类是不会继承父类的构造函数和析构函数,父类没有默认构造函数,子类也不能有。
1 | MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent) |
这个代码表示
2.2 public、protected、private 指定继承方式
不同的继承方式会影响基类成员在派生类中的访问权限
public继承方式
基类中所有 public 成员在派生类中为 public 属性;
基类中所有 protected 成员在派生类中为 protected 属性;
基类中所有 private 成员在派生类中不能使用。
protected继承方式
基类中的所有 public 成员在派生类中为 protected 属性;
基类中的所有 protected 成员在派生类中为 protected 属性;
基类中的所有 private 成员在派生类中不能使用。
private继承方式
基类中的所有 public 成员在派生类中均为 private 属性;
基类中的所有 protected 成员在派生类中均为 private 属性;
基类中的所有 private 成员在派生类中不能使用。
:和::的区别
C++中::和:的用法_小小土~的博客-CSDN博客_c++ :
::的作用
作用域,也就是该函数产生的位置,创建于什么类
- 第一种,类作用域,用来标明类的变量、函数
1 | Human::setName(char* name); |
- 第二种,命名空间作用域,用来注明所使用的类、函数属于哪一个命名空间的
1 | std::cout << "Hello World" << std::endl; |
:
类MyPushButton继承于QPushButton,拥有QPushButton的所有public函数,并且添加了MyPushButton的构造函数MyPushButton和析构函数~MyPushButton
1 | class MyPushButton : public QPushButton |
如何实现两个窗口的连接
将两个控件进行连接
通过在主界面中加入同类型的容器,
能够实现的任务
QT运行时的Debug、Release、Profile选项区别
其中Debug和Release我们都是耳熟能详的
前者是以-g模式编译 带着符号信息 便于我们调试
后者是经过优化之后 性能更上一个档次的
而根据官方说明,profile则是在这两种之中取一个平衡,兼顾性能和调试, 可以类似的看做是性能更优但是又方便调试的版本
QT运行时的Debug、Release、Profile选项区别_qt profile_顺其自然~的博客-CSDN博客
匿名对象QstringList()<<“yinxiong”<<“123”
QstringList()<<“yinxiong”<<“123”
创建匿名对象可以直接拼接字符串,省去起名的操作
qt程序创建

main
1 | #include "mywidget.h" |
pro文本解释
一般来说,是不需要自己配置pro’文件的
1 | QT += core gui Qt包含的模块 |
1 | #ifndef MYWIDGET_H |
1 | #include "mywidget.h" |
设置背景图片
打包qt程序
因为可能会将写好的程序发给别人,但是如果别人的电脑上没有配置过qt,他将无法运行我们所写的qt程序,所以为了程序的可移植性,我们要对已经编好的程序进行一个打包。
Qt错误:‘windeployqt’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。_windeployqt不是内部命令_JakeLinfly的博客-CSDN博客
qt之多线程
多线程的目的在于同时运行。比如说同时接受视频,以及文字信息。当只有一个线程时,一般不能同时进行(考虑了一下,如果对于视频和文字信息进行打包,再解包,可以实现一个线程同时传视频和传文字信息,不过比较麻烦,同时稳定性也不能保证),所以在这种场景下多线程的意义有所体现。
Qt多线程网络通信-[套接字通信 socket]_哔哩哔哩_bilibili
任选一个视频都可以对于qt多线程有一个大概的了解,并且进行简单的多线程编程
Qt 多线程基础及线程使用方式_qt多线程_富贵的编程日记的博客-CSDN博客
常用函数
Qt——常用控件详解_qt控件介绍_音视频开发老舅的博客-CSDN博客
isflat
| 初始状态下,按钮是否显示边框。flat 属性的默认值为 flase,表示按钮带有边框。 该属性的值可以通过 isFlat() 方法获取,也可以通过 setFlat(bool) 方法修改。 |
|---|
QMessagebox
Qt QMessageBox用法详解_睿科知识云的博客-CSDN博客
disconnectFromHost
一、客户端断开连接,disconnectFromHost函数可以实现;服务器判断客户端有没有断开连接,可以看有没有连接的客户端有没有返回错误
QtcpSocket
winexc
这是一个线程函数,主要功能是启动一个可执行文件或 Python 程序。具体来说,它将 IP 地址转换为字符串类型,然后将其和可执行文件或 Python 程序的名称拼接成一个字符串。接着,使用 WinExec 函数或 system 函数来运行这个可执行文件或 Python 程序。
WinExec 是 Windows 系统下的一个函数,它可以执行一个命令行,并返回执行结果。它的第一个参数是要执行的命令行字符串,第二个参数是命令行的显示方式。这里的第二个参数为 0 表示不显示命令行窗口。
system 函数也可以执行一个命令行,并返回执行结果。它的第一个参数是要执行的命令行字符串。这里被注释掉了,可以选择使用 WinExec 函数或 system 函数。
接着,这个代码将字符串变量 str 转换为 char 型数组,因为 WinExec 函数和 system 函数都需要一个 char 型数组作为参数。最后,使用循环和 malloc 函数来分配内存,并将字符串复制到 char 型数组中。这样就可以将这个数组作为参数传递给 WinExec 函数或 system 函数了。
遇到的问题
无法运行qt
qt :-1: 错误:cannot open output file debug2.exe: Permission denied 类似错误_hicomadmin的博客-CSDN博客
qt .exe运行后界面不显示而在qtcreater中显示
问题原因:文件路径中有中文
Qt运行不出现界面_weixin_34236869的博客-CSDN博客
常见bug

缺少头文件
图片无法显示
这个有的电脑可以有的不可以,估计是版本问题的影响
方法一
路径设置中选择\可以显示,而/无法显示。


方法2
在图片上右键copy path

ui界面更改控件,但是代码中无法显示
Qt中ui文件新添加的控件在代码中不识别且运行项目界面上也没有该控件_ui.h没有相关控件_qt_初学者的博客-CSDN博客
按下某个按键之后ui界面闪退
原因一般是因为内存泄漏,有变量没有进行初始化
QT的ui界面按钮点不了、不更新、无响应的可能原因_qt设计点不了_你洪哥的博客-CSDN博客
QT小记:QT程序异常结束的可能原因_吻等离子的博客-CSDN博客
路径中别有中文

问题:编译不通过
原因:是路径中有中文,
解决办法:更改文件位置解决问题

问题:qt中.jpg文件无法显示
原因:是路径中有中文,
解决办法:更改文件位置解决问题
问题:在试图实现通信连接时报错,指监听的套接字不能和文件名同名

解决办法:将套接字名字修改成server1