Qt提供的的基本的Layout Manager包括:QHBoxLayout,QVBoxLayout,QGridLayout和QStackLayout。
Qt中其它能完成Layout management功能的类包括 QSplitter,QScrollArea,QMainWindow和QWorkspace。
Qt中管理child widget的layout共有三种方式:absolute positioning, manual layout和layout managers。
Absolute positioning:即由程序员通过hard-coded的形式管理child widget的位置和尺寸。
Manual Layout:child widget的位置依然由程序员通过hard-coded的方式确定,而尺寸与父窗口的大小成一定比例,而不是完全的hard-coded。这种方式通过对form的resizeEvent()进行再实现来对child widget的定位。
最重要的三个Layout Manger是QHBoxLayout,QVBoxLayout,QGridLayOut,他们都是派生自QLayout
QGridLayout的使用略微有些复杂,它工作在一个由Cell组成的二维grid上。对于QGridLayout,为其添加widget的方式如下:
layout-> addWidget(widget,row ,colum,rowSpan,columnSpan)
其中widget为待添加的child widget, row和clomun确定该widget所占据空间中左上角那个Cell的位置坐标,rowSpan和columnSpan则指定widget的大小,这两个参数的的缺省值为1。
addStretch()向Layout Manager中添加“占位符”。
每个widget都有自己的size policy,由其告知layout 系统如何处理该widget外形上的stretch或是shrink。Qt中widget的size policy是通过QSizePolicy类来表示的。每个QSizePolicy由水平和竖直两组size policy组成,最常见的值包括:
Fixed Minimum Maximum Prefered Expanding
除了上述两组size policy外,QSizePolicy中还存储水平和竖直方向的stretch factor,该值用来表明在form尺寸扩展时widget随之扩展的比率。
应用程序的主窗口是通过创建QMainWindow的派生类来完成的。QMainWindow和QDialog一样,都是派生自QWidget
closeEvent()是由QWidget提供的一个虚函数,在用户关闭窗口时会被自动调用。因此如果要确认是否真正关闭窗口,可以重载这个函数,进行判断
setCentralWidget()将某个Widget设置为主窗口的central widget, 而central widget意味着在显示时会占据主窗口的中央位置。
Qt下的GUI 编程支持多种图形格式。可以使用多种方式为应用程序提供图像,最常见的包括:
1). 将图像存储在文件中,运行时加载之。
2). 在源码中include XPM文件(XPM文件也是合法的C++文件)。
3). 利用Qt的资源机制。
Qt的资源机制比之运行时加载更方便,并对所有支持的图像格式都能良好工作。
为了利用Qt的资源机制,需要创建一个资源文件,并在.pro文件中对应添加一行来对资源文件进行标识。例如:
RESOURCES= spreadsheet.qrc
资源文件本身采用了简单的XML格式。它被编译进程序的可执行文件,因此不会被丢失。在对资源进行定位时,使用路径前缀" :/" ,例如“ :/images/icon.png " 。资源本身可以是任何类型的文件。
在slot函数里,可以用sender()函数知道,signal是哪个对象发送过来的。
modeless window--one that runs independently of any other windows in the application
对于modeless dialog ,当其被弹出时,可能处于三种情况:
1). 这是该对话框第一次被激活
2). 该对话框之前曾被激活,但用户又将其关闭
3). 该对话框之前曾被激活,而且仍可见
show() 将一个隐藏窗口变为可见,而activateWIndow()则将窗口的状态变为active。
model window--pops up when invoked and blocks the application,preventing any other processing or interactions until it is closed.
一个dialog若是用show()来激活,则是modeless dialog;若通过exec()来激活,则是model dialog。此外,还可以调用setModel()来设置dialog的显示模式。
QDialog::exec() 的返回至在dialog被确认时为true,否则为false。
在栈上创建 model dialog是一种良好的编程惯例,因为在使用完后就不再需要,而model dialog会在作用域结束后自动被销毁。
由于多数应用程序的About box 都是高度雷同的,Qt中提供了一个方便的static convenicence function QMessage::about(),该函数和QMessageBox::warning()很相似。
另外学习了从QDialog继承下来的几个类的使用,包括QInputDialog,QColorDialog,QFontDialog,QFileDialog。 其中还学习了下QFrame这个类,已经setStyleSheet这个函数改变背景