Foundations of Qt Development 学习笔记 Part1 Tips1-50
1. 信号函数调用的时候仅仅会发送出信号,所以不需要执行 ,所以对于信号声明就行,但是不需要进行定义。
2. 只有槽函数可以声明为public,private,或者是protected的,而信号不行。可以将slot仅仅看成是一个与信号相关联的成员函数。
3. Qt的元对象指的是QMetaObject的实例,Qt中的元对象系统是用来处理对象间通讯的信号/槽机制、运行时的类型信息和 动态属性系统。虽然你使用QObject作为一个基类而不使用Q_OBJECT宏和元对象代码是可以的, 但是如果Q_OBJECT宏没有被使用,那么这里的信号和槽以及其它特征描述都不会被 提供。根据元对象系统的观点,一个没有元代码的QObject的子类和它含有元对象代 码的最近的祖先相同。举例来说就是,className()将不会返回你的类的实际名称, 返回的是它的这个祖先的名称。我们强烈建议QObject 的所有子类使用Q_OBJECT宏,而不管它们是否实际使用了信号、槽和属性。
4. 注意是QObject::connect,
5. 在连接信号与槽的时候不应该将具体的参数名写出来,只写上参数类型就行了。如果写了参数名的话程序会出错。
6. QMake处理了元对象的生成,并且将他们包含在了最终的程序之中。
7. moc寻找包含Q_OBJECT的类并且为这些类生成元对象,这些元对象随后会被链接到最终的程序之中。
8. 不要忘记了对于继承与QObeject的对象应该在类中加上Q_OBJECT声明。
9. 对于所有的图形化的Qt应用,必须有并且只能由一个application的实例。
10. 在Qt当中list之类的容器只要不进行修改就是隐式的共享的。所以将这些容器类作为const参数或者返回对性能来说是没有什么影响的。
11. 在Qt的for循环中,最好使用++前缀形式而不是后缀形式。
12. List中插入或者删除元素的时候正在使用的迭代器会变得无效,所以使用时应该注意。
13. 使用const型迭代器会让代码的开销更小以及更加安全。
14. QStringList类的一些典型的方法:1 list.join(“,”),在list内容之前插入逗号 2 replaceInString(“a”, “oo”),将成员中的a字符都换成 oo 字符。3 同样的与join对应的有着list.split(“,”)即按照着分隔符将一个整的字符串分成好几个存放在list中。
15. 怎样显示一个QMap中的对应的键和值:
foreach( QString key, map.keys() )
qDebug() << key << " = " << map[key];
16. 对于Map最好使用value而不是[]来取得一个键的值。
17. Qhash中的哈希表只要求提供==运算符,唯一的要求就是对于同样的元素应该提供相同的哈希值。
18. 继承于QHash的类必须至少应该定义一个operator==以及一个qHash成员函数。
19. 注意所有的Qt应用程序都是事件驱动的。
20. QApplication会进行事件的分发,这样当QPushButton收到这个事件的时候就会emit一个信号让其他的槽函数得以接受。
21. App.exec中的app是应用程序模版,其可以当作是所有Qt应用的起点。
22. 在Qt中使用布局的好处就是其可以让你随意的拖拽布局以及更换字体等等。
23. Qt可以在ui上面对不同的部件设置tab键查找顺序,在工具栏上面可以进行设置。
24. 注意,如果设计师文件叫做foo.ui,那么对应的c++文件就叫做ui_foo.h,设计的时候如果dialog的名字叫做ListDialog,那么最终结果的class就是Ui:ListDialog,放在Ui的明明空间中是为了防止与其他的非Ui的类文件名起冲突。
25. Qt的ui文件生成的类并不会继承于QDialog,其甚至连QObject都不是。所以应该自己定义相应的类。
26. 在qt程序的创建过程中可以使用单继承然后再将ui文件包含在里面,这样的程序耦合度更加低,因而十分方便修改。
27. GroupBox里面的部件当Group在移动时会和其一起进行移动。
28. 所有的部件在运行时都会得到一个大小提示,这些东西规定了其最大大小以及最小大小等等的信息,以及最大以及最小的高度等等的信息。
29. 用代码来编辑ui的时候,可以将要列上的东西先全部都列上,然后在用layout一步一步的添加即可。
30. 用代码来添加spacer可以使用addStretch()。
31. 注意,用代码的方法来添加一个addWidget布局的时候,事实上是将不同的部件分配了不同鸽子数目。示例代码为:
QGridLayout layout(&widget);
layout.addWidget(new QPushButton(“foo”), , , , );
layout.addWidget(new QPushButton(“Bar”), , );
layout.addWidget(new QPushButton(“baz”), , );
32. 如果想要让一个pushButton可以在按下与释放两种状态之间相互切换,那么应该将pushButton的checkable属性设置成true。
33. 注意以后发现没有界面自动退出的问题的时候,记得去检查所有的组建是否已经用new来声明过了,自动退出往往都是内存方面的问题。
34. 注意当那个布局声明的所处的位置的时候应该要使用QHBoxLayout(this)来声明,注意这个this是很重要的。
35. 如果出现有着no such slot的错误,那么可以去尝试下看看有没有如下几种错误:
1、看类声明中有没有Q_OBJECT
2、看slot函数有没有声明
3、查看slot有没有出现拼写错误
36. Qt当出现undefined reference to vtable for sth的时候应该尝试将debug以及release文件夹删掉之后应该就可以完成了。
37. Qt出现QT:connect was not declared in this scope 的原因是因为可能在main函数中使用connect时候没有加上QObject,在main函数当中是必须加上的,但是在其他函数当中就没有必要加上,因为其他的类可以直接使用属于自己的connect函数。
38. 注意,将文本设置成”E&xit”,这样键盘的快捷键为Alt+X。
39. QButtonGroup中放置radiobutton的时候防放置一组,只能有一个是选中的状态。
40. 如过想要禁用一个groupbox中的某些选项,可以使用groupbox的checkable属性。
41. QListWidget中含有这addItem(const QString &)以及addItem(const QStringList &)两种函数,以及currentTextChanged(const QString &)和currentItemChanged(QListWidgetItem * , QListWidgetItem * )两种信号。
42. 注意以后当出现QDialog is private 的时候, 应该看看是否将应该声明为指针的对象声明成了指针对象。
43. 在Qt的getSaveFileName这个函数中,选择文件类型的时候如果想要选择全部的类型那么使用*.*就可以完成。
44. QMessageBox::information, QMessageBox::warning, QMessageBox::critical的参数以及窗口几乎都是相同的,只不过在系统中他们的提示声音以及提示声音是不相同的。
45. 将mainwindow的属性设置成Qt::WA_DeleteOnClose可以有效的防止内存泄漏。
46. 在更改textEdit的文本信息之后被modified的应该是TextEdit的document()部分,这里的textdocument才是管理文本的内容以及格式属性的,而textEdit仅仅只是一个编辑器加上视窗,所以不可能是它发生了改变而应该是document()。
47. QAction类别,当一个QAction被使用的时候都会触发一个triggered()信号或者是toggled(bool)的信号。
48. qApp是一个全局指针,用他可以调用一些有用的东西,记得应该先包含QApplication。
49. 由于一个单窗口文本文件的关闭十分麻烦,有很多种不同的情况,例如关闭主窗口以及计算机关闭等等的情况,所以应该试图的去使用Qt提供的QCloseEvent去写出关闭事件。
50. 对于closeevent的accept(),其会使窗口关闭。而ignore()则会使忽略消息窗口不关闭。
Foundations of Qt Development 学习笔记 Part1 Tips1-50的更多相关文章
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
- QT入门学习笔记2:QT例程
转至:http://blog.51cto.com/9291927/2138876 Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同 ...
- QT入门学习笔记1:为什么要选QT及QT软件下载
为什么选择QT? Qt突出的优势: ◆ Qt 是基于 C++ 的一种语言扩展(Extention) C/C++ 目前还是一种很多人都在学习的语言. Qt的好处就在于Qt本身可以被称作是一种 C++ 的 ...
- Qt设计师学习笔记--Sharping-Changing Dialogs
1.pushbutton->default属性为true,按回车相当于点击该按钮. 2.选中checkable后,Button变成切换按钮(toggle button),可以有两种状态:按下/弹 ...
- 【Qt】学习笔记(一)
1.setupUi(this) : setupUi(this)是由.ui文件生成的类的构造函数这个函数的作用是对界面进行初始化它按照我们在Qt设计器里设计的样子把窗体画出来 setupUi(this) ...
- js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1
1. 前言 这两天看了一下TOM大叔的<深入理解js系列>中的基础部分,根据自己的实际情况,做了读书笔记,记录了部分容易绊脚的问题.写篇文章,供大家分享. 2. 关于HTMLCollect ...
- Qt keyevent学习笔记
在按下一个键不放后,会发生: 1.触发keypressevent(),此时isautorepeat()返回false: 2.set isautorepeat(),使其返回值为true; 3.触发key ...
- 十天精通CSS3学习笔记 part1
http://www.imooc.com/learn/33 第1章 初识CSS3 什么是CSS3? CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主 ...
- XHTML学习笔记 part1
XHTML: 可扩展超文本标记语言 HTML语言最开始是用来描述文档的结构,如标题,段落等标记,后来HTML有增加了一些控制字体,对齐等方面的标记和属性,这样做的结果是HTML既可以用来描述文档的结构 ...
随机推荐
- Android学习六---OpenCV for android samples
搭建好OpenCV4Android环境后,就要着手开发自己的应用了.对于一个没有OpenCV基础的人来开发OpenCV应用确实有点难度,不过我们可以从samples里学起,结合javadoc和万能的网 ...
- Hazelcast 内存数据网格
Hazelcast ( www.hazelcast.com)是一种内存数据网格 in-memory data grid,提供Java程序员关键任务交易和万亿级内存应用. Hazelcast的集群属于“ ...
- 吴超老师课程--HBASE的集群安装
1.hbase的机群搭建过程(在原来的hadoop上的hbase伪分布基础上进行搭建)1.1 集群结构,主节点(hmaster)是hadoop,从节点(region server)是hadoop1和h ...
- Chrome调试模式获取App混合应用H5界面元素
原文章地址http://blog.csdn.net/qq_19636353/article/details/53731254 浏览器的远程调试工具,使得我们可以通过PC上开启的控制台,调试手机浏览器中 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HandlerSocket ---MySQL与NoSQL ---SQL与NoSQL的融合(转)
项目地址:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL 写这一篇内容的原因是MySQL5.6.2突然推出了memcached的功能 ...
- 【c++ primer, 5e】访问控制与封装
练习 7.16 无,类的接口定义在public说明符之后,类的实现细节定义在private说明符之后. 7.17 有.类成员的默认访问权限不同.class的类成员默认为private,struct的则 ...
- 20145217《信网络对抗》逆向与BOF基础实践
20145217<信网络对抗>逆向与BOF基础实践 内容: 一.简单机器指令,汇编语言 1.'objdump -d xxx|more'反汇编命令查看机器代码,'cat'显示文件内容,'xx ...
- 实验三 敏捷开发与XP实践 实验报告 20162305李昱兴
实验三 敏捷开发与XP实践 实验报告 20162305 一.什么是敏捷开发与XP 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.敏捷开发以用户的需求进化为核 ...
- 在react-native中使用redux
redux是什么? redux是一个用于管理js应用状态的容器.redux出现时间并不是很长,在它出现之前也有类似功能的模块出现,诸如flux等等.redux设计的理念很简单,似乎最初这个开发团队就有 ...