QT入门

Posted on 2022-04-11 15:42  金色的省略号  阅读(215)  评论(0编辑  收藏  举报

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