1.tr("内容")函数:将内容翻译成其他语言的标准,用于软件改变语言。(是一种不错的编程风格)。
2.在字符串中用"&"来设置快捷键,如:"&Find"则快捷键为alt+f。
3.setBuddy()用来邦定伙伴 可以达到聚焦的目的。
4.setDefault(true)让对应控件为默认的控件,即当按下Enter键时默认按下对应控件
5.sizeHint()返回一个窗口理想的尺寸大小
6.emit 执行指定信号
7.一个信号可以连接多个槽:在发射这个信号的时候,会以不确定的顺序一个接一个的调用这些槽
8.多个信号可以连接同一个槽:不管发射哪个信号,都会调用这个槽
9.一个信号连接另一个信号:当发射第一个信号的时候,也会发射第二个信号
10.连接可以用disconnect移除
11.信号成功连接到槽,需要他们的参数必须具有相同的顺序和相同的类型。有个例外,当信号的参数比他连接的槽的参数多,那么多余的参数会被忽略掉
12.创建对话框的基本步骤:
1)创建并初始化子窗口部件;
2)把子窗口部件放到布局中;
3)设置Tab键顺序;
4)建立信号与槽的连接;
5)实现对话框中的自定义槽;
13.图形用户界面(GUI)为程序提供图片的方法:
1)把图片保存在文件中,运行是载入;
2)把XPM文件包含在源代码中(因为XPM文件也是有效的C++文件);
使用Qt的资源机制;
14.Qt资源文件是一种简单的XML文件格式
15.Qt通过“动作”的概念进行菜单和工具栏的编程,一个动作就是一个可以添加任意数量的菜单和工具栏上的项步骤为:
1)创建并且设置动作;
2)创建菜单并且把动作添加到菜单上;
3)创建工具栏并且把动作添加到工具栏上;
16.让对话框以非模态(应用程序之间互不相干)的形式显示用show、raise、activteWindow。对话框以模态(必须点击关闭,才能操作其他应用程序)形式显示用exec。
17.QSplashScreen 用来在程序启动前的启动画面
18.QDataStream类用于写入和读出二进制流,QTextStream用于写入和读出文本也可以用前面的类
19.QApplication::clipboard()可以使用系统的剪贴板
20.自定义Qt窗口或者窗口部件可以选择一个合适的Qt类,对它进行子类化,并且通过重新实现一些虚函数来改变它的行为。如果想对已经存在的窗口部件的外观进行自定义设置,那么只需要对其应用一个样式表或者重新实现一种定义风格即可,而不必对其进行子类化。
21.绘制事件在窗口第一次显示的时候回自动产生,在重新调整部分或整体部件大小时回产生。也可以通过QWidget::update()或者QWidget::repaint()来强制产生绘制事件,区别是repaint会强制一个即时的重绘事件,而update是在Qt下一次处理事件时简单的调用一个绘制事件,可以把多次的绘制事件压缩在一次不会出现闪烁现象。
22.在QT设计师中使用自定义窗口部件之前必须让QT设计师察觉到它们的存在,有两种方法可以完成这一任务:改进法和插件法
1)改进法是最快捷和简单的方法,如插入一个HexSpinBox部件的步骤:
a)从Qt设计师的窗口部件工具盒中拖动一个QSpinBox到窗体中创建一个QSpinBox
b)右键单击微调框,从上下文菜单中选择Promote to Custom Widget(改进成自定义窗口部件)
c)在弹出的对话框中填入HexSpinBox作为类的名字,填入hexspinbox.h作为头文件的名字
缺点:无法对自定义窗口部件中的那些特定属性进行访问,也无法对这个窗口部件自身进行绘制
2)插件法需要创建一个插件库,QT设计师在运行的时候加载这个库,并可以利用该库创建窗口部件的实例。(由于Qt的元对象系统,QT设计师可以动态获取它的属性列表)
23.双缓冲:是一种图形用户界面编程技术,它包括把一个窗口部件渲染到一个脱屏像素映射中,以及把这个像素映射复制到显示器上。当窗口部件的绘制非常复杂并且需要练血不断地重复绘制的时候,明确的指定使用双缓冲是非常有用的。
24.图形处理或者图形绘测窗口部件最好使用可以获取的第三方窗口部件如:GraphPak,KD Chart,Qwt
25.Qt中用于窗口中摆放部件的类:QHBoxLayout、QVBoxLayout、QGridLayout和QStackLayout
26.管理窗体上子窗体部件布局的方法有三种:绝对位置法、人工布局法和布局管理器法。
1)绝对位置法:通过对子窗体部件分配固定的大小和位置以及对窗体分配固定的大小来实现
缺点:a)用户无法改变窗口的大小
b)出现大字体时会把一些文本截断
c)对于不同的平台会出现尺寸不合
d)必须人工计算这些位置和大小
2)人工布局法:窗体部件位置绝对但是大小尺寸可以和窗口的大小成比例,通过重新实现窗体的resizeEvent()函数来设置部件的几何形状。
a)也会出现文本截断的问题,通过考虑窗口部件的大小提示可以避免这种风险,但编码会更复杂
3)布局管理器法:QHBoxLayout、QVBoxLayout、QGridLayout常用的三个布局管理器
27.QSizePolicy包含一个水平方向和一个垂直分量,通过它设置不同的取值可以设置窗口部件的大小策略
28.分组布局:QStackedLayout类可以对一组子窗口部件进行摆放或者分页显示而且一次只显示其中一个把其他的隐藏起来。
29.切分窗口:QSplitter是一个可以包含其他窗口部件的窗口部件,在切分窗口中的这些窗口部件会通过切分条而分割开。用户可以通过拖动切分条来改变部件的大小。
30.滚动区域:QScrollArea提供了一个可视的滚动的视口和两个滚动条。
31.停靠窗口和工具栏:QMainWindow提供了4个停靠窗口区域分别在中央窗口部件的上部、下部、左侧和右侧。每个停靠窗口但是QDockWidgetd的实例。
32.多文档界面:在主窗口的中央区域提供多个文档(MDI应用程序),通过把QMdiArea类作为中央窗口部件,并且通过让每一个文档窗口都成为这个QMdiArea的子窗口部件,就可以创建一个多文档界面应用程序。setCentralWidget()设置主窗口。
33.QTimer::singleShot(0,this,SLOT(loadFiles()));在构造函数的最后设置时间间隔为0毫秒,用来调用loadFile()函数。意味只要构造函数结束,同时主窗口显示出来就调用loadFile()函数,这样不会因为加载文件太大屏幕上看不任何东西。
34.代码编辑的组件可以用QScintilla。
35.创建事件过滤器的步骤:
1)通过对目标对象调用installEventFilter()来注册监视对象
2)在监视对象的eventFilter()函数中处理目标对象的事件
36.Qt提供的5个级别的事件处理和事件过滤方法:
1)重新实现特殊的事件处理器
2)重现实现QObject::event():可以在这些事件到达特定的事件处理函数之前处理他们,如覆盖Tab件的默认意义
3)在QObject中安装事件过滤器:对象一旦使用installEventFilter()注册过,就会先发送给监视对象的eventFilter()函数。安装顺序和激活顺序逆向
4)在QApplication对象中安装事件过滤器:它可以用来处理那些发送给失效窗口部件的鼠标事件,因为QApplication通常都会忽略这些事件。
5)子类化QApplication并且重新实现notify()
37.处理密集时的响应保持:在程序的处理过程中因为一些事件的处理时间太长导致应用程序不能响应来着窗口的其他事件形成无法响应的状况。这种情况的解决方法有:
1)使用多线程:一个线程来处理应用程序的用户界面事件,将一些耗时操作用另外的线程来处理。
2)在耗时操作里面频繁的调用QApplication::processEvents()函数告诉Qt处理那些还没处理的事件。
3)利用进度条提示用户正在进行某个延时操作
4)将耗时操作推迟到应用程序空闲的时候来处理,要求该处理可以被安全中断后继续。在Qt中使用一个0毫秒定时器就可以实现这种方法,只要在没有其他尚待处理的事件就可以触发这个定时器。
38.QPainter类用于二维图形,OpenGL是一个绘制三维图形的标准库。
39.想在窗口部件上绘图需要创建一个QPainter再将指针传到该窗口部件。QPainter的主要设置:
1)画笔用来画线和边缘
2)画刷用来填充几何形状的图案
3)字体用来绘制文字
40.Qt支持三种类型的渐变:线性渐变、锥形渐变、辐射渐变。
1)线性渐变:由两个控制点定义,连接这两个点的线上有一系列的颜色断点
2)辐射渐变:由一个中心点、半径、一个焦点以及颜色断点定义
3)锥形渐变:由一个中心点和一个角度定义
41.世界变换:是在窗口和视口转换之外使用的变换矩阵,它允许移动、缩放、旋转和拉伸。坐标变换的简单方式是使用QPainter的translate()、scale()、rotate()、shear()函数
42.qBound(0, secs, MaxSeconds)等价于if(secs < 0){secs=0}esle if(secs > MaxSecond){
secs = MacSecond}
43.在绘图中,如果需要处理几个到几万个项的时候,而且要求用户能单击、拖动和选取。Qt的视图包括一个由QGraphicsScene充当的场景和一些由QGraphicsItem的子类充当场景中的项。场景以及项在视图中显示,它由QGraphicsView类充当。同一个场景可以在多个视图中显示,方便显示一个大的场景,或者以不同的变换来显示场景。
44.QGraphicsScene是一个图形项的集合。一个场景有三层:背景层、项层和前景层。前景层和背景层通常由QBrush指定,但也有可能需要重新实现drawBackground()和drawForeground(),以便可以完全控制如果想用一个图片作背景,可以简单的创建图片作为QBrush纹理。
45.视图体系提供了两种分项的方法。一种方法是简单的使一个项成为另一个项的子项。另外一种方法是使用QGraphicsItemGroup。把一个项添加到组中不会引起任何变换,这些组可以方便的处理大量的项,就像它们是一个单独项一样。
46.QGraphicsView是一个窗口部件,这个窗口部件可以显示场景,在需要的情况下可以提供滚动条,以及影响场景绘制方式的变换能力。有利于支持缩放和旋转,帮助浏览场景。
47.默认情况下QGraphicsView使用Qt的内置二维图形绘图,可以通过setViewport()改为使用OpenGL窗口部件。
48.视图体系使用三种不同的坐标系统:视口坐标、场景坐标和项坐标,喊包含一个坐标系统映射到另一个坐标的函数。视口坐标是QGraphicsView的坐标,场景坐标是逻辑坐标,用来布置场景中的项。项坐标针对某一项,并且以(0,0)点为中心。
49.QGraphicsItem不是QObject的子类,但如果需要在Link类中添加信号和槽,可以使用QObject做多重继承。
50.QStyleOptionGraphicsItem是Qt的有个不寻常的类,因为提供了几个公有的成员变量,可以检查这些状态变量来确定节点是否被选中
51.将视图的拖动模式设置为QGraphicsView::RubberBandDrag,以为着用户可以通过圈选选中item
52.场景中所有被选中的Item可以通过调用QGraphicsScene::selectedItems()获得
53.setDragMode(ScrollHandDrag)设置拖动模式可支持通过鼠标拖动来滚动屏幕
54.Qt中打印的创建步骤:
1)创建一个当作绘制设备的QPrinter
2)弹出一个QPrintDialog对话框,以允许用户选择打印机并进行设置
3)创建一个在QPrinter上操作的QPainter
4)使用QPainter绘制一页
5)调用QParinter::newPage()来进行下一页绘制
6)重复4,5直到所有页都被打印为止
QPrinter也可以通过调用setOutputFormat(QPrinter::PdfFormat)来生成PDF文件
55.在Qt中有两种方式处理多页文档:
1)可以把数据转换为HTML,并且使用Qt的富文本引擎QTextDocument进行显示
2)可以执行绘制并且手动分页
56.使拖动生效:QWidget的dragEnerEvent()和dropEvent()函数,当用户把一个对象拖到窗口部件上时就会调用dragEnterEvent(),对这个事件调用acceptProposedAction(),就表明用户可以在窗口上拖放对象。当用户放下一个对象时就会调用dropEvrnt()。
57.如果想拖动纯文本、超文本、图像、URL和颜色,只使用QMimeData类就可以实现。但想拖动自定义数据就必须选择如下三种方式这一。
1)使用QMimeData::setData()可以提供任意数据作为QByteArray的内容,并且在随后利用QmimeData()提取这些数据
2)可以通过子类化QMimeData并且重新实现formats()和retrieveData()来处理自定义数据类型
3)对于在简单应用程序中的拖放操作,可以子类化qMimeData并且利用我们所需要的任意数据结构来存储数据
58.qobject_cast
59.利用Qt的模型/视图架构,我们可以从模型中获取实际在视图中显示所需要的数据,这样可以出来非常大的数据集,不会降低性能。如果决定改变底层数据集的储存方式,则只需要修改模型
60.
61.数据库与tableview操作。QSqlTableModel、QSqlRelationalTableModel、QDataWidgetMapper
1)QDataWigetMapper将一个数据库记录字段反映到其映射的窗口部件中,同时将窗口部件中所做出的更改反映会数据库,自动完成,setSubmitPolicy(QDataWidgetMapper::AutoSubmit)
62.创建线程只需要子类化QThread并且重新实现它的run()函数就可以了
63.多线程中一个最基本的要求就是能实现几个线程的同步操作,Qt中提供了以下几个用于同步的类:QMutex、QReadWriteLock、QSemaphore和QWaitCondition。
1)QMutex类提供了一种保护一个变量或者一段代码的方法,用lock()函数来锁住互斥量
2)QReadWriteLock是一个同步类,用在多个线程对共享数据进行读写时候的同步
3)QSemaphore是互斥量的另一种形式,可以用于保护一定数量是相同资源
4)QWaitCondition允许一个线程在满足一定的条件下触发其他多个线程
63.QThreadStorge
64.QObject是可重入的,但是必须记住它的三个约束条件
1)QObject的子对象必须在它的父对象线程中创建
2)在删除对应的QThread对象之前,必须删除所有在次线程中创建的QObject对象
3)必须在创建QObject对象的线程中删除他们
65.QFtp提供了一些FTP指令,包括connectToHost()、login()、close()、list()、cd()、get()、put()、remove()、mkdir()、rmdir()、rename()
66.QHttp类是异步工作的,可以保证用户界面始终保持响应
67.TCP是一个基于流的协议,在TCP之上建立的高层协议通常是基于行或者基于快的
1)基于行的协议吧数据作为一行文本进行传输,每一数据行都以一个换行符结尾
2)基于块的协议把数据作为二进制块进行传输,每个数据块都是由一个大小字段及其包含的数据组成的
68.QTcpServer的incomingConnection()函数,当有一个客户端试图连接到服务器正在监听的端口的时候就会调用
69.对与一般的XML数据处理,Qt提供了QtXML模板,QtXml提供了三种方式编程接口来读取XML文档:
1)QXmlSreamReader是一个用于读取格式良好的XML文档的快速解析器
2)DOM(文档对象模型)把XML文档转换为应用程序可以遍历的树形结构
3)SAX(XML简单应用程序编程接口)通过虚拟函数直接向应用程序报告“解析事件”
对于XML文件的写入,Qt也提供了三种可用的方法:
1)使用QXmlStreamWriter
2)在内存中以DOM树的结构表示数据,并要求这个树形结构将自己写到文件中
3)手动生成XML
70.工具提示、状态提示和“What's This?”帮助
1)可以使用QWidget::setToolTip()以代码的形式为任意窗口部件添加工具提示:
例如:findButton->setToolTip(tr("Find next"));
2)在我们需要为一个复杂对话框中的每一个字段提供说明性的文本,而不是强制用户调用一个单独的帮助窗口的时候,“What's This?”模式的针对这个问题的一个理想解决方案
例如:dialog->setEhatsThis("");
3)利用Web浏览器提供在线帮助:需要考虑浏览器引擎是否支持
例如:
void MainWindow::help()
{
QUrl url(directoryOf("doc").absoluteFilePath("index.html"));
url.setScheme("file");
QDesktopServices::openUrl(url);
}
4)将QTextBrowser作为简单的帮助引擎
5)使用Qt Assistant提供强大的在线帮助:
Qt应用程序和Qt Assistant之间通信是由QAssistantClient类来处理的,它位于一个单独的库中,必须在应用程序的.pro文件中添加如下命令行:
CONFIG += assistant
6)使用与平台相关的方法来提供在线帮助