Qt内存管理、UI编辑器、客制化组件、弹出对话框、常用部件类

头文件的小技巧

#include <QtWidgets>
// 在自动生成的 .h 里面加上此句

适用条件:
在这里插入图片描述

QT 的内存管理

当父窗体被关闭时,子部件的内存会自动释放。
对象树是一种管理对象生命周期的机制。当一个对象被添加到另一个对象的子对象列表中时,Qt 会自动将其设置为父对象的子对象,并在父对象被销毁时自动销毁其所有子对象。这种机制可以避免内存泄漏和悬空指针的问题。

UI 编辑器

注意事项

UI 编辑器会在项目构建目录中自动生成一个 ui_xxx.h(构建一次后才会生成),来表示 UI 编辑器界面的代码,属于自动生成的,一定不要修改。代码中如果要修改界面中的某个部件的属性,应该用 ui->xxx 获取到部件,然后调用相应的方法修改。

在这里插入图片描述

// 自动生成的 ui_widget.h(可忽略)

/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 5.2.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_WIDGET_H
#define UI_WIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QWidget>
#include <mybutton.h>

QT_BEGIN_NAMESPACE

class Ui_Widget
{
public:
    Mybutton *newBtn;
    QLineEdit *lineEdit;

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QStringLiteral("Widget"));
        newBtn = new Mybutton(Widget);
        newBtn->setObjectName(QStringLiteral("newBtn"));
        newBtn->setGeometry(QRect(410, 510, 112, 34));
        lineEdit = new QLineEdit(Widget);
        lineEdit->setObjectName(QStringLiteral("lineEdit"));
        lineEdit->setGeometry(QRect(220, 120, 561, 231));

        retranslateUi(Widget);

        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QApplication::translate("Widget", "Widget", 0));
        newBtn->setText(QApplication::translate("Widget", "newBtn", 0));
    } // retranslateUi

};

namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_WIDGET_H

信号与槽

在设计界面,右键相应的组件,选择“转到槽”选项,会自动跳转到槽函数。
这种方法不会有 connect 的体现,遵循的是 qt 内部名字匹配规则。
匹配规则:on_AAA_BBB —— 代表连接 AAA 对象 的 BBB 信号 到此槽。
比如要响应 对象 myBtn 的 clicked 信号,就会生成 on_myBtn_clicked 的槽。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_loginBtn_clicked();				// 连接 对象loginBtn 的 clicked信号 到 此槽

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
// widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

Widget::~Widget()
{
    delete ui;
}

void Widget::on_loginBtn_clicked()
{
    if (ui->usrEdit->text() == "0828" && ui->pwdEdit->text() == "0828")
    {
        this->close();
    }
}

客制化组件

按钮的样式及功能

定制一个按钮,实现自定义样式及功能。比如每个按钮拥有自己的 key 值,按钮字体的默认颜色是红色,背景色灰色。大小固定为 90*70。
在这里插入图片描述

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QPushButton>
#include <QTWidgets>

class Mybutton : public QPushButton
{
    Q_OBJECT

    int key;
public:
    explicit Mybutton(QWidget *parent = 0);
    int getKey() { return this->key; }
    void setKey(int key) { this->key = key; }

signals:

public slots:

};

#endif // MYBUTTON_H

mybutton.cpp

#include "mybutton.h"

Mybutton::Mybutton(QWidget *parent) :
    QPushButton(parent)
{
    key = 0;

    this->setStyleSheet("color: red; background-color: grey");
    this->setFixedSize(90, 70);
    this->setText("默认文字");

}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

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

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:

private:
    Ui::Widget *ui;
    Mybutton *btn;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(480, 300);

    btn = new Mybutton(this);
    qDebug() << "Key(before): " << btn->getKey();
    btn->setKey(17);
    qDebug() << "Key(after): " << btn->getKey();
}

Widget::~Widget()
{
    delete ui;
}

在这里插入图片描述

提升部件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(480, 300);

//    btn = new Mybutton(this);
//    qDebug() << "Key(before): " << btn->getKey();
//    btn->setKey(17);
//    qDebug() << "Key(after): " << btn->getKey();

    qDebug() << "Key: " << ui->newBtn->getKey();
}

Widget::~Widget()
{
    delete ui;
}

在这里插入图片描述

内建对话框

对话框帮助文档要关注 Static Public Members 部分,参考帮助文档 demo 使用即可。

QMessageBox

在这里插入图片描述

QInputDialog

在这里插入图片描述

QColorDialog

在这里插入图片描述

QFontDialog

在这里插入图片描述

QFileDialog

在这里插入图片描述

QString	getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), \
		const QString & dir = QString(), const QString & filter = QString(), \
				QString * selectedFilter = 0, Options options = 0);
	
功能:打开文件对话框
参数:
	parent:父窗口,一般填this
	caption:弹出窗口的标题
	dir:默认打开目录
	filter:过滤条件
	剩余参数默认即可
返回值:成功会返回打开的文件路径,如果失败那么返回空

弹出文件选择窗口

在界面加入一个按钮和一个文本编辑框,点击按钮后弹出文件选择窗口,选择文件后把文件绝对路径增加到文本编辑框内。取消选择弹出对话框提示“打开失败”。
在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H

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

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_newBtn_clicked();

private:
    Ui::Widget *ui;
    Mybutton *btn;
};

#endif // WIDGET_H

打开生成的 ui_widget.h 文件,找到拖拽产生的 QLineEdit,复制对象名字(直接记住也行)。
在这里插入图片描述

在 widget.cpp 中,使用复制下来的名字(记住现找也行)。
在这里插入图片描述

widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

Widget::~Widget()
{
    delete ui;
}

void Widget::on_newBtn_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                            		"e:", tr("Files (*.chm)"));

    if (fileName.isEmpty())
    {
        qDebug() << "Failed to open file";
        return;
    }

    ui->lineEdit->setText(fileName);		// lineEdit 名字 与 UI 生成的名字 保持一致
}

在这里插入图片描述
在这里插入图片描述

QT 常用的部件类

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/228179.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习应用 | 使用 MATLAB 进行异常检测(下)

在使用MATLAB 进行异常检测&#xff08;上&#xff09;中&#xff0c;我们探讨了什么是异常值&#xff0c;简单的一维数据异常检测问题&#xff0c;针对高维数据的有监督异常检测方法。 在&#xff08;下&#xff09;篇中&#xff0c;我们将和大家一起探讨无监督异常检测。 没…

“身份证信息批量核验:高效解决管理难题,轻松提升工作效率“

尊敬的读者们&#xff0c;您是否曾经因为身份证信息的核验而感到烦恼&#xff1f;是否曾经因为手动核验而感到繁琐和耗时&#xff1f;现在&#xff0c;我们向您介绍一款全新的工具——身份证信息批量核验器&#xff0c;它将帮助您一键解决管理难题&#xff0c;让工作事半功倍&a…

netty源码:(9)ChannelId

ChannelId代表了一个Channel的全局标识符。它提供了asShortText和asLongText两个方法来返回对应的字符串

C语言printf的输出格式大全及颜色字体打印

不同类型的数据有不同形式的打印格式&#xff0c;熟知了printf的不同输出格式会让后边的学习事半功倍。 文章目录 %d%i打印十进制整形数据标志&#xff08;flags&#xff09;%u打印无符号十进制%o 打印无符号八进制%x %X打印大写或小写十六进制%f打印浮点数%e %E科学计数法打印…

Java几种深拷贝方式比较

Java的深度拷贝分为克隆&#xff08;实现Java的Clone接口&#xff09;和序列化&#xff08;实现Java的Serializable接口&#xff09;两种&#xff0c;由于序列化有不同的方式&#xff0c;下面分析一下每种的注意事项和性能对比。 一、继承Cloneable接口 可以使用Java提供的Clo…

Java基础50题: 21.实现一个方法printArray, 以数组为参数,循环访问数组中的每个元素,打印每个元素的值.

概述 实现一个方法printArray, 以数组为参数,循环访问数组中的每个元素,打印每个元素的值. 代码 public static void printArray(int[] array) {for (int i 0; i < array.length; i) {System.out.println(array[i] " ");}System.out.println();}public static…

class060 拓扑排序的扩展技巧【算法】

class060 拓扑排序的扩展技巧【算法】 算法讲解060【必备】拓扑排序的扩展技巧 2023-12-7 22:23:02 code1 P4017 最大食物链计数 // 最大食物链计数 // a -> b&#xff0c;代表a在食物链中被b捕食 // 给定一个有向无环图&#xff0c;返回 // 这个图中从最初级动物到最顶…

Atlassian Confluence 模板注入代码执行漏洞风险通告

近期&#xff0c;亚信安全CERT通过监控发现&#xff0c;Atlassian 公司发布了一则安全公告&#xff0c;针对 Confluence 数据中心和 Confluence 服务器存在的远程代码执行漏洞&#xff08;CVE-2023-22522&#xff09;进行了修复。该漏洞涉及 Confluence 页面中的模板注入问题&a…

加载类型库/dll 时出错

软件使用DataSnap数据库ERP管理系统&#xff0c;用户更换操作系统&#xff0c;出现“加载类型库/dll 时出错”信息。 通常思路&#xff0c;从大环境查找&#xff0c;怀疑操作系统中的C运行库出现错误&#xff0c;搜索一翻末果。百度搜索也找不到结果。 通过Dll修复大师、全能修…

ArcMap中构建金字塔详解

1.金字塔 1.1 定义 金字塔可用于改善性能。它们是原始栅格数据集的缩减采样版本&#xff0c;可包含多个缩减采样图层。金字塔的各个连续图层均以 2:1 的比例进行缩减采样。如下图所示。从金字塔的底层开始每四个相邻的像素经过重采样生成一个新的像素&#xff0c;依此重复进行…

【Lidar】Python实现点云CSF布料滤波算法提取地面点

这两天会持续更新一下Python处理点云数据的教程&#xff0c;大家可以点个关注。今天给大家分享一下点云的经典算法&#xff1a;CSF布料模拟算法。 1 CSF算法简介 CSF算法&#xff0c;全称为Cloth Simulation Filtering&#xff0c;是一种基于欧几里得空间中最小生成树思想的聚类…

什么是网站?

这篇文章是我学习网站开发&#xff0c;阶段性总结出来的。可以帮助你 通俗易懂 地更加深刻理解网站的这个玩意。 一&#xff0c;网站和网页的区别&#xff1f; 网站是由一个个网页组成。我们在浏览器上面看到的每一个页面就是网页&#xff0c;这些 相关的 网页组成一个网站。…

【Selenium+Webmagic】基于JAVA语言实现爬取js渲染后的页面,附有代码

事先声明 笔者最近需要查看一些数据&#xff0c;自己挨个找太麻烦了&#xff0c;于是简单的学了一下爬虫。笔者在这里声明&#xff0c;爬的数据只为学术用&#xff0c;没有其他用途&#xff0c;希望来这篇文章学习的同学能抱有同样的目的。 枪本身不坏&#xff0c;坏的是使用枪…

EOCR-CT电流互感器与SR-CT区别简介

电流互感器CT是&#xff08;Current Transformers&#xff09;的缩写&#xff0c;是将一次测的大电流&#xff0c;按比列变为适合通过测量仪表或保护装置的变换设备。 EOCR外部电流互感器3CT和SR-CT是专为保护大负载的组合使用&#xff0c;电流变比100&#xff1a;5&#xff0…

如何部署自己的服务渲染页面为Pdf文档

前言 相信大家都觉得官方发布的文档生成模块https://docs.mendix.com/appstore/modules/document-generation/很有用&#xff0c;它能把Mendix页面像素级导出到Pdf文件中&#xff0c;这对于归档等业务非常有价值。但部署依赖公有云提供的渲染服务&#xff0c;而中国本土用户对…

常用API(一)

API(全称 Application Programming Interface&#xff1a;应用程序编程接口) 就是别人写好的一些程序&#xff0c;给我们直接拿去调用即可解决问题的。 包 什么是包&#xff1f; 包是用来分门别类的管理各种不同程序的&#xff0c;类似于文件夹&#xff0c;建包有利于程序的管…

python数据分析总结(pandas)

目录 前言 df导入数据 df基本增删改查 数据清洗 ​编辑 索引操作 数据统计 行列操作 ​编辑 df->types 数据格式化 ​编辑 日期数据处理 前言 此篇文章为个人python数据分析学习总结&#xff0c;总结内容大都为表格和结构图方式&#xff0c;仅供参考。 df导入数…

在线教育小程序正在成为教育行业的新生力量

教育数字化转型是目前教育领域的一个热门话题&#xff0c;那么到底什么是教育数字化转型&#xff1f;如何做好教育数字化转型&#xff1f; 教育数字化转型是利用信息技术和数字工具改变和优化教育的过程。主要特征包括技术整合、在线学习、个性化学习、大数据分析、云计算、虚拟…

视频封面提取:精准截图,如何从指定时长中提取某一帧图片

在视频制作和分享过程中&#xff0c;一个有吸引力的封面或截图往往能吸引更多的观众点击观看。有时候要在特定的时间段内从视频中提取一帧作为封面或截图。如果每个视频都手动提取的话就会耗费很长时间&#xff0c;那么如何智化能批量提取呢&#xff1f;现在一起来看下云炫AI智…

VUE2+THREE.JS 按照行动轨迹移动人物模型并相机视角跟随人物

按照行动轨迹移动人物模型并相机视角跟随人物 1. 初始化加载模型2. 开始移动模型3. 人物模型启动4. 暂停模型移动5. 重置模型位置6. 切换区域动画7. 摄像机追踪模型8. 移动模型位置9.动画执行 人物按照上一篇博客所设定的关键点位置&#xff0c;匀速移动 1. 初始化加载模型 //…