一、创建一个简单的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();
}