一、创建一个简单的Qt程序
启动QtCreate:New Project -> Application -> Qt Widgets Application -> Choose -> 文件名不能使用中文!
基类选择:QWidget
命名规范
//命名规范 类名 首字母大写,单词和单词之间首字母大写 函数名 变量名 首字母小写,单词和单词之间首字母大写
widget
widget,窗体部件,该词起源于window gadget 窗口配件,这两个词,相当于Windows系统中的控件(control)和容器(container)
按钮、菜单、滚动条和框架都是窗口部件,窗口部件也可以包含其他窗口部件
工程文件 .pro( 自动生成的 )
#------------------------------------------------- # # Project created by QtCreator 2022-04-11T14:26:56 # #------------------------------------------------- QT += core gui //QT 包含的模块: core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = HelloQt //目标生成的.exe程序的名称 TEMPLATE = app //模板 应用程序模板 Application SOURCES += \ //源文件 main.cpp \ widget.cpp HEADERS += \ //头文件 widget.h
头文件.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> //包含头文件QWiget窗口类 class Widget : public QWidget //继承QWidget { Q_OBJECT //Q_OBJECT宏,允许类中使用信号和槽的机制 public: Widget(QWidget *parent = 0); //构造函数 ~Widget(); }; #endif // WIDGET_H
.cpp 文件
#include "widget.h" #include <QLabel> //包含头文件QLabel Widget::Widget(QWidget *parent) : QWidget(parent) { //创建一个QLabel QLabel *label = new QLabel("Hello Qt!"); //让label对象 依赖widget窗口中 label->setParent(this); } Widget::~Widget() { }
main文件(入口 )
#include "widget.h" #include <QApplication> //包含一个应用程序类的头文件 //main程序入口, argc命令行变量的数量 argv命令行变量的数组 int main(int argc, char *argv[]) { //a是应用程序的对象,在Qt中,应用程序对象,有且仅有一个 QApplication a(argc, argv); //窗口对象,父类是QWiget Widget w; //窗口对象默认不会显示,必须要调用 show方法显示窗口 w.show(); //让应用程序对象进入消息循环 //让代码阻塞到这行 return a.exec(); }
二、建立连接
Qt的窗口部件可以发射信号(signal),信号可以与函数 ( 在 这里称为槽,slot) 相连接,以便在发射信号时,槽可以得到自动执行
#include "widget.h" #include <QLabel> #include <QPushButton> Widget::Widget(QWidget *parent) : QWidget(parent) { QLabel *label = new QLabel("Hello Qt!"); label->setParent(this);
QPushButton *button = new QPushButton("退出!"); button->setParent(this);
button->move(0,50); QObject::connect( button, &QPushButton::clicked , this, &Widget::close ); } Widget::~Widget() { }
三、窗口部件的布局
用布局(layout)来管理窗口部件的几何形状,三个不同的布局:QHBoxLayout、QVBoxLayout、QGridLayout,QHBoxLayout类将小部件水平(horizontally)排列,QVBoxLayout类将小部件垂直(vertically)排列,QGridLayout类在网格(grid)中布局小部件
布局管理器类,不是窗口部件,它们 派生自QLayout,也就是进一步 派生自QObject
#include <QApplication> #include <QHBoxLayout> #include <QSlider> #include <QSpinBox> int main(int argc, char *argv[]) { QApplication a(argc, argv); //主窗体 QWidget *window = new QWidget; window->setWindowTitle("Enter You Age"); //子窗体: 微调框 滑块 QSpinBox *spinBox = new QSpinBox; QSlider *slider = new QSlider(Qt::Horizontal); spinBox->setRange(0,130); slider->setRange(0,130); //子窗体建立连接 QObject::connect(spinBox,SIGNAL(valueChanged(int)), slider,SLOT(setValue(int))); QObject::connect(slider,SIGNAL(valueChanged(int)), spinBox,SLOT(setValue(int))); spinBox->setValue(35); //布局 QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(spinBox); layout->addWidget(slider); window->setLayout(layout); //显示 window->show(); return a.exec(); }