Qt-01 Hello Qt!

Hello Qt!

关于Qt的重要性与强大之处不做赘述。

关于Qt我们需要学习什么?

  • 学习如何使用帮助文档 - F1(IDE为QtCreater).
  • 记忆并掌握Qt中的常用类
    • 你不需要记住类中的每一个方法,只需要大致记得功能的分布即可。

Qt Creater 中的常用快捷键

快捷键 功能
F1 帮助文档
F4 头文件.h 和 源文件.cpp 的切换
Ctrl + B 编译
Ctrl + R 编译并运行
F2 函数声明与函数实现之间的切换
Ctrl + / 注释
Ctrl + scroll up/down 放大/缩小字体
Ctrl + shift + direction key 移动代码
Ctrl + f 寻找并替换关键字

命名规范

  • ClassName 类名
  • functionName 函数名
  • ClassName = classname.h = classname.cpp 文件名

Hello Qt!

新建项目的时候注意项目路径中不可以含有中文,Qt不支持中文路径。

HelloQt.pro

项目模板文件,相当于VS中的解决方案文件,用于配置整个项目的环境,链接所有的文件,一般由IDE直接生成,不需要修改。

#-------------------------------------------------
#
# Project created by QtCreator 2021-04-03T16:20:49
#
#-------------------------------------------------

# Qt程序用到的模块
QT       += core gui
# 为了兼容以前的版本
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# 生成的应用程序的名字
TARGET = HelloQt
# 指定生成的makefile类型的 lib
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    
# disables all the APIs deprecated before Qt 6.0.0

#如果你需要用到c++11中才引入的功能,需要添加这一行
CONFIG += c++11

# 源文件 \换行
SOURCES += \
        main.cpp \
        mybutton.cpp \
        mywidget.cpp
# 头文件
HEADERS += \
        mybutton.h \
        mywidget.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targe

注意观察下面代码中的Qt用法,注释中有详细说明。

基本要点:

  • 了解Qt程序的基本结构
  • 窗口和按钮的基本操作
  • Qt的标准输出

main.cpp

#include "mywidget.h"
//Qt中类名和头文件名一样,而且没有.h
#include <QApplication>

//应用程序入口
int main(int argc, char *argv[])
{
    //应用程序类,每一个Qt程序中有且只有一个
    QApplication a(argc, argv);
    //窗口类,默认不显示
    MyWidget w; //顶层窗口
    //显示窗口
    w.show();

    return a.exec();
}

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget> //窗口类
#include <QPushButton> //按钮类

class MyWidget : public QWidget
{
    Q_OBJECT    //如果使用信号槽,必须添加这个宏

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

private:
    QPushButton b1;
    QPushButton *b2;

};

#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"
#include "mybutton.h" //自定义类头文件

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    /*
     * 如果窗口需要依附于另外一个窗口,需要给该窗口指定父类
     * 父窗口显示的时候,子窗口也会随之显示
    */
    //初始化
    b2 = new QPushButton("hello, Qt!", this);
    //b2->setText("Hello, Qt!");
    //b2->show();

    b1.setParent(this);
    b1.setText("Bye, Qt!");

    // 改变位置 -- 移动
    // 窗口坐标系,原点:左上角 x:向右递增 y:向下递增
    b1.move(100, 100);
    b1.resize(100, 50);

    //内存自动回收适用于:
    //1. 从QObject派生的类:  1.直接   2.间接
    //2. 指定父类, 父亲析构的时候,先析构他的子类

    //创建自定义按钮对象
    MyButton* btn = new MyButton(this);
    btn->setText("I'm a button.");
    btn->move(50, 50);

    //设置窗口标题
    this->setWindowTitle("My first Qt Program");
    //this->resize(200, 300);
    this->setFixedSize(200, 300);
    //设置窗口图标
    this->setWindowIcon(QIcon("E:\\QtLab\\HelloQt\\icon.png"));

    //需求: 点击 Bye, Qt! 按钮,关闭窗口。
    //connect(b1, 发出的信号, this, 处理信号的槽函数);
    connect(&b1, &QPushButton::clicked, this, &MyWidget::close);
    /*
     * b1: 信号的发出者,此参数是一个指针
     * &QPushButton::clicked: 信号发出者,内部的一个信号
     *        格式: & + 信号发出者类的名字:: + 信号的名字
     * this: 信号的接收者,此参数是一个指针
     * &MyWidget::close 信号的处理函数,属于this
    */

}

MyWidget::~MyWidget()
{

}

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QPushButton>

class MyButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = nullptr);
    ~MyButton();

signals:

public slots:
};

#endif // MYBUTTON_H

mybutton.cpp

#include "mybutton.h"
#include <QDebug>

MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{

}

MyButton::~MyButton()
{
    //Qt中的标准输出,输出内容在命令行当中。
    qDebug() << "This is my first Qt program!";
}

成果

Qt-01 Hello Qt!

点击Bye,Qt!会退出程序并且在命令行中看到输出。

Qt-01 Hello Qt!

上一篇:Git分支


下一篇:计算机图形学-几何