稍微整理一下刚开始接触Qt用到的资料
介绍
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT 库的基础之上。QT 支持下列平台:MS/WINDOWS-95、98、NT 和 2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、SGI IRIX;EMBEDDED- 支持 framebuffer 的 Linux 平台。伴随着 KDE 的快速发展和普及,QT 很可能成为 Linux 窗口平台上进行软件开发时的 GUI 首选。
http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/
安装
Qt下载,VS配置Qt
http://tieba.baidu.com/p/3451630520
补一句感觉bing救了我……挣扎着学Qt的过程中感受到了百度的恶意。要是前段时间还用百度的话……大概是没法在DDL前写完某project的……
bing和google搜索相关资料的时候第一个都是官方文档(虽然都是英文难懂但是迟早要习惯啊摔)而百度……想起某男神老师说的看官方教程是个好习惯(点头)
基本概念
信号(signal)和槽(slot)
啥是信号呢……
某只鸟一开始看的时候觉得很好理解啊。
对一个Object的操作,点击啊,选择啊,都会发射信号。
就好像,你的一举一动都是信号。
你往票圈发了一条“起风了”,就是发出了一个信号。
然后有人看到了没啥反应。然后有人看到了会去猜你怎么了是不是心情不好balabala。这就是有没有建立connect。
理论上你并不知道会不会有人有反应,所谓的信息封装。
那个“陷入思考”就相当于是槽。
这里的隐含信息就是一个信号可以与多个槽相联系的话,在这种情况下槽被激活的顺序将是随机的。同样一个槽也可以与多个信号相联系。(当心死循环啊
bool QObject::connect ( const QObject * sender, const char * signal,const QObject * receiver, const char * member ) [static]
bool QObject::connect ( 某鸟, 更新动态, 某人, 陷入思考) [static]
然后某一天那人终于发现这只鸟是不是zz啊懒得理它了
于是就研发了disconnect
bool QObject::disconnect ( const QObject * sender, const char * signal, const Object * receiver, const char * member ) [static]
然后就没有然后了
感觉信号和槽的翻译很生动啊,然而这并不能让我写出思路正常能运行的代码……
//突然觉得和C++报错的时候的throw和catch很像?
//就都省掉了杂七杂八的调用啊传递过程
//反正这是注释不是主体
再贴参考免得误导群众
http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/
信号和槽,在编译的时候不会报错,所以经常不知道错在了哪……一开始我经常给某个对象设置不存在的信号……感觉有点像是函数调用一样去理解但是参数什么的还是有不一样的要求的,稍微归一下
注意点
Q_OBJECT,它告诉编译器在编译之前必须先应用 moc 工具进行扩展
signals前面不可加public、private和protected进行修饰,slots可以,槽函数可以当普通函数使用。
signals区域的函数必须是void类型,而且这些信号函数没有函数体
宏定义和函数指针不能用于信号和槽的参数,信号和槽也不能有缺省参数
当信号与槽函数的参数数量相同时,它们参数类型要完全一致
当信号的参数与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略
example
slot:
void MainWindow::iSlot(int b)
{
QString qString;
qDebug()<<qString.number(b);
}
connect:
connect(this, SIGNAL(iSignal(int)), this, SLOT(iSlot(int)));
我坦白我写过下述代码
connect(this, SIGNAL(iSignal(int)), this, SLOT(iSlot(1)));
ui文件
可以用 Qt Designer 对.ui文件进行操作
在编译时生成另一个由源文件名加上ui_前缀的头文件
moc文件
Qt 在将源代码交给标准C++编译器之前,例如GCC、VS等,需要提前将这些扩展的语法去除掉。完成这一操作的就是 moc。
moc 全称是”Meta-Object Compiler”,也就是”元对象编译器“。 就是一个源代码分析程序,它会读取C++源文件,如果发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个C++源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新文件的名字将由源文件名加上moc_前缀构成,读者可以在 Debug 或 Release 目录中找到。
新文件并不会替换旧文件,而是与旧文件一起进入编译系统,最终被链接到二进制代码中去。
可以发现,moc 的执行在C++预处理器之前,因为预处理器执行之后会进行宏替换,Q_OBJECT 就不存在了。
qrc资源文件
在Qt Designer中设计UI界面的时候通过qrc资源文件加入一些图素,图标等资源