1、QWidget
QWidget类是所有界面对象的基类,它是基础窗口部件,如下所示:
QWidget类的构造函数:QWidget(QWidget * parent = 0, Qt::WindowFlags f = 0); 其中parent指定父窗口(默认为0,QWidget为一个窗口,非0的话QWidget是一个子部件),WindowFlags指定窗口类型和标志,例如:QT::Widget默认类型(如果没有父窗口的话为独立窗口类型,有父窗口的话为子部件类型),QT::Window窗口类型,Qt::Dialog对话框类型,Qt::WindowStaysOnTopHint始终处于顶层,Qt::FramelessWindowHint无标题栏和边框样式,Qt::SplashScreen显示效果与FramelessWindowHint相同,但任务栏中无该部件图标,一般与WindowStaysOnTopHint配合用于欢迎界面,Qt::WindowMaximized最大化,Qt::WindowMinMaxButtonsHint具有最小最大化按钮。我们也可以在对象定义后调用QWidget::setWindowFlags来设置窗口类型和标志。
setWindowState()可以用来设置窗口的状态,如最小化,Qt::WindowMinimized,最大化Qt::WindowMaximized,全屏显示Qt::WindowFullScreen。这里需要注意的一点,如果部件是无边框的则最大化会全屏显示,我们可以通过QDesktopWidget::availableGeometry()函数获得不含任务栏的桌面大小,然后来设置部件最大化。
在QT的示例程序中有一个Window Flags程序演示了所有的窗口类型和标志,可以在Qt Creator的欢迎模式中找到该示例。
还有两点需要注意,如果一个父窗口部件我们没有指定大小,那么他的大小会由子部件大小决定。最后在释放对象的时候不必单独释放子部件,在释放父窗口部件的时候会自动释放其子部件(销毁一个QObject时其子对象也会被自动销毁,析构顺序为先执行父对象的析构方法,再执行子对象的析构方法)。
下面是一个示例和效果:
//#include <QApplication> //#include <QLabel> //#include <QWidget> #include <QtGui> //QApplication和GUI类头文件都包含在QtGui int main(int argc, char**argv) { QApplication app(argc, argv); //下面的widget和label都没有父窗口,关闭任何一个部件后另一个不受影响,仍然显示 QWidget* pWidget = new QWidget; pWidget->setWindowTitle(QString::fromUtf8("我是Widget")); //一般窗口都有边框和标题栏,可以通过QWidget构造函数的第二个参数进行设置 pWidget->show(); //没有设置位置的话默认居中显示,没有设置大小的话,如果当前有子部件会根据子部件设置大小,当前没有子部件的话默认设置一个大小 QLabel label; label.setWindowTitle(QString::fromUtf8("我是Label")); label.move(600,500); label.resize(180, 30); label.show(); QDialog dlg; dlg.setWindowTitle(QString::fromUtf8("我是Dialog")); dlg.resize(200, 150); dlg.show(); QLabel* pSubLabel = new QLabel(pWidget, Qt::FramelessWindowHint); pSubLabel->setText(QString::fromUtf8("我是子label")); pSubLabel->move(0, 0); pSubLabel->resize(100, 30); pSubLabel->show(); int ret = app.exec(); delete pWidget; //销毁父窗口的时候自动销毁子部件,所以不用再delete label2 return ret; }