美文网首页我爱编程
Qt学习笔记(二)自定义窗体及布局

Qt学习笔记(二)自定义窗体及布局

作者: 行走行囊 | 来源:发表于2018-04-17 06:53 被阅读0次

    1、Widget

    Widget:在Qt中,把窗体称作Widget。不仅仅是带边框的窗口叫Widget,其他所有界面组件,例如,工具栏、按钮、文本框、下拉列表、复选框等,都叫Widget。
    它们都继承于一个共同的父类:QWidget.

    2、窗口设计

    (1)窗口的任务:把各个组件组合起来,放在一个大窗体中。
    (2)给每个组件添加事件,使得窗口可以运作。

    3、窗口类的设计

    (1)定义一个类,派生于QWidget,写法和通常定义一个c++类相同,注意在类的开头添加一个宏 Q_OBJECT。
    (2)窗口类的构造函数必须传入一个父类指针,其代表该窗口属于哪个父类窗口。

    创建一个派生类


    创建Qt类
    // MyWin.h
    #include <QWidget>
    class MyWin : public QWidget
    {
        Q_OBJECT
    public:
        MyWin(QWidget *parent);
        ~MyWin();
    };
    
    // MyWin.cpp
    #include "MyWin.h"
    MyWin::MyWin(QWidget *parent)
        : QWidget(parent)
    {
    }
    MyWin::~MyWin()
    {
    }
    

    main.cpp即可使用自定义窗口

    #include "QtDemo.h"
    #include <QtWidgets/QApplication>
    #include "MyWin.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MyWin mw(NULL);
        mw.setWindowTitle("12");
        mw.show();
        return a.exec();
    }
    

    4、VAassistX使用

    5、窗口的自动布局

    (1)Size Policy 用于描述一个QWiget被resizing时采用的策略。
    (2)Size Hint 用于描述一个QWidget默认(推荐)的尺寸,Size Policy采用的策略都是参照这个属性的。
    (3)每一个QWidget都要重写以上两个属性的set方法,作用是向布局器声明自己需要的空间大小,布局器QLayout会根据这两个信息来决定这个窗口控件的实际尺寸。

    窗口的自动布局都是通过布局器对象(QBoxLayout)来完成的,QBoxLayout有两类,QVBoxLayout(垂直布局),QHBoxLayout(水平布局)。

    MyWin.cpp中添加两个控件

    MyWin::MyWin(QWidget *parent)
        : QWidget(parent)
    {
        m_lineEdit = new QLineEdit(this);
        m_textEdit = new QPlainTextEdit(this);
    
        QVBoxLayout *boxLayout = new QVBoxLayout(this);
        boxLayout->addWidget(m_lineEdit);
        boxLayout->addWidget(m_textEdit);
        this->setLayout(boxLayout);
    }
    

    两部件可随窗口放大缩小


    image.png

    SizePolicy和SizeHint使用

    MyWin::MyWin(QWidget *parent)
        : QWidget(parent)
    {
        m_lineEdit = new QLineEdit(this);
        m_textEdit = new QPlainTextEdit(this);
    
        QSize lineEdit_size = m_lineEdit->sizeHint();
        QSize textEdit_size = m_textEdit->sizeHint();
        QSizePolicy lineEdit_policy = m_lineEdit->sizePolicy();
        QSizePolicy textEdit_policy = m_textEdit->sizePolicy();
        // 修改m_lineEdit的默认sizePolicy
        m_lineEdit->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);   
        QVBoxLayout *boxLayout = new QVBoxLayout(this);
        boxLayout->addWidget(m_lineEdit);
        boxLayout->addWidget(m_textEdit);
        this->setLayout(boxLayout);
    }
    

    运行结果


    image.png

    相关文章

      网友评论

        本文标题:Qt学习笔记(二)自定义窗体及布局

        本文链接:https://www.haomeiwen.com/subject/hzolkftx.html