Qt5(一)编写Qt多窗口程序

4 篇文章 1 订阅
订阅专栏


本文作者:小嗷

微信公众号:aoxiaoji

吹比QQ群:736854977

链接:https://f600lt.github.io/archives/


摘要 : 这篇开始将从基础知识点开始一步一步QT到QT项目(原因就是读者说,QT类很多看不懂),这篇我们将实现多个窗口的切换显示。程序要实现的功能是:

一般来说,我们登录后,登录界面会自动的关闭以及我们需要填写注册信息时,会打开2个界面。

一、创建项目

1.首先打开Qt软件,新建一个Qt应用项目,项目名称设置为hahaha(不要取中文名),在类界面选择基类为QMainWindow、类名为MainWindow,这样将会生成一个主窗口界面。

2.完成创建后,双击ui文件进入设计模式,从左侧部件列表中向界面上拖入一个Push Button到界面,然后双击并修改显示文本为“按钮”,如下图所示:

3.可以通过Ctrl+R快捷键运行一次程序。在设计模式可以对界面进行修改,当然,代码也可以完成相同的功能。如下“二”为代码显示文本。

二、代码显示文本

1.按Ctrl+2快捷键或点击Qt左边的“编辑”按钮进入编辑模式,MainWindow.cpp文件来编辑按钮内容。向构造函数MainWindow()添加一行代码:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton->setText("新窗口"); //将界面上按钮的显示文本更改为“新窗口”
}

这里的ui对象就是界面文件对应的类的实例,在.h文件中对其进行了定义,可以通过它来访问设计模式添加到界面上的部件。前面添加的按钮Push Button,在其属性面板上可以看到它的objectName属性的默认值为pushButton(当然我们自己也可以修改一下),这里就是通过这个属性来获取部件对象的。

这里使用了QPushButton类的setText()功能函数来设置按钮的显示的文字,再次使用Ctrl+R快捷键运行程序,效果如下图所示。

2.我们能观察到,通过代码来设置按钮的显示文字(中文)会覆盖掉以前在设计模式设置的文本。在代码中直接使用中文文字本不是一个好的习惯,建议在编写程序时使用英文,当程序完成后使用Qt语言家来翻译整个软件中要显示的字符串,这个在后面的例子中会讲到。本篇中为了简单快键,一般会直接在代码中使用中文,但是为了以后可以进行国际化翻译,在界面上显示的字符串一般使用tr()函数包含,在这里我们将修改按钮显示文本的代码更改为:

ui->pushButton->setText(tr("新窗口"));

再次运行,如果感觉编辑器中的字体太小,可以使用快键键Ctrl + +(同时按下Ctrl和加号键)来进行放大,使用Ctrl+ -可以缩小,Ctrl+0可以回复默认大小。

三、添加登录界面

1.往项目中添加新文件,这里可以在编辑模式里左侧的项目目录上右击,然后选择添加新文件菜单,如下图所示。当然也可以在文件菜单中进行添加。

选中项目为蓝色

2.模板选择Qt,然后选择Qt设计师界面类,然后界面模板选择Dialog withoutButtons(当然选择其他都是可以),如下图所示。

6.PNG

3.单击下一步进入类信息界面,将类名更改为LoginDlg(注意类名首字母一般大写,而对象名为小写开头)。如下图所示,相关文件会自动改名。

7.PNG

4.当完成后会自动跳转到设计模式,可以对新添加的对话框进行设计。小嗷向界面上拖入一个Push Button按钮,然后更改文本为“XXX”。为了实现点击按钮后可以自动关闭对话框并显示另外窗口,我们要设置信号和槽。点击设计模式上方的一个小便签 图标,或者直接按F4,便进入了设计界面的信号和槽编辑模式。按着鼠标左键,从按钮上拖向界面,操作如下:

9.PNG

当小嗷放开鼠标后,会自动弹出配置连接对话框,这里我们选择pushButton的clicked()点击信号和LoginDlg的accept()接收槽并按下确定按钮。操作如下:

10.PNG

设置好信号和槽的关联后,操作如下:

11.PNG

小嗷这里简单介绍一下信号和槽:(具体请看 第44篇)

大伙可以把它们都看做是函数,比如这里,当点击按钮以后就会发射点击信号,即clicked();然后对话框接收到该信号就会执行相应的操作,即执行accept()槽。通常情况下,我们只需要修改槽函数。不过,这里的accept()已经实现了默认的功能,accept()槽的触发会将对话框自动关闭并返回QDialog::Accepted标识,所以我们要使用返回信号QDialog::Accepted标识来判定是否按下了登录按键。

完成后,可以按下图标或者通过F3快键键来返回控件界面编辑模式。

四、自定义的对话框类

1.按下“Ctrl+2”快键键返回代码编辑模式,在这里打开main.cpp文件,添加代码:(当然大家用多了就会记住)

#include "mainwindow.h"
#include <QApplication>
#include "logindlg.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    LoginDlg dlg;                        // 建立自己新建的LoginDlg类的实例dlg
    if(dlg.exec() == QDialog::Accepted) // 利用Accepted返回值判断按钮是否被按下
    {
        w.show();                      // 如果被按下,显示主窗口
        return a.exec();              // 程序一直执行,直到主窗口关闭
    }
    else return 0;          //如果没有被按下,则不会进入主窗口,整个程序结束运行
}

我们先创建了LoginDlg类的对象dlg,在if语句中让dlg运行,执行exec()函数,这样会显示对话框窗口,然后判断exec()的返回值是否是Accepted,假如用户按下了登录按钮,那么返回值应该是Accepted,这时就显示主界面,并正常执行程序;如果没有按下登录按钮,就结束程序。

当然,当点击按钮就会触发登录界面的关闭,主界面的打开。

现在大家可以运行程序,测试一下效果。

2.上面写了一种登录的简单情况(还有注册,管理和用户模式等等),下面再来写另一种情形。打开mainwindow.ui文件进入设计模式,在“按钮”部件上右击并且选择转到槽菜单,如下图所示。

在弹出的转到槽的对话框中选定clicked()信号并按下确定键。这里,会自动跳转到编辑模式mainwindow.cpp文件的on_pushButton_clicked()函数,这个就是自动生成的槽(也是生成槽其中一种方式),已经自动在mainwindow.h文件中进行了声明。只需更改函数体内容。这里更改为:

void MainWindow::on_pushButton_clicked()
{
   QDialog *dlg = new QDialog(this);
   dlg->show();  
}

小嗷创建了一个对话框对象,然后让其显示,创建时指定的this参数表明这个对话框界面的父类窗口就是MainWindow。注意还需在mainwindow.cpp文件的开头添加#include 头文件包含。有的人可能疑问?如果连续按下按钮多次,则会生成N个对话框,是否可能造成内存泄露或者内存耗尽,卡死状态呢?这里简单说一下,Qt的对象树机制保证了不会造成内存泄露危险,而且不用写想C++中写delete语句,因为指明了对话框的父部件(MainWindow),所以当主界面MainWindow销毁时会自动销毁创建的对话框。当然,比较严谨的人也可以在mainwindow.h文件中先定义一个对话框对象,并通过构造函数中进行创建,然后再到这里使用。最后大家可以运行一下程序,查看最终的结果。

13.PNG

感言.png

你们会发现小嗷的opencv长篇大论动不动破2-3万字,而QT也就4k-5k字。理由很简单:

第一,QT文章只是某个知识点(如果一个小项目百分百破万字)

第二,OpenCV你不懂原理,你copy源码都不知道怎么改。OpenCV原理占的小嗷文章的绝大部分,再怎么说,理清原理,你用C++写也好,java写也好,Py实现也好,小嗷相信你们还是对自己有信心。

哦,还有如果愿意就帮小嗷推荐一下公众号,顺手推荐不强求。

如果不嫌麻烦,支付宝首页搜索527768251,领每日红包

相关文章

44.Qt 定义信号 signals 和 槽 slots 详解

Qt编写多窗口程序实例
12-24
Qt编写多窗口程序的实例,是一个操作系统的内存监视器界面。 适合刚接触Qt编程又不会多窗口编写的那些同学们。
学习QT之多页面布局实战
贝勒里恩的博客
03-03 4828
学习QT之多页面布局实战 本实例最外层是一个分割窗体QSplitter(水平布局),分割窗体左侧是一个QListWidget,右侧是一个自定义类Content。具体框架图如下: Content中为垂直布局,包含一个QStackedWidget和一个按钮的水平布局。 然后自定义了三个界面,分别是基本信息、联系方式、详细资料。将这三个界面加入到QStackWidget中,并将QStackWidget...
Qt--多窗口编程
m0_68672255的博客
05-09 2985
1. QMessageBox 消息对话框(掌握)QMessageBox继承自QDialog,是一种用于通知用户或询问用户一个问题的对话框窗口,这种窗口是模态的,会抢占窗口焦点,必须优先处理。
基于Qt界面的多文档开发
最新发布
weixin_56464957的博客
03-21 897
一直在用MFC,但自己也一直在学习QT,感觉两者的区别其实不是很大,MFC的可操控性比较强,工作也一直用的MFC,几乎很少用QT,但由于过于依赖Windows的API所以移植性不好,但不管是Qt还是MFC其实都只是工具,重点还在于C++、线程、网络编程、STL、以及各种库的引用;以下是我的学习Qt的实践过程(源码会放在网盘里面)。
PyQt5利用Qt designer(QT设计师)使用tab widget和stacked widget实现多页面切换
hubing_hust的专栏
12-20 2万+
本文介绍了如何通过PyQt5Qt designer(QT设计师),使用tab widget和stacked widget控件实现多页面切换功能
QT的多界面操作
weixin_46946968的博客
08-22 1658
QT的多界面操作
多进程界面开发-Qt试玩儿
weixin_30340353的博客
06-28 1410
目录 一、概述 二、效果展示 三、使用方法 1、启动外部进程 2、创建Qt窗口 3、加入到主进程布局 四、嵌入NotePad 五、调用Ping命令 六、嵌入其他QWidget窗体 ...
QT Creator编写多窗口程序
05-18
QT Creator编写多窗口程序
qt编写的窗口多开图片显示器
11-20
程序可打开多张图片的时候,自动为每一张图片打开新的窗口来显示图像,每个窗口都能拖动、缩放图片、并显示鼠标悬停位置的RGB像素值。如果是16位深的灰度图,则可以显示鼠标悬停位置实际的灰度值。 程序支持从...
Qt 编写多窗口程序.pdf
11-29
。。。
windows下QT编写的连接wifi程序
03-27
windows下QT编写的连接wifi程序,使用Native wifi API编写,可以扫描连接WIFI
QT一个多界面自由切换代码
03-24
实现5个WIDGET自由切换,实现按键颜色变化。作为嵌入式LINUX多界面开发必备自选。QT5/QT4都可以使用。
嵌入式 QT界面切换
Lushengshi的博客
05-23 2272
Qt中,多界面切换是指在一个应用程序中使用多个不同的界面,并在它们之间进行切换。这种切换可以是用户触发的,例如点击按钮或选择菜单项,也可以是应用程序自动执行的,例如根据特定条件自动显示不同的界面Qt提供了QStackedWidget类,它是一个容器部件,可以用于存放多个界面,每个界面都是一个QWidget或其子类。通过在QStackedWidget中添加多个界面,可以在需要的时候显示特定的界面,从而实现界面切换的效果。在界面切换过程中,可以使用各种Qt提供的信号和槽机制来处理用户输入和应用程序逻辑。
Qt-多界面编程(界面切换)
热门推荐
tiydy的专栏
10-26 5万+
Qt编程中经常遇到多个界面之间的切换, 比如从登录界面跳转到主界面, 主界面跳转到设置界面,在返回到主界面 下面更加这个流程实现一个例子: 1.在QtCreator集成开发环境上创建MultiInterface工程如下(创建工程的时候会自动创建第一个界面命名为LoginWin) 创建完设计好登录界面的UI--可以参考https://blog.csdn.net/tiydy/artic...
关于QT界面切换
xiaoxuechong的博客
04-19 1571
好好学习!
Qt界面源码 -- 各种控件以及图表
OrangeRen
04-27 5379
Qt界面开发(一)(各种控件以及图表) 资源已经放到 链接:https://pan.baidu.com/s/1sVvQE8uDujVxeKVVSoxyYw 密码:wslk Qt界面开发(各种控件以及图表) 1.Qt简洁窗体 源代码链接:点击打开链接 2.QT漂亮界面   源代码链接:点击打开链接 3.音乐播放器界面 源代码链接:点击打开链...
Qt学习三——程序框架
hmy_19的博客
07-18 597
qt程序框架理解
Qt第六章 多窗口编程
m0_69124108的博客
01-05 2193
多窗口编程
Qt入门第二篇】基础(二)编写Qt多窗口程序
hw5230的博客
12-02 2836
这个程序里我们实现了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。
qt creator编写多线程聊天程序
12-15
编写多线程聊天程序,首先需要创建一个Qt项目并配置所需的库和依赖项。在Qt Creator中,可以选择创建一个新的Qt Widgets应用程序项目。 在程序中,可以使用QThread类创建多个线程,通过继承QThread类并实现run()...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 20.方差/标准差/数学期望/正态分布/高斯函数(数学篇)--- OpenCV从零开始到图像(人脸 + 物体)识别系列 38963
  • 14.图像增强与图像去噪,图像分割之边缘检测(傅里叶变换)--- OpenCV从零开始到图像(人脸 + 物体)识别系列 12830
  • 13.傅里叶变换(数学篇) --- OpenCV从零开始到图像(人脸 + 物体)识别系列 7085
  • 24.双边滤波和中值滤波器(自定义中值滤波器去除椒盐噪声、exp含义)-- OpenCV从零开始到图像(人脸 + 物体)识别系列 6325
  • 23.代码简单实现模拟噪声(图像噪声/一、二阶矩/功率谱密度/at函数/rand函数)-- OpenCV从零开始到图像(人脸 + 物体)识别系列 6244

分类专栏

  • QT 4篇
  • OpenCv - 29篇

最新评论

  • 12.QT + OpenCV打包成应用(以及QT图标问题详细) --- OpenCV从零开始到图像(人脸 + 物体)识别系列

    木风可可: 老哥, 你是怎么在mac上打包qt的opencv的啊?求教

  • 7.图像识别后的目标区域的绘制(基本图形的绘制) --- OpenCV从零开始到图像(人脸 + 物体)识别系列

    落雨随风: 友情提示:临时链接已经失效

  • Qt5(一)编写Qt多窗口程序

    堤比浪高: 哥,图没了

  • 20.方差/标准差/数学期望/正态分布/高斯函数(数学篇)--- OpenCV从零开始到图像(人脸 + 物体)识别系列

    小嗷的日常 回复 weixin_44985743: 自己搜公众号

  • 20.方差/标准差/数学期望/正态分布/高斯函数(数学篇)--- OpenCV从零开始到图像(人脸 + 物体)识别系列

    weixin_44985743: 看不到图片就很难受

大家在看

  • c++中string的函数 用法总结 !!!
  • 提高磁盘可靠性的技术:保障数据安全的四大方法 692
  • LeetCode:经典题之61、160 题解与注解
  • 切面的简单使用-对特定方法实现切面编程
  • 【数据结构与算法 刷题系列】判断链表是否有环(图文详解) 134

最新文章

  • 30.漫水填充算法(堆栈是什么?/图像维数/(A?B:C))--- OpenCV从零开始到图像(人脸 + 物体)识别系列
  • 29.用形态学方法提取水平和垂直的线条(CommandLineParser/adaptiveThreshold/DestroyWindow)--- OpenCV从零开始到图像(人脸 + 物体)识别系列
  • 28.击中击不中变换(二值图像/结构元素/集合/convertTo/saturate_cast/moveWindow)
2018年31篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

两个鬼故事关于写给团队起名金融公司起名大全四个字雕塑公司起名上帝也疯狂2国语版松下电饭煲怎么样彭起的男孩名字大全姓刘的男宝宝起名用什么字好金属制品有限公司起名大全奚姓女孩起名2019出生孩子起名字傲斗凌天2.43免费专业起名网rundll在线起名生日八字美缝公司起名武英高速公路肖姓氏的起名独步山河重庆刚刚是不是地震了最新消息生鲜超市起甚么名字好浙江万朋家校互联家纺商铺起名大全叮当鸡网游小说排行榜完本姓石的女孩起名字皓月牛肉sm女奴人与动物杂交商标名字怎么起好通过新浪上证指数少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化