1、QWidget

    QWidget类是所有界面对象的基类,它是基础窗口部件,如下所示:

    《QT Creator快速入门》第三章:窗口部件(1)

    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时其子对象也会被自动销毁,析构顺序为先执行父对象的析构方法,再执行子对象的析构方法)。

    下面是一个示例和效果:

《QT Creator快速入门》第三章:窗口部件(1)
//#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;
}
View Code

相关文章: