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

使用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 为项目起名字 输入类的名字 二、 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件&#xff0c;先来分别介绍以下这些文件的作用。 Headers->finddialog.h——很显…...

4945: 二进制转十进制

4945: 二进制转十进制 时间限制: 1.000 Sec 内存限制: 128 MB 提交: 520 解决: 335 [命题人:][下载数据: 30] 提交状态报告 题目描述 将二进制数转成十进制输出 输入 一行&#xff0c;一个二进制数&#xff0c;二进制数的位数小于32位。 输出 一个十进制的整数。…...

java后端技术汇总 + 中间件 + 架构思想

1. 华为OD机考题 答案 2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09; 2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 2. 面试题 一手真实java面试题&#xff1a;2023年各大公司java面试真题汇总--…...

《机器学习系统:设计与实现》读书笔记一

最近几年一直在做算法工程的工作&#xff0c;对机器学习系统有所涉猎&#xff0c;也很感兴趣。近期发现一本开源书籍《机器学习系统&#xff1a;设计与实现》。去图书馆找了它的纸质版&#xff0c;发现内容不尽相同。在这里结合两者做一个读书笔记。本文是第一篇&#xff0c;主…...

C语言单链表OJ题(较难)

一、链表分割 牛客网链接 题目描述&#xff1a; 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 思路&#xff1a;…...

工业巡检ar沉浸式互动培训体验实现更加直观、生动的流程展示

以往的工业手工巡检效率极低&#xff0c;错误率偏高&#xff0c;漏检问题严重&#xff0c;会因为现场人员对机械设备的早期维护、操作不会&#xff0c;而影响正常交付和服务&#xff0c;智慧工业是工业智能化和信息化的重要体现&#xff0c;在巡检方面自然也要同步提升&#xf…...

【Spring】核心容器——依赖自动装配

Spring容器根据bean所依赖的资源在容器中自动查找并注入bean的过程叫做自动装配自动装配的方式 1、按类型 2、按名称&#xff08;耦合性较高&#xff09; 3、按构造方法 自动装配特点 1、自动装配用于对引用类型进行依赖注入&#xff0c;不能对简单类型进行操作 2、自动装配的…...

TestNG和Junit5测试框架梳理

一、testNG 1. testNG优势 注解驱动&#xff1a; TestNG 使用注解来标识测试方法、测试类和配置方法&#xff0c;使得测试更具可读性。 并行执行&#xff1a; TestNG 支持多线程并行执行测试&#xff0c;可以加速测试套件的执行。 丰富的配置&#xff1a; 可以通过 XML 配置文…...

算法练习Day46|139.单词拆分

LeetCode:139.单词拆分 139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 1.思路 字符串是否能被字符串列表中的元素拼接出来&#xff0c;显然是一个背包问题&#xff0c;而且需要排列。 将字典转换为HashSet,利用.contains()方法判断是否存在元素与背包中的子串相同…...

Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)

目录 一.下载及安装及环境配置 1.下载及安装 2.环境变量的配置 3.检测是否安装成功 4.配置Maven 1.更换本地仓库 2. 配置镜像 二.集成eclipse完成案例 1.eclipse前期配置Maven 2.创建Maven工程 一.下载及安装及环境配置 1.下载及安装 下载地址&#xff1a;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声明 命名空间里面包含了逻辑结构上相互关联的一组类、函数、模板等。命名空间像是一个容器&#xff0c;把某些在逻辑结构上相关的 “ 对象 ” 放在一起并与外界区分。特别的&#xff0c;命名空间里的变量名或类名可以和命名空间外…...

阿里云服务器搭建Magento电子商务网站图文教程

本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程&#xff0c;Magento是一款开源电商网站框架&#xff0c;其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发&#xff0c;支持版本范围从PHP 5.6到PHP 7.1&#xff0c;并使…...

Docker安装 Kibana

目录 前言安装Kibana步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2&#xff1a;拉取 kibana 镜像拉取镜像查看已拉取的镜像 步骤3&#xff1a;创建容器创建容器方式1&#xff1a;快速创建容器 步骤…...

数字图像处理 --- 相机的内参与外参(CV学习笔记)

Pinhole Camera Model&#xff08;针孔相机模型&#xff09; 针孔相机是一种没有镜头、只有一个小光圈的简单相机。 光线穿过光圈并在相机的另一侧呈现倒立的图像。为了建模方便&#xff0c;我们可以把物理成像平面(image plane)上的图像移到实际场景(3D object)和焦点(focal p…...

基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数

基于新浪微博海量用户行为数据、博文数据数据分析&#xff1a;包括综合指数、移动指数、PC指数三个指数 项目介绍 微指数是基于海量用户行为数据、博文数据&#xff0c;采用科学计算方法统计得出的反映不同事件领域发展状况的指数产品。微指数对于收录的关键词&#xff0c;在指…...

金融反欺诈的应用实践

“根据980起全球重大金融欺诈事件分析&#xff0c;60%的欺诈发生在移动端&#xff0c;同比增长170%。“&#xff0c;在香港近日举办的金融科技沙龙上&#xff0c;顶象金融业务安全专家史博表示&#xff0c;金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…...

Win10启动Jmeter报错提示jmeter.log拒绝访问问题

jmeter版本&#xff1a;5.4.1 查看版本 在dos命令窗口中进入jmeter安装目录下的bin目录中&#xff1a;执行jmeter - v命令 我启动的方式是&#xff1a;进入jmeter安装目录下的bin目录中双击jmeter.bat启动的。结果报错&#xff0c;但是不影响使用。 报错日志如下&#xff1a; …...

从“特洛伊咖啡壶”到华为LiteOS:一个技术博主眼中的物联网发展简史与实战入门

从“特洛伊咖啡壶”到华为LiteOS&#xff1a;一个技术博主眼中的物联网发展简史与实战入门 1991年剑桥大学计算机实验室的咖啡壶&#xff0c;可能连它的发明者都没想到会成为物联网史上的里程碑。那台通过摄像头监控咖啡状态的简陋装置&#xff0c;如今看来像极了物联网的"…...

告别花屏!用Arduino TFT_eSPI库驱动SPI LCD显示中文的保姆级避坑指南

告别花屏&#xff01;用Arduino TFT_eSPI库驱动SPI LCD显示中文的保姆级避坑指南 第一次点亮SPI接口的LCD屏幕时&#xff0c;那种兴奋感就像打开了新世界的大门。但随之而来的花屏、乱码、内存溢出等问题&#xff0c;又让人瞬间跌入谷底。作为过来人&#xff0c;我完全理解这种…...

解决Leaflet加载天地图的最大痛点:突破17级缩放限制的两种实战方案

突破Leaflet中天地图17级缩放限制的工程实践 第一次在项目中集成天地图时&#xff0c;那种流畅的加载体验让人印象深刻——直到用户突然问&#xff1a;"为什么这个区域无法继续放大了&#xff1f;"这才发现Leaflet默认的17级缩放限制成了项目交付的绊脚石。作为国内主…...

前端交互性能优化实例

前端交互性能优化实例解析 在当今快节奏的互联网时代&#xff0c;用户体验直接影响产品的成败。前端交互性能优化是提升用户体验的关键&#xff0c;尤其在移动端和复杂Web应用中更为重要。本文将通过几个实际案例&#xff0c;介绍如何通过优化前端交互性能&#xff0c;减少卡顿…...

DolphinScheduler 3.x 集成 DataX 保姆级教程:从环境变量到HDFS权限,一次搞定所有坑

DolphinScheduler 3.x 与 DataX 深度集成实战&#xff1a;权限控制与性能调优全解析 在数据工程领域&#xff0c;ETL 流程的稳定性和效率直接影响着数据仓库的质量和时效性。DolphinScheduler 作为一款开源的分布式工作流调度系统&#xff0c;与阿里巴巴开源的 DataX 数据同步工…...

22岁天才小伙破解“AI黑箱“:融合DeepSeek思路,参数效率翻倍!

本报讯 人工智能领域近日传来震动性消息&#xff1a;一位年仅22岁的年轻创业者&#xff0c;仅凭公开资料和对"第一性原理"的深刻理解&#xff0c;竟成功推导出了Anthropic公司号称"捂得最严实"的Claude Mythos大模型核心架构&#xff0c;并将完整代码开源至…...

从MySQL备份到云上容灾:手把手教你根据RPO/RTO需求,选择最划算的技术方案(附成本对比)

从MySQL备份到云上容灾&#xff1a;手把手教你根据RPO/RTO需求&#xff0c;选择最划算的技术方案&#xff08;附成本对比&#xff09; 当深夜的报警短信惊醒你&#xff0c;发现数据库服务器宕机时&#xff0c;第一个闪过的念头往往是"数据丢了多少&#xff1f;多久能恢复&…...

别再手动抄数据了!用NI-VISA和C语言自动读取仪器数据的保姆级教程

从零构建自动化仪器数据采集系统&#xff1a;NI-VISA与C语言实战指南 实验室里&#xff0c;你盯着示波器屏幕上跳动的波形&#xff0c;手指在计算器和笔记本键盘间来回切换——这场景是否熟悉&#xff1f;数据采集本是科研与工程的核心环节&#xff0c;却因手动记录的低效成为许…...

Python 常用的内置函数

Python内置函数速查指南本文整理了Python常用的内置函数&#xff0c;按功能分类为&#xff1a;数学运算类&#xff1a;abs()、round()、pow()等数值计算函数类型转换类&#xff1a;int()、str()、list()等数据类型转换函数序列操作类&#xff1a;len()、sorted()、zip()等序列处…...

React 乐观更新(Optimistic UI):在网络波动环境下维持 React 状态与服务端最终一致性

欢迎来到“乐观 UI”的游乐场&#xff1a;如何在网络波动中假装一切都很完美大家好&#xff0c;我是你们的老朋友&#xff0c;一个在 React 深渊里摸爬滚打多年的资深工程师。今天我们不聊那些虚头巴脑的架构图&#xff0c;也不谈什么微前端、Serverless&#xff0c;咱们来聊点…...