Qt Creater介绍
背景
最近操作系统项目要求做一个电梯调度程序,周围同学有的使用Java+Swing,有的使用Js,而我打算使用C++。第一次做有GUI的软件,上网搜索一番后发现了Qt这个工具,评价颇高。
下载安装
幸运的找到了Qt开源社区,上面有很多关于这个工具的资源。下载安装以及初步的学习推荐此教程。值得注意的是,直接在官网上下载安装包是需要注册的,而使用资源下载页面的链接可以绕过注册直接下载,链接如下:
https://download.qt.io/official_releases/qt/5.8/5.8.0/qt-opensource-windows-x86-android-5.8.0.exe
文件很大,推荐使用迅雷下载,速度很快。
或者,qt-opensource-windows-x86-android-5.8.0.exe的百度网盘(密码:vr6h):
https://pan.baidu.com/s/1pvm38_Mk9CnE3VQtBRqeLw
安装后界面如banner所示。共有六个模式,其中的设计模式可以方便的对UI进行可视化设计,简单了解即可上手。
通信机制
Qt有一套自己的通信机制,涉及到三个关键字:字:signal
,slot
,emit
。
-
signal(信号)
被声明为
signal
的函数用来发射信号,信号可以被槽函数(被声明为slot
的函数)接收并触发槽函数。 -
slot(槽)
被声明为
slot
的函数可以接受信号函数的信号,值得注意的是,信号和槽之间的对应关系一对多或者多对一都可以,信号没有槽接收也是允许的。信号和槽之间的联系通过connect
方法实现,如:connect(pointer1, SIGNAL(signalFun(int)), pointer2, SLOT(slotFun(int)));
上述语句将
pointer1
所指向的类中的成员信号函数signalFun
与pointer2
所指向的类中的成员槽函数slotFun
相关联。槽函数除了可以与信号关联,与普通的函数没有什么区别。注意只有继承于Qt中的定义了信号的类或子类的类的成员函数才能与信号关联,也就是说非类的成员函数是显然不能与信号关联的。 -
emit(释放信号)
用于释放一个信号。如:
emit signalFun(a);//a is an int
上述语句释放了一个
signalFun
信号,并且携带了参数a,与之关联的槽函数可以收到信号和参数并被触发。当然信号函数也可以不带任何参数。
这套机制有许多优点,它可以在不同的类甚至不同的线程之间进行使用,异常灵活。这对于多线程之间的通讯非常有用。并且它是类型安全的。