使用QT纯代码创建(查找)对话框详细步骤与代码
一、创建项目文件
打开Qt Creator->文件->新建文件或项目->选择Qt Widgets Application


为项目起名字

输入类的名字

二、 了解每个文件的作用
项目创建完毕之后就会出现以下几个文件,先来分别介绍以下这些文件的作用。
Headers->finddialog.h——很显然这是头文件,这个文件的作用是用来定义类以及前置声明一些类(前置声明会告诉C++编译程序类的存在,而不用提供类定义的所有细节)
Sources->finddialog.cpp——这是一个源文件,这个文件的作用是用来实现上述头文件中的类以及提供类定义的成员函数的细节。
Sources->main.cpp——这也是一个源文件,作用是调用上面自己创建的对话框类,实现(查找)对话框的展示。
Forms->finddialog.ui——这是一个可视化设计的窗体的定义文件,也就是像C#一样拖动控件来实现界面设计。(但本项目完全通过代码来实现对话框,所以暂时不需要打开这个文件进行操作)


实现效果:

三、具体代码【详细注释】
-
finddialog.h
【创建所要用到的窗口部件】
//防止对这个头文件多重包含
#ifndef FINDDIALOG_H
#define FINDDIALOG_H#include <QMainWindow>
#include <QDialog>
#include <QtGui>//QT_NAMESPACE是Qt自己定义的命名空间。
QT_BEGIN_NAMESPACE
namespace Ui { class finddialog; }
QT_END_NAMESPACEclass QCheckBox;//复选框
class QLabel;//一个用于显示文本或图像的窗口部件
class QLineEdit;//单行文本输入框
class QPushButton;//按钮//窗口部件定义方式,parent参数指定了它的父窗口部件,默认值是一个空指针,意味着该对话框没有父对象
class finddialog : public QDialog
{Q_OBJECT //这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力public:finddialog(QWidget *parent = nullptr);//构造函数~finddialog();//析构函数signals://声明当用户单击Find按钮时对话框所发射的两个信号 预处理器会在编译前找到signal并转换成标准C++代码//Qt::CaseSensitivity 是一个枚举类型,有Qt::CaseSensitive(区分大小写)和Qt::CaseInsensitive(不区分大小写)两个取值void findNext(const QString &str,Qt::CaseSensitivity cs);//向后查询void findPrevious(const QString &str,Qt::CaseSensitivity cs);//向前查询private slots://声明了两个槽void findClicked();//当点击find按钮时触发void enableFindButton(const QString &text);// 启用or禁用find按钮private:Ui::finddialog *ui;QLabel *label;//标签QLineEdit*lineEdit;//编辑栏QCheckBox *caseCheckBox;//是否大小写敏感复选框QCheckBox *backwardCheckBox;//查找上一个复选框QPushButton *findButton;//查找按钮QPushButton *closeButton;//关闭按钮
};
#endif // FINDDIALOG_H
-
finddialog.cpp
【初始化创建的窗口部件并实现函数功能】
#include "finddialog.h"
#include "ui_finddialog.h"
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>finddialog::finddialog(QWidget *parent)//构造函数实现: QDialog(parent) //基类, ui(new Ui::finddialog)
{//tr()的原型是QObject::tr(),被它处理的字符串可以使用工具提取出来翻译成其他语言//与操作运算符&表示快捷键label=new QLabel(tr("find &what:"));//展示提示语的标签lineEdit= new QLineEdit;//初始化行编辑器label->setBuddy(lineEdit);//设置了行编译器作为标签的伙伴caseCheckBox=new QCheckBox(tr("Match &case"));//使用快捷键 Alter+C 勾选/取消框backwardCheckBox=new QCheckBox(tr("Search &backward"));//快捷键 Alter+B 勾选/取消框findButton=new QPushButton(tr("&Find"));//按下快捷键 Alter+F 激活按钮findButton->setDefault(true);//让find按钮成为对话框的默认按钮 按下enter时能够按下对应按钮findButton->setEnabled(false);//禁用Find按钮closeButton=new QPushButton(tr("Close"));//因为QObject是finddialog的父对象之一,因此可以省略connect前面的QObject::前缀//只要行编辑器中的文本发生变化,就会调用私有槽使得find按钮可用/禁用connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(enableFindButton(const QString &)));//用户单击Find按钮 调用私有槽判断查找条件并进行查找connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked()));//用户单击close按钮,对话框会关闭connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));//close槽是从QWidget中继承而来的,默认行为就是将窗口部件从用户视野中隐藏起来//使用布局管理器摆放子窗口部件 嵌套实现//QHBoxLayout 水平布局,在水平方向上排列控件,即:左右排列QHBoxLayout *topLeftLayout =new QHBoxLayout;//将lable和lineEdit添加到布局上topLeftLayout->addWidget(label);topLeftLayout->addWidget(lineEdit);//QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。QVBoxLayout *leftLayout = new QVBoxLayout;//将刚才的布局放在左边页面的上方leftLayout->addLayout(topLeftLayout);//将两个复选框放在其下方leftLayout->addWidget(caseCheckBox);leftLayout->addWidget(backwardCheckBox);//设计右边页面QVBoxLayout *rightLayout = new QVBoxLayout;rightLayout->addWidget(findButton);rightLayout->addWidget(closeButton);rightLayout->addStretch();//添加一个伸展器用来占据剩下的空白区域//总页面设计QHBoxLayout *mainLayout =new QHBoxLayout;mainLayout->addLayout(leftLayout);mainLayout->addLayout(rightLayout);setLayout(mainLayout);setWindowTitle(tr("FIND"));//标题设置setFixedHeight(sizeHint().height());//宽高设置
}
//单击Find按钮,会发射两个信号,具体取决于复选框的选择
void finddialog::findClicked()
{QString text=lineEdit->text();//Qt::CaseSensitive区分大小写 Qt::CaseInSensitive不区分大小写//判断caseCheckBox是不是选中,如果选中 就返回 Qt::CaseInsensitive,否则返回Qt::CaseSensitive//用于判断是不是大小写敏感的查找Qt::CaseSensitivity cs=caseCheckBox->isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive;//如果 backwardCheckBox 被选中,就 emit(发出)信号findPrevious(),否则emit信号findNext 查找前一个/后一个if (backwardCheckBox->isChecked()){emit findPrevious(text,cs);}else {emit findNext(text,cs);}
}
//改变了行编辑器中的文本,会调用这个槽
void finddialog::enableFindButton(const QString &text)
{findButton->setEnabled(!text.isEmpty());//如果行编辑器里面有文本,就会启动Find按钮,否则就会禁用按钮
}finddialog::~finddialog()
{delete ui;
}
-
main.cpp
【调用创建的finddialog类实现界面】
#include "finddialog.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);finddialog *dialog=new finddialog;dialog->show();return a.exec();
}
相关文章:
使用QT纯代码创建(查找)对话框详细步骤与代码
一、创建项目文件 打开Qt Creator->文件->新建文件或项目->选择Qt Widgets Application 为项目起名字 输入类的名字 二、 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件,先来分别介绍以下这些文件的作用。 Headers->finddialog.h——很显…...
4945: 二进制转十进制
4945: 二进制转十进制 时间限制: 1.000 Sec 内存限制: 128 MB 提交: 520 解决: 335 [命题人:][下载数据: 30] 提交状态报告 题目描述 将二进制数转成十进制输出 输入 一行,一个二进制数,二进制数的位数小于32位。 输出 一个十进制的整数。…...
java后端技术汇总 + 中间件 + 架构思想
1. 华为OD机考题 答案 2023华为OD统一考试(AB卷)题库清单-带答案(持续更新) 2023年华为OD真题机考题库大全-带答案(持续更新) 2. 面试题 一手真实java面试题:2023年各大公司java面试真题汇总--…...
《机器学习系统:设计与实现》读书笔记一
最近几年一直在做算法工程的工作,对机器学习系统有所涉猎,也很感兴趣。近期发现一本开源书籍《机器学习系统:设计与实现》。去图书馆找了它的纸质版,发现内容不尽相同。在这里结合两者做一个读书笔记。本文是第一篇,主…...
C语言单链表OJ题(较难)
一、链表分割 牛客网链接 题目描述: 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 思路:…...
工业巡检ar沉浸式互动培训体验实现更加直观、生动的流程展示
以往的工业手工巡检效率极低,错误率偏高,漏检问题严重,会因为现场人员对机械设备的早期维护、操作不会,而影响正常交付和服务,智慧工业是工业智能化和信息化的重要体现,在巡检方面自然也要同步提升…...
【Spring】核心容器——依赖自动装配
Spring容器根据bean所依赖的资源在容器中自动查找并注入bean的过程叫做自动装配自动装配的方式 1、按类型 2、按名称(耦合性较高) 3、按构造方法 自动装配特点 1、自动装配用于对引用类型进行依赖注入,不能对简单类型进行操作 2、自动装配的…...
TestNG和Junit5测试框架梳理
一、testNG 1. testNG优势 注解驱动: TestNG 使用注解来标识测试方法、测试类和配置方法,使得测试更具可读性。 并行执行: TestNG 支持多线程并行执行测试,可以加速测试套件的执行。 丰富的配置: 可以通过 XML 配置文…...
算法练习Day46|139.单词拆分
LeetCode:139.单词拆分 139. 单词拆分 - 力扣(LeetCode) 1.思路 字符串是否能被字符串列表中的元素拼接出来,显然是一个背包问题,而且需要排列。 将字典转换为HashSet,利用.contains()方法判断是否存在元素与背包中的子串相同…...
Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)
目录 一.下载及安装及环境配置 1.下载及安装 2.环境变量的配置 3.检测是否安装成功 4.配置Maven 1.更换本地仓库 2. 配置镜像 二.集成eclipse完成案例 1.eclipse前期配置Maven 2.创建Maven工程 一.下载及安装及环境配置 1.下载及安装 下载地址:Maven – Down…...
82 | Python可视化篇 —— Plotly数据可视化
文章目录 什么是 Plotly安装 Plotly创建散点图创建线图创建条形图创建饼图创建热力图3D图(3D Plot)直方图(Histogram)3D表面图(3D Surface Plot)箱线图(Box Plot)散点地图(Scatter Map)量级地图(Choropleth Map)在网页中嵌入 Plotly 图表总结什么是 Plotly Plotly…...
Golang 包详解以及go mod
Golang 中包的介绍和定义 包(package)是多个 Go 源码的集合,是一种高级的代码复用方案,Go 语言为我们提供了 很多内置包,如 fmt、strconv、strings、sort、errors、time、encoding/json、os、io 等。 Golang 中的包可以分为三种:1、系统内置包 2、自定义包 3、第三方包…...
中级课程-SSRF(CSRF进阶)
文章目录 成因危害挖掘 成因 危害 挖掘...
C++命名空间
目录 格式 使用 命名空间的嵌套 使用 using声明 命名空间里面包含了逻辑结构上相互关联的一组类、函数、模板等。命名空间像是一个容器,把某些在逻辑结构上相关的 “ 对象 ” 放在一起并与外界区分。特别的,命名空间里的变量名或类名可以和命名空间外…...
阿里云服务器搭建Magento电子商务网站图文教程
本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程,Magento是一款开源电商网站框架,其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发,支持版本范围从PHP 5.6到PHP 7.1,并使…...
Docker安装 Kibana
目录 前言安装Kibana步骤1:准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2:拉取 kibana 镜像拉取镜像查看已拉取的镜像 步骤3:创建容器创建容器方式1:快速创建容器 步骤…...
数字图像处理 --- 相机的内参与外参(CV学习笔记)
Pinhole Camera Model(针孔相机模型) 针孔相机是一种没有镜头、只有一个小光圈的简单相机。 光线穿过光圈并在相机的另一侧呈现倒立的图像。为了建模方便,我们可以把物理成像平面(image plane)上的图像移到实际场景(3D object)和焦点(focal p…...
基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数
基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数 项目介绍 微指数是基于海量用户行为数据、博文数据,采用科学计算方法统计得出的反映不同事件领域发展状况的指数产品。微指数对于收录的关键词,在指…...
金融反欺诈的应用实践
“根据980起全球重大金融欺诈事件分析,60%的欺诈发生在移动端,同比增长170%。“,在香港近日举办的金融科技沙龙上,顶象金融业务安全专家史博表示,金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…...
Win10启动Jmeter报错提示jmeter.log拒绝访问问题
jmeter版本:5.4.1 查看版本 在dos命令窗口中进入jmeter安装目录下的bin目录中:执行jmeter - v命令 我启动的方式是:进入jmeter安装目录下的bin目录中双击jmeter.bat启动的。结果报错,但是不影响使用。 报错日志如下: …...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
