QT学习笔记(六)——QT弹出对话框并在主窗口调用对话框的信息

news2024/11/25 0:51:02

QT弹出对话框并在主窗口调用对话框的信息,显示影像

最近封控,大部分时间都在自己学习写代码,有点feel 了哈,自己摸出来一个简单的qt 界面,也实现了自己想要的功能。本篇博客主要记录一下,如何弹出对话框,并在主窗口中利用对话框中的信息。
具体要实现的功能为:
在这里插入图片描述
最终就像下图:
在这里插入图片描述
此前我的几篇笔记已经记录了如何在主窗口中显示两张图像并且图像随滚轮放大缩小的功能。现在就接着上一篇,主要想改进一下打开影像这一步。

1.新建对话框ui

首先新建一个对话框ui,就叫fileDialog.ui吧
在这里插入图片描述
新建完之后,就会发现解决方案管理器里面有它了,双击这个ui,会弹出 QT designer,这个对话框的界面,就在QT designer里面设计吧,只用把左边的控件拖到窗口中的想要的位置中就行了,我这里比较简单,只添加了两个pushbottom和两个Textbrowser。
在这里插入图片描述
右侧的对象查看器和属性可以修改控件的名字,我的控件名如下:
在这里插入图片描述
至此,简单的显示界面就设计好了,下面对两个按钮分别添加槽函数,槽函数的添加可以参考这个博客
添加完了就如下图所示
在这里插入图片描述
我这里添加的两个按钮点击的槽函数分别是on_FileName_clicked1()和n_FileName_clicked1()
保存并关闭QT designer.
在解决方案管理器中,右键fileDialog.ui,编译。

2.新建对话框类

新建对话框类fileDialog
在fileDialog.h中添加头文件#include “ui_fileDialog.h”,并补充类的变量和槽函数,具体代码为:

#pragma once

#include "ui_fileDialog.h"
#include <QFileDialog>

class fileDialog: public QDialog
{
	Q_OBJECT

public:
	fileDialog();
	~fileDialog();
	Ui::Dialog ui;

private:

private slots://槽函数
	void on_FileName_clicked1();
	void on_FileName_clicked2();
	void on_OK_clicked();
};

NOTE:ui_fileDialog.h头文件里是刚刚在qt designer 里面设计的对话框的代码实现,包含了各个控价的定义以及槽函数的连接。如果不想在qt designer里面设计或者修改,可以直接在这个头文件里进行修改。
对应的cpp文件中添加各个函数的实现

#include "fileDialog.h"

#pragma execution_character_set("utf-8")

fileDialog::fileDialog()
{
    ui.setupUi(this);
   
}
fileDialog::~fileDialog()
{}

void fileDialog::on_FileName_clicked1() {
    QString path = QFileDialog::getOpenFileName(this, tr("选择图像"), ".", tr("Images(*.jpg *.png *.bmp)"));
    if (!path.isEmpty()) {
        ui.FileName1->insertPlainText(path);
    }
}

void fileDialog::on_FileName_clicked2() {
    QString path = QFileDialog::getOpenFileName(this, tr("选择图像"), ".", tr("Images(*.jpg *.png *.bmp)"));
    if (!path.isEmpty()) {
        ui.FileName2->insertPlainText(path);
    }
}

void fileDialog::on_OK_clicked() {
    this->accept();
  
}

至此,对话框类就写好了。

3.在主窗口类中添加头文件和对应的槽函数

我主窗口的类叫hqMch.
首先在hqMch.h中添加头文件

#include "fileDialog.h"

然后添加一个对话框成员变量

fileDialog* fileDia;//对话框

再添加两个槽函数

private slots:
	void File_openPar();//这个槽函数对应于点击下图第1步的点击主窗口按钮,即弹出对话框
	void showImage();//对应于下图第3步点击ok,主窗口显示两张影响,对话框消失

在这里插入图片描述
下面在hqMch.cpp中添加槽函数的实现,上图步骤1中点击的那个按钮的定义以及connect到File_openPar()这个函数的部分就不写了,这里只记录该槽函数的实现部分:

void hqMch::File_openPar() {
    fileDia = new fileDialog;
    connect(fileDia->ui.okButton, SIGNAL(clicked()), this, SLOT(showImage()));//连接ok按钮和槽函数
    fileDia->show();
}
void hqMch::showImage() {
    QString path1 = fileDia->ui.FileName1->toPlainText();
    if (!path1.isEmpty())                                    // 检测当前路径是否正确
    {
		QImage* img1 = new QImage();
        if (!(img1->load(path1)))
        {
            QMessageBox::information(this, tr("错误"), tr("打开图像失败!"));
            delete img1;
            return;
        }
        m_image1 = img1->copy();
        imgLabel1->setPixmap(QPixmap::fromImage(*img1));
        imgLabel1->resize(img1->width(), img1->height());
        currentPath1 = path1;
    }
    QString path2 = fileDia->ui.FileName2->toPlainText();
    if (!path2.isEmpty())                                    // 检测当前路径是否正确
    {
        if (!(img2->load(path2)))
        {
            QMessageBox::information(this, tr("错误"), tr("打开图像失败!"));
            delete img2;
            return;
        }
        m_image2 = img2->copy();
        imgLabel2->setPixmap(QPixmap::fromImage(*img2));
        imgLabel2->resize(img2->width(), img2->height());
        currentPath2 = path2;
    }
    this->show();
}

运行一下,发现在fileDialog.h中有报错,错误信息为
在这里插入图片描述
查了很久,是Q_OBJECT, 什么moc没有编译啥的,我也搞不明白,看了很多博客也没解决问题,最后发现,右键fileDialog.h,打开属性,在常规->项类型里面,选择Qt Meta-Object Compiler(moc)。
在这里插入图片描述
再次编译,顺利运行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]SSM计算机毕业设计疫情期间物资分派管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

@Accessors 注解作用

文章目录前言一、Accessors 源码二、Accessors 属性说明1、fluent 属性2、chain 属性3、prefix 属性前言 在最近的工作中&#xff0c;看到 Accessors(chain true) 这样的注解&#xff0c;上网查询了下&#xff0c;他是 lombok 插件包中的一个注解&#xff0c;那么它是什么意思…

如何快速实现一个颜色选择器

在做前端界面开发的时候&#xff0c;遇到需要改变颜色的需求&#xff0c;就需要使用颜色选择器。 针对这个问题&#xff0c;第一想法&#xff0c;自然是H5提供了input color&#xff0c;可以实现。但不出意外的&#xff0c;IE并不支持。而且&#xff0c;chrome的实现方式和fire…

[附源码]Python计算机毕业设计Django个人博客系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【java】输入输出流

文章目录标准输入流标准输出流字节打印流字符打印流案例--复制java文件&#xff08;文件打印流版本&#xff09;对象序列化流序列化流反序列化流serialVersionID&transientProperties作为Map集合的使用Properties作为集合的特有方法Properties与IO流相结合的方法案例--游戏…

必备模块知识——超声波传感器

一、超声波传感器 1、什么是超声波 人们能听到声音是由于物体振动产生的&#xff0c;它的频率在20HZ-20KHZ范围内&#xff0c;超过20KHZ称为超声波&#xff0c;低于20HZ的称为次声波。常用的超声波频率为几十KHZ-几十MHZ。 2、什么是超声波传感器&#xff08;常用的HC-SR04超…

基于PHP+MySQL教室预约管理系统的设计与实现

随着我国国民教育的提高,大学生的数量一直在不断的增加,根据网络资料的查询,发现2012年的大学生人数为600万,这是一个不小的数量,说明了我国教育的进步是巨大的。但是问题也随之产生,每年如此多的大学生就需要大学不断的扩建,可是还是不能满足如此多的学生对教室的使用,所以如何…

【学习笔记】深度学习入门:基于Python的理论与实现-与学习相关的技巧

CONTENTS六、与学习相关的技巧6.1 参数的更新6.2 权重的初始值6.3 Batch Normalization6.4 正则化6.5 超参数的验证六、与学习相关的技巧 6.1 参数的更新 神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题&#xff0c;解决这个问题的过程称为…

YOLOv7(目标检测)数据集、训练、推理过程

一、环境安装&#xff1a; pip install -r requirements.txt pip install torch1.8.2cu111 torchvision0.9.2cu111 torchaudio0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html -i https://pypi.tuna.tsinghua.edu.cn/simple二、修改配置环境 直接看下面…

[附源码]SSM计算机毕业设计血库管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

JavaScript -- 03. 运算符介绍

文章目录运算符1 算数运算符1.1 基础符号1.2 自动类型转换2 赋值运算符3 一元4 自增和自减4.1 自增运算符4.2 -- 自减运算符5 逻辑运算符5.1 逻辑非5.2 逻辑与5.3 逻辑或6 关系运算符7 相等运算符7.1 7.2 7.3 !7.4 !8 条件运算符&#xff08;三元表达式&#xff09;9 运算符的…

专栏 | 解析“全闪对象存储”(三)

在上一节“对象存储的使用场景”中&#xff0c;我们介绍了对象存储在大规模非结构化数据存储、云存储、大数据和数据湖等场景的使用。 那么&#xff0c;优秀对象存储产品是怎样的&#xff1f;如何设计、实现&#xff1f;本节&#xff0c;我们来分析、探讨这些问题。 通过前两…

推荐系统-召回-概述(四):热门推荐

无论个性化多么重要&#xff0c;热门推荐都是推荐系统里不可或缺的一部分。其一、根据“二八定律”&#xff0c;电商系统中的20%的头部内容被80%的流量消费&#xff0c;因此&#xff0c;在产品早期&#xff0c;仅仅推荐热门内容&#xff0c;实施成本不高&#xff0c;且效果也会…

【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)

需要源码请点赞关注收藏后评论区留言~~~ 一、获取地点信息 至于如何集成腾讯地图和调用腾讯地图接口此处不再赘述&#xff0c;有需要请参见我之前的博客 腾讯地图用来搜索POI地点的工具是TencentSearch&#xff0c;通过它查询POI主要分为下列四个步骤&#xff1a; &#xff0…

MySQL---基于CentOS7

在Linux上安装MySQL 本章简单阐述一下&#xff0c;mysq基于centos7的安装步骤 在VM上模拟安装 MySQL版本为&#xff1a;8.0.30 文章目录在Linux上安装MySQL1. MySQL下载卸载MariaDB查看版本卸载2.安装解压mysql压缩包重命名创建用户和组修改权限编写配置文件配置PATH变量初始化…

基于PHP+MySQL集训队员管理系统的设计与实现

ACM是国际大学生程序设计竞赛,这是一个展示大学生风采的平台,但是在ACM报名的时候可能会有很多的队员,管理员对队员的管理是一个繁琐且复杂的过程,通常的管理模式是手工进行管理,这在很大程度上有一些弊端,为了改成这一现状需要一个对应的管理系统出现。 本设计尝试用PHP开发一…

机组运行约束对机组节点边际电价的影响研究(Matlab代码实现)

目录 1 概述 2 日前市场单时段节点电价出清优化模型 2.1 目标函数 2.2 约束条件 3 算例及运行结果 4 结论 5 参考文献 6 Matlab代码及详细文章讲解 1 概述 基于节点边际电价(locational marginal priLMP)的现货巾划lm易能量价值&#xff0c;节点电本确定节点电价&a…

高校部署房产管理系统可实现那些目标?

随着技术的不断进步和升级&#xff0c;以及高校房屋建筑物数量的不断扩充&#xff0c;建立房屋资产管理信息系统进行信息化、数字化、图形化房屋资产管理已经是势在必行。数图互通自主研发FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发…

易基因科技|单细胞甲基化测序低至2500元/样

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。12月活动来袭&#xff5e; 限时特惠&#xff01;单细胞甲基化测序低至2500元/样&#xff01; 易基因高通量单细胞DNA甲基化测序&#xff1a;单细胞DNA甲基化组学研究很大程度上受制于建库…

P3 创建Tensor

前言&#xff1a; 这里面主要讲解一下创建一个Tensor 对象的不同方法 目录&#xff1a; numpy 创建 list 创建 empty 创建 set_default_type 随机数创建 torch.full arange&linespace ones|zeros|eye r…