Qt入门学习之窗口部件

/ 0评 / 2

在之前创建类的时候我们有一个选项就是选择类的基类,也就是父类,我们可以看到有 QMainWindow、QWidget 和 QDialog 三种,这三种也是以后用的最多的窗体,QMainWindow 是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,而他们全部继承自 QWidget 。不仅如此,其实所有的窗口部件都继承自QWidget

Qtguanxitu

窗口与子部件

首先创建一个新的空项目,创建 main.cpp 文件,并添加一下代码

#include  //这里包含了我们需要的头文件

int main(int argc, char *argv[]){
    QApplication app(argc, argv);

    //字符编码,可以使用中文
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

    //新建对象,父窗口是0,所以是个窗口
    QWidget *widget = new QWidget(0 , Qt::Dialog);

    widget -> setWindowTitle(QObject::tr("我是widget"));

    //新建对象,父窗口是0,所以是个窗口
    QLabel *label = new QLabel(0 , Qt::SplashScreen);

    label -> setWindowTitle(QObject::tr("我是label"));

    label -> setText(QObject::tr("label:我是个窗口"));

    //改变部件大小以便显示完整内容
    label -> resize(180, 20);

    //新建对象,父窗口是widget,所以不是个窗口
    QLabel *label2 = new QLabel(widget); //这个label2就是widget的子部件

    label2 -> setText(QObject::tr("label2:我不是独立窗口,只是widget的子窗口"));

    //改变部件大小以便显示完整内容
    label2 -> resize(250, 20);

    label -> show();

    widget -> show();

    int ret = app.exec();

    delete label;

    delete widget; //在销毁父对象的时候Qt会自动销毁子对象

    return ret;
}

运行结果为:

mywidget1

窗口类型

窗口不一定都有边框和标题栏,QWidget的构造函数有两个参数,QWidget * parent = 0 和 Qt::WindowFlags f = 0,前面的就是指父窗口部件,默认是 0,就是没有父窗口,后面的是一个枚举类型,分为窗口类型和窗口标志,前者可以定义窗口类型,后者的作用是更改窗口的标题栏和边框,而且可以和窗口类型进行位或操作。
下面先对新创建对象的代码进行更改

    QWidget *widget = new QWidget(0 , Qt::Dialog | Qt::FramelessWindowHint); //产生一个没有边框的窗口

    QLabel *label = new QLabel(0 , Qt::SplashScreen | Qt::WindowStaysOnTopHint); //停留在所有窗口的最上面

运行结果:其实就是将所有的窗口都变为没有标题和边框的,而且放在了所有其他窗口的上面,点击下面的红×关闭程序。

widget2

QWidget中还有一个 setWindowState() 的函数可以用来设置窗口的状态(最大化、最小化、全屏显示、没有状态等)

代码请查看:http://git.oschina.net/zcb1603999/LearningQt

评论已关闭。