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布局的时候,事实上是将不同的部件分配了不同鸽子数目。示例代码为:

1 QGridLayout layout(&widget);
2 layout.addWidget(new QPushButton(“foo”), 0, 0, 1, 2);
3 layout.addWidget(new QPushButton(“Bar”), 1, 0);
4 layout.addWidget(new QPushButton(“baz”), 1, 1);

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()则会使忽略消息窗口不关闭。

时间: 2024-08-01 22:22:44

Foundations of Qt Development 学习笔记 Part1 Tips1-50的相关文章

QT基础学习笔记

Qt简介:1991, 挪威奇趣科技Trolltech开发的跨平台c++图形用户界面(GUI)应用程序开发.2008,被诺基亚收购2012,转让给芬兰的Digia公司. 商业版:专业版,企业版: // 开源版(GNU) 优势:1.跨平台 2.面向对象 3.丰富API 类库  4.可视化编程 5,时间驱动机制 JAVA--compile once, run anywhere    一次编译,到处运行Qt-- wrire once ,comile anywhere     一次编写,到处编译 桌面操作

【Qt】学习笔记(一)

1.setupUi(this) : setupUi(this)是由.ui文件生成的类的构造函数这个函数的作用是对界面进行初始化它按照我们在Qt设计器里设计的样子把窗体画出来 setupUi(this)会自动把符合on_objectName_signalName()命名的任意槽与相应的objectName的signalName()连接在一起.即 void GoToCellDialog::on_lineEdit_textChanged() { okButton->setEnabled(lineEdi

Hadoop入门学习笔记---part1

随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力,好好做.正是因为选题和hadoop有关,现在正式开始学习hadoop.将笔记整理于此,希望与志同道合的朋友共同交流. 作者:itRed 邮箱:[email protected] 个人博客链接:http://www.cnblogs.com/itred 好了,废话不多说.进入正题!开始hadoop的学习

QT+opencv学习笔记一 opencv配置及Mat浅拷贝

今天终于把Qt + opencv配置成功了,中间有一些曲折,在这里记录一下. vs2013 + opencv的方法之前记录过,但这次的不太一样,我们一开始按照这篇文章配置pro Qt5中进行OpenCV开发教程 但是,死活出不来结果,研究发现,我们用的是 mingw 不是 vs,这个方法适合vs编译器 (具体可以参考:win7下的Qt环境+OpenCV视觉库) 后来,我们找到了这篇文章 QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置 但是还是有点曲折,

js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1

1. 前言 这两天看了一下TOM大叔的<深入理解js系列>中的基础部分,根据自己的实际情况,做了读书笔记,记录了部分容易绊脚的问题.写篇文章,供大家分享. 2. 关于HTMLCollection的“实时查询” var divs = document.getElementsByTagName("div"), i; for (i = 0; i < divs.length; i++) { //…… } 以上代码中,会出现性能问题.问题就在于divs是一个HTMLCollec

【cdq分治】cdq分治与整体二分学习笔记Part1.整体二分

之所以把cdq分治和整体二分放在一起学习,是因为他们两个实在太像了-不管是做法还是代码- 感觉整体二分可能会比cdq分治稍微简单那么一点点?所以先学整体二分.(感觉他们的区别在于整体二分是对每个操作二分答案,cdq是分治了操作序列) 整体二分是对答案进行二分,其具体操作如下: (比如以ZJOJ2013K大数查询为例) 具体过程 Step1.从(L,R)二分答案.mid=(L+R)>>1,用线段树维护原序列中(a,b)位置比mid大的数有多少个,同时记录对序列的操作分别是什么操作. Step2.

Qt设计师学习笔记--Sharping-Changing Dialogs

1.pushbutton->default属性为true,按回车相当于点击该按钮. 2.选中checkable后,Button变成切换按钮(toggle button),可以有两种状态:按下/弹起,默认状况下checkable是不选中的,Button默认为触发按钮(trigger button),按下去马上弹起来. 3.QComboBox是QT GUI中的下拉列表框,鼠标右键->编辑项目,可以添加下拉列表框中的内容 4.setVisble()设置是否可见 5.layout()->setS

Java学习笔记 Part1

1. 因为家里win7系统的c盘已经满了(0kb可用),只能用winxp的电脑 但是j8不支持xp,所以想在百度下个jdk7 后来在帮助下,发现jdk7在官网的最下面…… 2. eclipse的安装…… 这一个就不大费劲了,就是在安装过程中一直提示我安装速度太慢: 搞完之后选这个就行了 3. 如果没学c,就直接用guide的感觉,应该和我没学java,就直接用eclipse一样吧…… 在c-free里面,直接新建空白文档,然后写好代码,按play形按钮,就可以了 但是eclipse麻烦得多……

#[Composer学习笔记]Part1:安装composer并通过composer创建一个项目

安装composer 这里分享的是linux下的composer安装: 首先,创建一个目录放置composer,并进入目录: mkdir /opt/composer cd /opt/composer 下载composer,下载成功后注册composer.phar为全局命令 curl -sS https://getcomposer.org/installer | /opt/php/bin/php ln -s /opt/composer/composer.phar /bin/composer.pha