关于Qt的重要性与强大之处不做赘述。
快捷键 | 功能 |
---|---|
F1 | 帮助文档 |
F4 | 头文件.h 和 源文件.cpp 的切换 |
Ctrl + B | 编译 |
Ctrl + R | 编译并运行 |
F2 | 函数声明与函数实现之间的切换 |
Ctrl + / | 注释 |
Ctrl + scroll up/down | 放大/缩小字体 |
Ctrl + shift + direction key | 移动代码 |
Ctrl + f | 寻找并替换关键字 |
新建项目的时候注意项目路径中不可以含有中文,Qt不支持中文路径。
项目模板文件,相当于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的标准输出
#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(); }
#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
#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() { }
#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
#include "mybutton.h" #include <QDebug> MyButton::MyButton(QWidget *parent) : QPushButton(parent) { } MyButton::~MyButton() { //Qt中的标准输出,输出内容在命令行当中。 qDebug() << "This is my first Qt program!"; }
点击Bye,Qt!
会退出程序并且在命令行中看到输出。