QPainter
用来执行绘制的操作;
QPaintDevice
是一个二维空间的抽象,由QPainter在上面进行绘制;
QPaintEngine
用在QPainter和QPaintDevice之间,通常对User是透明的,除非你需要自定义一个设备;
Qt的绘图系统实际上是说,使用QPainter在QPainterDevice上面进行绘制,它们之间使用QPaintEngine进行通讯.
信号和槽:
SIGNAL, SOLT
原型:
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
可用到所有继承自QObject类中;
使用emit触发信号;
对应关系:
1:1, 1:N, N:1
一个信号触发另一个信号:
connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &)));
QMainWindow
提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口;
QDialog
对话框窗口的基类; 是最普通的顶级窗口;
QWidget
即可作为顶级窗体,又可嵌入到其他窗体中,则基于QWidget创建;
还有QFrame, QStackedWidget...
&&
{
http://www.kuqin.com/qtdocument/qwidget.html#details
http://www.kuqin.com/qtdocument/qmainwindow.html#details
http://www.kuqin.com/qtdocument/qdialog.html
}
QWidget, QMainWindow, QDialog, QFrame区别:
QWidget:
QWidget类是所有用户界面对象的基类。
是用户界面的一个基本单元:
它从窗口系统接收鼠标,键盘和其他事件,并且在屏幕上绘制自己。
每个窗口部件都是矩形的,并且它们按Z轴顺时针排列。
一个窗口部件可以把他的父窗口部件或者它前面的窗口部件盖住一部分。
QMainWindow:
QMainWindow 类提供一个菜单条、锚接窗口(如工具栏)和一个状态条的主应用程序窗口。
主窗口通常用在提供一个大的中央窗口部件以及周围菜单、工具条和一个状态条。
QMainWindow常常被继承,因为这使的封装中央部件、菜单和工具以及窗口状态条变得容易,当用户点击菜单项或工具条按钮时,槽会被调用。
基于主窗口的应用程序,默认已经有了自己的布局管理器。
QDialog:
QDialog类是对话框窗口的基类。
对话框窗口是主要用于短时期任务以及用户进行简要通讯的顶级窗口。
可以是模态对话框也可以是非模态对话框。
支持扩展性并且可以提供返回值。可以有默认按钮。
也可以有一个QSizeGrip在它的右下方,使用setSizeGripEnable();
注意:QDialog使用父窗口部件的方法和Qt中其他类不同。
对话框总是顶级窗口部件,但是如果它有一个父对象,它的默认位置就是父对象的中间。他也将和父对象共享工具条条目。
QDialog 是最普通的顶级窗口(一个不会被嵌入到父窗口部件的窗口部件叫顶级窗口部件)。
通常情况下,顶级窗口部件是有框架和标题栏的窗口(尽管使用了一定的窗口部件标记,创建顶级窗口部件时也可以没有这个修饰)
在Qt中。QMainWindow和不同的QDialog的子类是最普通的顶级窗口。
非顶级窗口部件就是子窗口部件。他们是他们的父窗口部件中的子窗口。你通常不能在视觉角度从它们的父窗口部件辨别一个子窗口部件。
一般原则,
如果是顶级对话框,那就是基于QDialog创建,如果是主窗体,就基于QMainWindow,如果不确定,或有可能作为顶级窗体,或有可能嵌入到其他窗体中,则基于QWidget创建。
QFrame:
QFrame类是有框架的窗口部件的基类。
它绘制部件并且调用一个虚函数drawContents()函数来填充这个框架。这个函数是被子类重新实现的。
QFrame类也可以直接创建没有任何内容的简单框架,尽管通常情况下,要用到QHBox 或QVBox,因为它们可以自动布置你放到框架的窗口部件。
MessageBox:
QMessageBox::critical(NULL, "critical", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
QMessageBox::warning()
QMessageBox::information()
QMessageBox::question()
QMessageBox::about()
文本信息支持HTML标签的:
QMessageBox::about(NULL, "About", "About this <font color='red'>application</font>");
自定义:
QMessageBox message(QMessageBox::NoIcon, "Title", "Content with icon.");
message.setIconPixmap(QPixmap("icon.png"));
message.exec();
交互:
QMessageBox::StandardButton rb = QMessageBox::question(NULL, "Show Qt", "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if(rb == QMessageBox::Yes) {...}
ImputBox:
bool isOK;
QString text = QInputDialog::getText(NULL, "Input Dialog","Please input your comment",QLineEdit::Normal,"default str",&isOK);
if(isOK) {...}
QSpliter
QUiLoader
运行时加载UI;
使用动态对话框不用重新编译程序就能够改变对话框的布局;