QT自学笔记(入门基础)

it2024-01-24  70

QT

入门基础

所有控件和窗体都有一个共同的父类,Qwidgt。

新建项目时最好选择继承QWidgt

QWidget w; w.setGeometry(x, y, width, height); w.setWindowTitle("my window"); w.move(x, y); w.show(); QLineEdit 单行文本框QPlainTextEdit 普通多行文本框QPushButton 按钮

添加控件

头文件中,先定义一个父窗口 Vsqt在父类中将控件对象作为成员变量添加进来在源文件中对Vsqt的构造函数进行修改,设置控件的一些基本属性

头文件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

窗口布局

纵向布局 QVBoxLayout

使用步骤

在源文件中创建布局器,并将需要布局的控件add进来最后一步,使用布局器 //创建布局器,layout统一设定为局部变量 QVBoxLayout* layout2 = new QVBoxLayout(); layout->addWidget(m_lineEdit); layout->addWidget(m_plainEdit); //使用布局器 this->setLayout(layout);

布局器会根据控件默认的sizeHint和 sizePolicy 来进行布局

窗口大小调整策略

m_lineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 用来设置窗口大小是否可以调整sizeHint 和 sizePolicy 是决定其大小的主要依据

小练习

QHBoxLayout 横向布局器QVBoxLayout 纵向布局器

源文件

#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); }

效果图

最新回复(0)