当前位置: 首页 > news >正文

Qt零散知识点

Qt零散知识点

Qt优点

  • 跨平台
  • 接口简单,易上手
  • 一定程度上简化了内存的回收

Qt创建新项目

第一个窗口类默认的三个基类

  • QWidget
  • QMainWindow
  • QDialog

其中QWidget是QMainWindow和QDialog的基类

一个Qt项目默认创建的文件

  • main.cpp 入口函数
  • pro文件:工程文件

pro文件介绍

QT       += core gui                                # QT包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets     # 4版本以上,加入widget模块
TARGET = AppDemo                                    # 目标,生成的可执行文件
TEMPLATE = app                                      # 模板 Application 应用程序

SOURCES += \                                       # 源文件
    main.cpp \
    MainWindow.cpp

HEADERS += \                                        # 头文件
    MainWindow.h

FORMS += \                                          # UI文件
    MainWindow.ui

main函数(入口函数)介绍

#include "MainWindow.h"

#include <QApplication>             // 应用程序类

/**
 *@brief argc:命令行参数的数量 argv:命令行参数数组
 */
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);     // 应用程序对象,Qt中有且只有一个应用程序对象

    MainWindow w;                   // 创建一个自定义窗口对象
    w.show();                       // 窗口对象默认是不会弹出的,需要调用show函数进行显示

    return a.exec();                // a.exec()进入消息循环机制,阻塞代码
}

宏:Q_OBJECT

提供Qt中信号和槽的机制

Qt Creator

快捷键介绍

运行:CTRL + R
编译:CTRL + B
帮助文档:F1
注释:CTRL + /
查找:CTRL + F
自动对齐:CTRL + I
同名.h和.cpp之间切换:CTRL +F4
将当前代码复制到下一行:CTRL + ALT + ↓

帮助文档位置

D:\Qt\Qt5.13.2\5.13.2\mingw73_64\bin

设置文件编码格式

有时候可能会遇到中文字符显示乱码,此时我们可以在Qt Creator的:
工具->选项->文本编辑器->行为 里面设置文件的编码格式:UTF-8

Qt控件

QPushButton

使用Qt的帮助手册

QPushButton Class
The QPushButton widget provides a command button. More...
Header:
#include <QPushButton> 			// 包含头文件
qmake:
QT += widgets					// 所属模块,如果pro文件里面没有,需要手动加上去
Inherits:
QAbstractButton
Inherited By:
QCommandLinkButton
List of all members, including inherited members 

按钮的一些基本操作

#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QPushButton* pBtn = new QPushButton();

    // 如果是show函数,默认采用的是顶层方式弹出窗口
    // pBtn->show();

    // 预期想让按钮依附于父窗口中,需要设置所属的父窗口对象
    pBtn->setParent(this);
    pBtn->setText("孙悟空");

    // 移动按钮
    pBtn->move(100, 100);

    // 设置按钮的大小
    pBtn->resize(120, 40);

    // 设置主窗口大小
    this->resize(800, 600);

    // 设置窗口标题
    this->setWindowTitle("First App");

    // 设置窗口固定大小(进行此设置后窗口无法拉伸,收缩)
    this->setFixedSize(800, 600);
}

Qt内存模型

编写一个自定义按钮类继承自QPushButton,然后在其析构函数内输出打印消息,将其配置在父窗口MainWindow上面,同时MainWindow析构函数也输出打印消息。

代码:

// NewButton.h
#ifndef NEWBUTTON_H
#define NEWBUTTON_H

#include <QPushButton>

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

signals:

public slots:
};

#endif // NEWBUTTON_H

// NewButton.cpp
#include "NewButton.h"
#include <QDebug>

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

}

NewButton::~NewButton()
{
    qDebug() << "New Button Destruction Call";
}

// MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

// MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QPushButton>
#include "NewButton.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QPushButton* pBtn = new QPushButton();

    // 如果是show函数,默认采用的是顶层方式弹出窗口
    // pBtn->show();

    // 预期想让按钮依附于父窗口中,需要设置所属的父窗口对象
    pBtn->setParent(this);
    pBtn->setText("孙悟空");

    // 移动按钮
    pBtn->move(100, 100);

    // 设置按钮的大小
    pBtn->resize(120, 40);

    // 设置主窗口大小
    this->resize(800, 600);

    // 设置窗口标题
    this->setWindowTitle("First App");

    // 设置窗口固定大小(进行此设置后窗口无法拉伸,收缩)
    this->setFixedSize(800, 600);

    NewButton* pBtnA = new NewButton(this);
}

MainWindow::~MainWindow()
{
    qDebug() << "MainWindow Destruction Call";
    delete ui;
}

输出:

MainWindow Destruction Call
New Button Destruction Call
14:13:53: Debugging has finished

相关文章:

  • Node.js 中处理 Excel 文件的最佳实践
  • SpringBoot中3种优雅停机的实现方式
  • 基于 Qt 的图片处理工具开发(一):拖拽加载与基础图像处理功能实现
  • HTML 嵌入标签对比:小众(<embed>、<object>) 与 <iframe> 的优缺点及使用场景和方式
  • Hierarchical Reinforcement Learning for Course Recommendation in MOOCs论文阅读
  • leetcode 74. 搜索二维矩阵
  • Java从入门到“放弃”(精通)之旅——启航①
  • Ubuntu远程连接Mysql数据库(图文详解)
  • HashMap为什么扩容为原来2倍呢?
  • 栈和队列详细讲解
  • HDCP(五)
  • 【进程通信】 Linux下使用共享内存实现跨进程通信:基于C++的完整示例
  • rancher 采用ingerss ssl 部署nginx+php项目
  • c# 使用NPOI将datatable的数据导出到excel
  • OSPF不规则区域和LSA
  • 【Java学习】AI时代下如何学习Java语言开发
  • 【算法学习计划】回溯 -- 记忆化搜索
  • StringTemplate修仙指南:字符串处理的“言出法随“大法
  • 智能物联网网关策略部署
  • vue3+vite+js项目引入electron构建跨平台桌面应用
  • 网站 流量攻击/宁波搜索引擎优化seo
  • 网站开发者排名/谷歌推广培训
  • 做婚礼请柬的网站有哪些/快速建站平台
  • 做视频网站的上市公司/莆田seo推广公司
  • 南京模板建站定制网站/亚洲长尾关键词挖掘
  • 泰安北京网站建设公司/比较有名的个人网站