所有控件和窗体都有一个共同的父类,Qwidgt。
新建项目时最好选择继承QWidgt
QWidget w; w.setGeometry(x, y, width, height); w.setWindowTitle("my window"); w.move(x, y); w.show(); QLineEdit 单行文本框QPlainTextEdit 普通多行文本框QPushButton 按钮头文件Vsqt.h
#include "ui_Vsqt.h" #include <QPushButton> //添加控件的头文件 //父类叫做Vsqt,继承QMainwindow class Vsqt : public QMainWindow { Q_OBJECT //这个宏必须添加 public: Vsqt(QWidget *parent = Q_NULLPTR) ; private: Ui::VsqtClass ui; QPushButton* my_btn; private slots: };源文件Vsqt.cpp
#include "Vsqt.h" //将父类窗口添加进来 //构造函数 Vsqt::Vsqt(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); my_btn = new QPushButton(this); //每个窗口在创建时指定父窗口 my_btn->setText("hello qt"); my_btn->setGeometry(100, 100, 200, 50); }源文件main.cpp
int main(int argc, char *argv[]) { //应用程序类 QApplication a(argc, argv); //顶层窗口Vsqt对象 w Vsqt w; w.setGeometry(100, 50, 600, 400); w.setWindowTitle("my window "); w.move(200, 50); w.show(); //死循环,接收到事件后跳出去 return a.exec(); }new完的对象交给父窗口管理,会自动进行管理,因此不用手动delete
使用步骤
在源文件中创建布局器,并将需要布局的控件add进来最后一步,使用布局器 //创建布局器,layout统一设定为局部变量 QVBoxLayout* layout2 = new QVBoxLayout(); layout->addWidget(m_lineEdit); layout->addWidget(m_plainEdit); //使用布局器 this->setLayout(layout);布局器会根据控件默认的sizeHint和 sizePolicy 来进行布局
源文件
#include "Vsqt.h" #include<QHBoxLayout> //横向布局器 #include<QVBoxLayout> //纵向布局器 Vsqt::Vsqt(QWidget *parent) : QWidget(parent) { //创建控件对象 m_lineEdit = new QLineEdit(this); m_plainEdit = new QPlainTextEdit(this); m_pushButton = new QPushButton(this); m_pushButton->setText("OK"); //创建横向布局器 QHBoxLayout* layout1 = new QHBoxLayout(); layout1->addWidget(m_lineEdit); layout1->addWidget(m_pushButton); //创建纵向布局器,并将layout1添加进来 QVBoxLayout* layout2 = new QVBoxLayout(); layout2->addLayout(layout1); layout2->addWidget(m_plainEdit); this->setLayout(layout2); }效果图