使用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按钮启用

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp小程序实现上传图片功能,并显示上传进度

效果图&#xff1a; 实现方法&#xff1a; 一、通过uni.chooseMedia(OBJECT)方法&#xff0c;拍摄或从手机相册中选择图片或视频。 官方文档链接: https://uniapp.dcloud.net.cn/api/media/video.html#choosemedia uni.chooseMedia({count: 9,mediaType: [image,video],so…

数据结构---图

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

高效解决Anaconda Prompt报错Did not find VSINSTALLDIR这类问题

文章目录 回忆问题解决问题step1step2 回忆问题 类似于划红线部分然后还有很多行的报错信息&#xff0c;最后一行肯定是红色划线部分 解决问题 step1 找到 D:\Anaconda\envs\pytorch\etc\conda\activate.d在这个文件夹内会有两个文件&#xff0c;删除 vs2017_compiler_v…

RDMA qp数量和RDMA性能

QP数量上升性能下降 ​​​​​​https://icnp21.cs.ucr.edu/papers/icnp21camera-paper30.pdf 在现代云数据中心中&#xff0c;大规模分布式应用通常构建在许多机器上&#xff0c;需要使用大量并发连接进行频繁的网络通信[4]–[6]。但是&#xff0c;RDMA的性能会随着连接数的…

最长重复子数组(力扣)动态规划 JAVA

给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出&#xff1a;3 解释&#xff1a;长度最长的公共子数组是 [3,2,1] 。 示例 2&#xff1a; 输…

谈谈IP地址和子网掩码的概念及应用

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、IP地址的概念 二、IP地址的分类 1、A类 …

Eclipse如何设置快捷键

在eclopse设置注释行和取消注释行 // 打开eclipse&#xff0c;依次打开&#xff1a;Window -> Preferences -> General -> Key&#xff0c;

ubuntu中安装python

最简单方便的是 apt 使用第三方的 ppa 源&#xff0c;然后直接 apt 安装 python3.9 安装 software-properties-common 获取add-apt-repository命令&#xff1a;apt install -y software-properties-common添加第三方的 ppa 源&#xff1a;add-apt-repository ppa:deadsnakes/p…

【计算机视觉|生成对抗】改进的生成对抗网络(GANs)训练技术

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Improved Techniques for Training GANs 链接&#xff1a;[1606.03498v1] Improved Techniques for Training GANs (arxiv.org) 摘要 本文介绍了一系列应用于生成对抗网络&#xff08;G…

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/ Idea下载官网一键直达&#xff1a; 官网一键直达

UniApp 制作高德地图插件

1、下载Uni插件项目 在Uni官网下载Uni插件项目&#xff0c;并参考官网插件项目创建插件项目. 开发者须知 | uni小程序SDK 如果下载下来项目运行不了可以参考下面链接进行处理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官网下载对应SD…

一、进入sql环境,以及sql的查询、新建、删除、使用

1、进入sql环境 》》》mysql -u root -p 》》》输入密码 2、sql语言的分类 3、注意事项&#xff1a; 4、基础操作&#xff1a; &#xff08;1&#xff09;查询所有数据库&#xff1a; show databases; 运行结果&#xff1a; &#xff08;2&#xff09;创建一个新的数据库&…