一些小问题:
1:公司是vs开发qt,qt的ui拖控件,然后vs输入ui不会提示,需要右击.ui文件编译
tips
2:可以右键通过git,vs code到当前目录,cmd或者powershell的话,按住shift然后鼠标右键,就可以看到在此处打开powershell窗口,发布程序很方便
3:Qt4在Vs上qDebug会乱码
//头文件
#include <QTextCodec>
//main函数里
QApplication a(argc, argv);
//解决vs控制台输出中文乱码
QTextCodec* codec = QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
qDebug() << "汉字";
这只是很基础,简单的笔记,学会使用Qt官方帮助文档,多查,不比网上搜效果差
笔记大部分来自教程:
https://www.bilibili.com/video/BV1g4411H78N?p=1&spm_id_from=pageDriver
1:第一个QT程序
默认创建有三种基类进行选择,QWidget,QMainWindow,QDialog;
应用程序类的头文件:
QApplication对象在Qt中,有且仅有一个 ;
窗口对象默认不会显示,必须要调用show方法显示窗口
**exec()**让应用程序对象进入消息循环
Q_OBJECT宏:允许类中使用信号和槽的机制
Qt Creatot编码:工具-选项-文本编辑器-行为
2:常用快捷键
注释 Ctrl+/
运行 Ctrl+r
编译 Ctrl+b
查找 Ctrl+f
整行移动 Ctrl+Shift+↑或↓
自动对齐 Ctrl+i
同名文件的.h和.cpp文件切换 F4
3:添加控件
创建按钮为例
创建一个项目widget,源文件里会有main.cpp,widget.cpp源文件
//1:创建一个按钮
QPushButton *p=new QPushButton;
//show是显示顶层窗口控件,默认是以顶层窗口显示,所以会出现两个窗口,因此只对主窗口调用show方法
//p->show();
//设置其父窗口Widget
p->setParent(this);
//显示文本
p->setText("我的第一个QT按钮");
//或者创建的时候传入显示文本和父对象
QPushButton* p1=new QPushButton("按钮2",this);
//设置窗口大小
p1->resize(200,100);
//设置固定窗口大小
setFixedSize(600,400);
//移动窗口
p->move(200,100);
//设置窗口标题
setWindowTitle("setWindowsTitle设置标题");
4:对象树
在Qt中创建对象的时候会提供一个Parent对象指针
1)QObject是以对象树的形式组织起来的
在创建QObject对象时提供一个父对象,创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构(注意,这里的父对象不是继承意义上的父类,只不过是窗口间的父类而已,所以在一定程度上简化了垃圾回收
2)QWidget是能够在屏幕上显示的一切组件的父类
3)尽量在构造的时候指定parent对象,并且大胆的在堆上创建
5:信号和槽(理解了windows api的消息机制应该觉得信号和槽很好理解吧)
1)connect连接
connect(信号发送方,发送的具体信号,信号接收方,信号的处理(槽))
connect(p,&QPushButton::clicked,this,&Widget::close);
2)信号槽的优点
松散耦合,信号发送端和接收端本身是没有关联的,通过connect连接,将两端耦合在一起
3)自定义信号和槽
需求: Train火车类
Passenger乘客类
到站后,火车触发一个到站信号,乘客响应信号,下车
a.信号(signal)
新建Train和Passenger类,继承自QObject
自定义信号,写到signals下
返回值:void
只需要声明,不需要实现,可以有参数,可以重载
b.槽(solt)
早期Qt版本必须要写到public solts下,高级版本可以写到public或者全局下
返回值:void
需要声明也需要实现,可以有参数,可以重载
Train类信号:
.h文件
signals:
void arrive();
Passenger类槽:
.h文件
public slots:
void getOff();
.cpp文件
void Passenger::getOff()