QT学习笔记(六)——QT弹出对话框并在主窗口调用对话框的信息
创始人
2024-03-06 03:28:19

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 class fileDialog: public QDialog
{Q_OBJECTpublic: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)。
在这里插入图片描述
再次编译,顺利运行。

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...