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

使用QT可视化设计对话框详细步骤与代码

一、创建对话框基本步骤

  • 创建并初始化子窗口部件
  • 把子窗口部件放到布局中
  • 设置tab键顺序
  • 建立信号-槽之间的连接
  • 实现对话框中的自定义槽

首先前面三步在这里是通过ui文件里面直接进行的,剩下两步则是通过代码来实现

二、项目创建详细步骤

创建新项目

为项目命名

 

 为类起名并选择基类为QDialog

【如果这里没有选择QDialog而是选择默认的QMainWindow的话会导致后面运行的时候setupUi函数报错】

三、ui可视化对话框界面设计实现详细步骤

双击 gotocelldialog.ui文件打开设计界面,左侧为工具栏,右侧则是进行设计的界面,只需要将左侧的部件拖拽到界面即可实现

先拖拽一个标签、一个行编辑器、一个水平分隔符和两个按钮到界面上

然后修改Lable部件的text为——&Cell Location:

修改第一个按钮的属性,将其text改为——OK,其objectName改为——okButton,其enable属性改为false,其default属性改为——true

 

修改第二个按钮的属性,将其text改为——Cancel,其objectName改为——cancelButton

修改整个窗体的标题与名字——点击空白部分,然后看属性部分

到这里部件属性设置完成

此时界面显示如下:

接下来就是对部件进行绑定还有对布局进行设计

将lable部件与lineEdit部件绑定,点击左上角“编辑”——选择“Edit Buddies”——单击Lable然后将红色箭头与lineEdit连接起来——点击左上角“编辑”——选择“Edit Widget”即可

对布局进行设计

同时选中label还有lineEdit——鼠标右键——布局——水平布局

同时选中下面三个部件——鼠标右键——布局——水平布局

选择窗体中的空白——鼠标右键——布局——调整大小——调整成自己想要的大小——选择窗体中空白——鼠标右键——布局——垂直布局

布局设计完成结果如下:

 

设置Tab键顺序

点击左上角“编辑”——选择“Edit Tab Order”——根据所想顺序进行选择即可

四、对话框实现

①初始实现——使用在ui中设计的窗体、创建QDialog对象、将对象传递给窗体、运行

只需要在main.cpp文件内对代码进行书写

#include "gotocelldialog.h"#include <QApplication>
#include<QDialog>
#include"ui_gotocelldialog.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);//定义窗体、创建QDialog对象、将对象传递给窗体【对话框能展示,但功能没有实现】Ui::GoToCellDialog ui;//定义该窗体QDialog *dialog=new QDialog;//创建一个QDialog对象ui.setupUi(dialog);//把QDialog对象传递给setupUi函数dialog->show()return a.exec();
}

此时会显示前面所设计的界面,但是按钮功能与行编辑器的限制都没有实现

②进阶实现——定义新类继承Ui初始化的GoToCellDialog类还有QDialog并利用信号-槽实现功能

 gotocelldialog.h 代码【新类定义】

#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H#include<QDialog>
#include"ui_gotocelldialog.h"//创建一个新类,让此类同时从QDialog和Ui::GoToCellDialog中继承出来,并且实现前面所涉及的窗体中所需要实现的功能
class GoToCellDialog : public QDialog,public Ui::GoToCellDialog
{Q_OBJECTpublic:GoToCellDialog(QWidget *parent = nullptr);//构造函数~GoToCellDialog();//析构函数
private slots:void on_lineEdit_textChange();//实现对OK按钮的启用/禁用
private:Ui::GoToCellDialog *ui;
};
#endif // GOTOCELLDIALOG_H

gotocelldialog.cpp 代码【信号与槽绑定与实现】

#include<QtGui>
#include "gotocelldialog.h"//构造函数的实现
GoToCellDialog::GoToCellDialog(QWidget *parent): QDialog(parent)
{setupUi(this);//初始化窗体//设置一个检验器来限制输入的范围  QRegExpValidator内置检验器后面带一个正则表达式QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");//正则表达式//允许一个大写/小写字母,后面跟着一个范围为1-9的数字,后面再跟一个0个、1个或者2个0-9的数字lineEdit->setValidator(new QRegExpValidator(regExp,this));//第一个connect已经通过setupUi自动建立了//因为setupUi()函数会自动将那些符合on_objectName_signalName()命名惯例的任意槽与其相应的objectName的signalName()信号连接到一起//connect(lineEdit,SIGNAL(textChange(const QString &)),this,SLOT(on_lineEdit_textChange()));//accept()槽是QDialog的,其可以将对话框返回的结果变量设置为QDialog::Accept(其值等于1)connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));//当点击OK按钮时,触发accept()槽//reject()槽是QDialog的,其可以将对话框的值设置为QDialog::Reject(其值等于0)connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));//当点击Cancel按钮时,触发reject()槽//可以利用对话框的结果变量判断用户是否单击了OK按钮
}//实现对OK按钮的启用/禁用
void GoToCellDialog::on_lineEdit_textChange(){//根据行编辑器中是否包含了有效的单元格位置坐标,从而实现对OK按钮的启用或者禁用//hasAcceptableInput()用于判断行编辑器中内容的有效性  有效则禁用,无效则启用okButton->setEnabled(lineEdit->hasAcceptableInput());
}GoToCellDialog::~GoToCellDialog()
{delete ui;
}

main.cpp 代码

#include "gotocelldialog.h"#include <QApplication>
#include<QDialog>
#include"ui_gotocelldialog.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);//进阶想法——定义新类继承Ui初始化的类还有QDialog并利用信号-槽实现功能GoToCellDialog *dialog=new GoToCellDialog;dialog->show();return a.exec();
}

运行结果:

当行编辑器中的文字不符合输入规定时不允许输入且OK按钮禁用;当行编辑器中内容符合输入规定时OK按钮启用

 

相关文章:

使用QT可视化设计对话框详细步骤与代码

一、创建对话框基本步骤 创建并初始化子窗口部件把子窗口部件放到布局中设置tab键顺序建立信号-槽之间的连接实现对话框中的自定义槽 首先前面三步在这里是通过ui文件里面直接进行的&#xff0c;剩下两步则是通过代码来实现 二、项目创建详细步骤 创建新项目 为项目命名 为…...

TFTP Server

简介 TFTP&#xff08;Trivial File Transfer Protocol,简单文件传输协议&#xff09;是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69。 TFTP和FTP的区别 安全性区别 FTP支持登录安全&…...

登录验证码实现

Hutool代码改造 Hutool 有参考文档&#xff1b;很多工具类&#xff1b;把一些功能都封装好&#xff1b;都不用你自己去写&#xff1b;直接调用它的工具类 它这里会详细告诉你引入方式Hutool <dependency><groupId>cn.hutool</groupId><artifactId>hu…...

2. 获取自己CSDN文章列表并按质量分由小到大排序(文章质量分、博客质量分、博文质量分)(阿里云API认证)

文章目录 写在前面步骤打开CSDN质量分页面粘贴查询文章url按F12打开调试工具&#xff0c;点击Network&#xff0c;点击清空按钮点击查询是调了这个接口https://bizapi.csdn.net/trends/api/v1/get-article-score用postman测试调用这个接口&#xff08;不行&#xff0c;认证不通…...

在Windows和MacOS环境下实现批量doc转docx,xls转xlsx

一、引言 Python中批量进行办公文档转化是常见的操作&#xff0c;在windows状态下我们可以利用changeOffice这个模块很快进行批量操作。 二、在Windows环境下的解决文案 Windows环境下&#xff0c;如何把doc转化为docx&#xff0c;xls转化为xlsx&#xff1f; 首先&#xff…...

【网络编程(二)】NIO快速入门

NIO Java NIO 三大核心组件 Buffer&#xff08;缓冲区&#xff09;&#xff1a;每个客户端连接都会对应一个Buffer&#xff0c;读写数据通过缓冲区读写。Channel&#xff08;通道&#xff09;&#xff1a;每个channel用于连接Buffer和Selector&#xff0c;通道可以进行双向读…...

【Vue-Router】嵌套路由

footer.vue <template><div><router-view></router-view><hr><h1>我是父路由</h1><div><router-link to"/user">Login</router-link><router-link to"/user/reg" style"margin-left…...

MySQL索引总结

MySQL索引总结 1.索引的概念、作用与使用场景 本质上就是减少读写磁盘的次数。 索引是一种特殊的文件&#xff0c;包含这对数据表中所有记录的引用指针&#xff0c;可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;每种类型都有对应数据结构实现。 …...

谷粒商城第十二天-基本属性销售属性管理功能的实现

目录 一、总述 二、前端部分 三、后端部分 四、总结 一、总述 前端的话&#xff0c;依旧是直接使用老师给的。 前端的话还是那些增删改查&#xff0c;业务复杂一点的话&#xff0c;无非就是设计到多个字段多个表的操作&#xff0c;当然这是后端的事了&#xff0c;前端这里…...

利用安全区域的概念解决移动端兼容不同手机刘海的问题

移动端 安全区 在做移动端的项目时&#xff0c;由于不同的手机设备设置的不同&#xff0c;有些手机在上方有刘海的设计&#xff0c;我们需要做适配&#xff0c;即把想要展示的内容放在安全区域内展示。 1.自定义导航栏 在pages.json中修改如下配置 {"path":"…...

数据结构---图

这里写目录标题 图的基本概念和术语基本概念和术语1基本概念和术语2 图的类型定义抽象数据类型定义二级目录二级目录 一级目录二级目录二级目录二级目录二级目录二级目录二级目录 图的基本概念和术语 基本概念和术语1 V代表顶点的有穷非空集合 E代表边的有穷集合 n为顶点 有向…...

励志长篇小说《周兴和》书连载之十八 内外交困搞发明

内外交困搞发明 路灯发出昏黄而惺忪的光影。 周兴和疲惫地从车间出来&#xff0c;拖着沉重的腿爬上几级石阶&#xff0c;准备回到家里去。可走到家门口&#xff0c;他想了想&#xff0c;又折了回去&#xff0c;在车间的一条长条椅子上&#xff0c;他用一块试验用的废料当枕头&…...

web基础入门和php语言基础入门 二

web基础入门和php语言基础入门 二 MySQL入门-续MySQL之数据查询操作MySQL其他知识点 php语言基础入门认识PHPPHP的工作流程安装PHP环境认识一个PHP程序PHP基础知识点进入正题 PHP与WEB交互PHP与MySQL交互总结 MySQL入门-续 MySQL之数据查询操作 WHERE 子句&#xff0c;条件限…...

typeScript 之 Array

工具: PlayGround 源码&#xff1a;GitHub TypeScript 数组简介 在TypeScript中&#xff0c; 使用[]表示数组&#xff0c; 它的结构&#xff1a;let valus: 类型名[] 数据; // 数字 let numList: number[] [1, 2, 3]; // 字符串 let strList: string[] ["hello"…...

【题解】二叉树的前中后遍历

文章目录 二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历 二叉树的前序遍历 题目链接&#xff1a;二叉树的前序遍历 解题思路1&#xff1a;递归 代码如下&#xff1a; void preorder(vector<int>& res, TreeNode* root){if(root nullptr) return;//遇到空节点…...

文件操作/IO

文件 文件是一种在硬盘上存储数据的方式&#xff0c;操作系统帮我们把硬盘的一些细节都封装起来了&#xff0c;程序员只需要了解文件相关的接口即可&#xff0c;相当于操作文件就是间接的操作硬盘了 硬盘用来存储数据&#xff0c;和内存相比硬盘的存储空间更大&#xff0c;访问…...

基于Java+SpringBoot+vue前后端分离共享汽车管理系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

Mac RN环境搭建

RN ios android原生环境搭建有时候是真恶心&#xff0c;电脑环境不一样配置也有差异。 我已经安装官网的文档配置了ios环境 执行 npx react-nativelatest init AwesomeProject 报错 然后自己百度查呀执行 gem update --system 说是没有权限&#xff0c;执行失败。因为Mac…...

log4j教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Log4j是Apache的一个开源项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件&#xff0c;甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&#xff1b;…...

DP——背包问题

DP——背包问题 01背包问题分数背包问题多重背包问题完全背包问题 当我们谈论背包问题时&#xff0c;可以想象成一个小朋友要去旅行&#xff0c;但是他只能带一个容量有限的背包。他有一些物品可以选择放入背包&#xff0c;每个物品都有自己的重量和价值。小朋友的目标是在不超…...

MASA模组全家桶中文资源包:为中文玩家打造的无缝本地化体验终极指南

MASA模组全家桶中文资源包&#xff1a;为中文玩家打造的无缝本地化体验终极指南 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 你是否曾经在Minecraft中面对MASA模组复杂的英文界面感到…...

AI代理实战能力评估:MLE-Bench基准测试深度解析与工程启示

1. 项目概述与核心价值最近在跟进AI代理&#xff08;AI Agent&#xff09;领域的发展&#xff0c;特别是它们在自动化复杂工作流方面的潜力。作为一个在机器学习工程一线摸爬滚打了十来年的从业者&#xff0c;我深知从数据清洗、特征工程、模型调优到实验管理的全流程&#xff…...

OBS计时器插件:如何用6种模式轻松掌控直播时间

OBS计时器插件&#xff1a;如何用6种模式轻松掌控直播时间 【免费下载链接】obs-advanced-timer 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-timer 还在为直播时间管理头疼吗&#xff1f;作为内容创作者的你&#xff0c;是否经常因为时间控制不当而影响…...

Python潮汐计算新境界:pyTMD如何解决海洋工程中的三大核心挑战

Python潮汐计算新境界&#xff1a;pyTMD如何解决海洋工程中的三大核心挑战 【免费下载链接】pyTMD Python-based tidal prediction software 项目地址: https://gitcode.com/gh_mirrors/py/pyTMD 在海洋工程、港口建设和海洋科学研究中&#xff0c;精确的潮汐预测是确保…...

3步搞定B站m4s转MP4:开源工具让你的缓存视频重获新生

3步搞定B站m4s转MP4&#xff1a;开源工具让你的缓存视频重获新生 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的烦恼&am…...

macOS百度网盘终极加速方案:解锁SVIP高速下载功能

macOS百度网盘终极加速方案&#xff1a;解锁SVIP高速下载功能 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 对于macOS用户而言&#xff0c;百度网盘的…...

3步解决方案:用BG3 Mod Manager彻底解决博德之门3模组管理难题

3步解决方案&#xff1a;用BG3 Mod Manager彻底解决博德之门3模组管理难题 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 博德之门3模组管理器&…...

Postman与JMeter协同实战:接口功能验证与性能压测一体化方案

1. 这不是工具组合秀&#xff0c;而是接口测试工程师的生存现场你有没有过这样的经历&#xff1a;开发刚提测&#xff0c;接口文档还没写完&#xff0c;测试环境连基础鉴权都配不齐&#xff0c;但上线时间表已经钉死在下周三&#xff1f;这时候打开Postman点几下&#xff0c;发…...

英雄联盟终极自动化工具:5分钟快速上手League Akari完整指南

英雄联盟终极自动化工具&#xff1a;5分钟快速上手League Akari完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为繁琐的游戏操作…...

光栅图像的核心特性:揭秘那个“放大就糊“的视觉之谜

一、一个让我"开窍"的乐高积木故事 我有个朋友是乐高玩家&#xff0c;他给我讲过一个让我至今难忘的故事。他说他用乐高拼了一幅蒙娜丽莎的画像——用几千块标准乐高颗粒&#xff0c;按特定的颜色和位置摆放&#xff0c;远远看去真的有蒙娜丽莎那神秘微笑的轮廓。 他…...