1、Widget
Widget:在Qt中倒彰,把窗體稱作Widget审洞。不僅僅是帶邊框的窗口叫Widget,其他所有界面組件待讳,例如芒澜,工具欄、按鈕创淡、文本框痴晦、下拉列表、復(fù)選框等琳彩,都叫Widget誊酌。
它們都繼承于一個共同的父類:QWidget.
2、窗口設(shè)計
(1)窗口的任務(wù):把各個組件組合起來露乏,放在一個大窗體中碧浊。
(2)給每個組件添加事件,使得窗口可以運作施无。
3、窗口類的設(shè)計
(1)定義一個類必孤,派生于QWidget猾骡,寫法和通常定義一個c++類相同,注意在類的開頭添加一個宏 Q_OBJECT敷搪。
(2)窗口類的構(gòu)造函數(shù)必須傳入一個父類指針兴想,其代表該窗口屬于哪個父類窗口。
創(chuàng)建一個派生類
創(chuàng)建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會根據(jù)這兩個信息來決定這個窗口控件的實際尺寸。
窗口的自動布局都是通過布局器對象(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);
}
運行結(jié)果
image.png