范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

第2篇基础(二)编写Qt多窗口程序

  导语
  程序要实现的功能是:程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。
  程序里我们先建立一个工程,设计主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。
  在这一篇还会涉及到代码里中文字符串显示的问题。
  环境是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1  目录一、添加主窗口  二、代码中的中文显示  三、添加登录对话框  四、使用自定义的对话框类  正文
  一、添加主窗口
  1.我们打开Qt Creator,新建Qt Gui应用,项目名称设置为 nWindows  ,在类信息界面保持基类为 QMainWindow  ,类名为 MainWindow  ,这样将会生成一个主窗口界面。
  2.完成项目创建后,打开 mainwindow.ui  文件进入设计模式,向界面上拖入一个 Push Button  ,然后对其双击并修改显示文本为"按钮",如下图所示。
  3.现在运行程序,发现中文可以正常显示。在设计模式可以对界面进行更改,那么使用代码也可以完成相同的功能,下面就添加代码来更改按钮的显示文本。
  二、代码中的中文显示
  1.我们点击Qt Creator左侧的"编辑"按钮进入编辑模式,然后双击 mainwindow.cpp  文件对其进行编辑。在构造函数 MainWindow()  中添加代码:  MainWindow::MainWindow(QWidget *parent) :             QMainWindow(parent),             ui(new Ui::MainWindow) {             ui->setupUi(this);             ui->pushButton->setText("新窗口"); //将界面上按钮的显示文本更改为"新窗口" }
  这里的 ui  对象就是界面文件对应的类的对象,在 mainwindow.h  文件中对其进行了定义,我们可以通过它来访问设计模式添加到界面上的部件。前面添加的按钮部件 Push Button  ,在其属性面板上可以看到它的 objectName  属性的默认值为 pushButton  ,这里就是通过这个属性来获取部件对象的。
  我们使用了 QPushButton  类的 setText()  函数来设置按钮的显示文本,现在运行程序,效果如下图所示。
  2.我们发现,在代码中来设置按钮的中文文本出现了乱码。这个可以有两种方法来解决,一个就是在编写程序时使用英文,当程序完成后使用Qt语言家来翻译整个软件中的显示字符串;还有一种方法就是在代码中设置字符串编码,然后使用函数对要在界面上显示的中文字符串进行编码转换。因为翻译一个软件很麻烦,对于这些小程序,我们希望中文可以立即显示出来,所以下面来讲解第二种方法。
  3.设置字符串编码,可以使用 QTextCodec  类的 setCodecForTr()  函数,一般的使用方法就是在要进行编码转换之前调用该函数,下面我们在 main.cpp  文件中添加代码:  #include  #include "mainwindow.h" #include   //添加头文件 int main(int argc, char *argv[]) {    QApplication a(argc, argv);    QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //设置编码    MainWindow w;    w.show();     return a.exec(); }
  因为我们要在 MainWindow  类中进行编码转换,所以要在创建 w  对象以前调用该函数。这里的 codecForLocale()  函数返回适合本地环境的编码,当然,也可以指定编码,例如要设置为"GB2312",可以使用下面的代码:  QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
  当设置完编码后,就要在显示中文字符串的地方使用 tr()  函数,这里我们需要将修改按钮显示文本的代码更改为:  ui->pushButton->setText(tr("新窗口"));
  现在运行程序,可以发现中文已经可以正常显示了。这里提示一下,如果感觉编辑器中的字体太小,可以使用 Ctrl + +  (同时按下 Ctrl  和加号键)来进行放大,使用 Ctrl+ -  可以缩小。
  三、添加登录对话框
  1.往项目中添加新文件,这里可以在编辑模式的项目目录上点击鼠标右键,然后选择添加新文件菜单,如下图所示。当然也可以在文件菜单中进行添加。
  2.模板选择Qt设计师界面类,然后界面模板选择 Dialog without Button  ,如下图所示。
  3.点击下一步进入类信息界面,这里将类名更改为 LoginDlg  (注意类名首字母一般大写)。如下图所示。
  4.当完成后会自动跳转到设计模式,对新添加的对话框进行设计。我们向界面上拖入一个 Push Button  ,然后更改显示文本为"登录到主界面"。为了实现点击这个按钮后可以关闭该对话框并显示主窗口,我们需要设置信号和槽的关联。点击设计模式上方的
  图标,或者按下F4,便进入了信号和槽编辑模式。按着鼠标左键,从按钮上拖向界面,如下图所示。
  当放开鼠标后,会弹出配置连接对话框,这里我们选择 pushButton  的 clicked()  信号和 LoginDlg  的 accept()  槽并按下确定按钮。如下图所示。
  设置好信号和槽的关联后,界面如下图所示。
  这里简单介绍一下信号和槽,大家可以把它们都看做是函数,比如这里,当单击了按钮以后就会发射单击信号,即 clicked()  ;然后对话框接收到信号就会执行相应的操作,即执行 accept()  槽。一般情况下,我们只需要修改槽函数即可,不过,这里的 accept()  已经实现了默认的功能,它会将对话框关闭并返回 Accepted  ,所以我们无需再做更改。下面我们就是要使用返回的 Accepted  来判断是否按下了登录按钮。
  完成后,可以按下或者按下F3来返回控件编辑模式。
  四、使用自定义的对话框类
  1.按下Ctrl+2返回代码编辑模式,在这里打开 main.cpp  文件,添加代码:  #include  #include "mainwindow.h" #include  //添加头文件 #include "logindlg.h" //添加头文件 int main(int argc, char *argv[]) {    QApplication a(argc, argv);    // QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //设置编码    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));    MainWindow w;    LoginDlg dlg;                        // 建立自己新建的类的对象dlg    if(dlg.exec() == QDialog::Accepted) // 利用Accepted返回值判断按钮是否被按下     {        w.show();                      // 如果被按下,显示主窗口        return a.exec();               // 程序一直执行,直到主窗口关闭    }    else return 0;            //如果没被按下,则不会进入主窗口,整个程序结束运行 }
  在这里,我们先创建了 LoginDlg  类的对象 dlg  ,然后让 dlg  运行,即执行 exec()  函数,并判断对话框的返回值,如果是按下了登录按钮,那么返回值应该是 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  。注意这里还需要添加 #include   头文件包含。有的童鞋可能会问,这里如果多次按下按钮,那么每次都会生成一个对话框,是否会造成内存泄露或者内存耗尽。这里简单说明一下,因为现在只是演示程序, Qt的对象树机制保证了不会造成内存泄露,而且不用写 delete  语句;而且因为是桌面程序,对于这样一个简单的对话框,其使用的内存可以被忽略。
  当然,严谨的童鞋也可以在 mainwindow.h  文件中先定义一个对话框对象,并再在构造函数中进行创建,然后再到这里使用。
  下面大家可以运行一下程序,查看效果。  结语
  这个程序里我们实现了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。

假期总是那么不经用,还没浪够就已余额见底疫情三年,闷得发慌。好不容易盼来五一,想着有五天假期,好好离市省内找个好山好水,好好浪一浪,却不料兄弟学校一个不准离市,便全都泡了汤。于是改计划,准备好好找那些市内寻而未得的山中秘传iPhone14将全面涨价(除美国市场),你觉得是啥原因?iPhone14系列设计乃至于屏幕尺寸都可能带来大改变的iPhone14系列就要登场目前谣传除了基本款的iPhone14也将有Max大屏幕款外,搭载面容识别的浏海部分,也可能将会成这个五一哪里也不去这个五一假期,似乎没有氛围,听不到宣传,看不到热闹,就跟什么都没发生一样。也难怪,毕竟几家欢喜几家愁,出行一次成本都是极高的。拿江苏做例子,出行跨城市一次,回来就是各种居家,各种监北魏绝对是被低估的一个王朝前些年,去山西大同云冈石窟旅游,游览石窟到终点之时,路边立一牌子,乃余秋雨先生所书写中国由此迈向大唐。当时并不理解,后来研读历史,方才对北魏这个少数民族王朝,有了重新的认识,肃然起五一宅的黄金搭档,绝了太阳当空照,五一对我笑。你以为的五一假期在三亚的海边漫步,吹着海风踏着细沙沐浴在金色夕阳下骑着电动车环岛像徒步行者一样登顶山峰,尽享春色又或者在烟花江南小镇体验悠哉慢生活可实际上你专家团为北京野鸭湖国家湿地公园贡献金点子聆听百鸟争鸣,呼吸新鲜空气。近年来,候鸟天堂野鸭湖国家湿地公园成为京郊知名的休闲打卡地。如何统筹生产生活生态三大空间布局,在开展生态教育自然体验生态旅游等方面探索一条绿色发展之路?网评大赛视评去不了远方?在老地方探索新世界春夏之交,天气渐暖,云南各地花香沁人,果香四溢。月季开满呈贡蓝花楹点缀开远宜良会泽阳宗海的田间地头挂满了樱桃东川的早桃大关的枇杷建水的夏黑葡萄盈盈欲滴,引人垂涎。听到这儿,不争气的五一出游护肤攻略,无惧肌肤假后算账五一假期到阳光下走一走,感受初夏的气息吧虽然五月的假期很让人激动,不过最可怕的是,出游回来后的肌肤状况,还会撑得起假后上班营业的KPI吗?图片来自网络,侵删长假马上就要来了,除了要脑卒中可怕,卷土重来危害更大,预防复发,做好这些事我国脑卒中的发生率位居世界第一,已成为威胁我国居民健康的头号杀手,对患病者而言,不仅是身体上的痛苦,更是精神上的巨大痛苦,对于整个家庭而言,在经济精神人力上都是沉重的负担,具有高发脑梗出现或和三种厨房调味料有关,不是盐,你或许无意中吃了很多在我国心脑血管疾病的患病人数逐年上涨,根据权威杂志柳叶刀表示,世界范围内新增的脑梗患者,有接近百分之四十都是来自中国,这已经是一个必须要关注的严肃问题。很多人感觉,自己平时的生活上自驾游西藏,川进青出,出发第一天,看看都带了哪些装备其实这是本人第一次这么长距离的自驾游,平时都是在平原待着,很少开山路,也是初生牛犊不怕虎啊,哈哈哈。18天的自驾游可不是说走就走的旅行,一定要做好规划和充分的准备。自驾游西藏,川进
刚评上院士的马斯克飘了瞄准火星,转移100万吨物资就在刚刚,马斯克背靠大火箭,时隔两年半发表了重磅演讲。与SpaceX的星舰(Starship)最新进展相关今年再将发射50次,还要在未来达到一日三发的节奏。如果月底前通过美国航天管喷发黄金的埃里伯斯火山,它造就了多少壮观景色?南极洲,自发现以来,就是人们所向往的地方。很多人,都认为这个极寒之地蕴含着世界的秘密。而他们在来到这里发掘秘密的同时,也发现了南极洲独特的美。于是,他们将这份独特的美撰写成文章,保地球自转速度465ms,如果地球停止自转,会发生什么?现代行星演化理论认为,我们脚下的地球是在45。5亿年前由众多小行星凝聚而成的,后来还遭到了一颗火星大小的天体撞击。这场发生于地球诞生之初的撞击,塑造了地轴倾斜角和后来的月球,但比地2022年地球开始自救?卫星发现地球变化,解释冬季气候异常原因笔者杰鲁鲁引言不得不说,人类科技的进步,对大自然而言并不算是一个好消息,反而因为人类的过度使用能源,不仅造成地球能源枯竭,使用能源后排放的大量的污染,同样使得地球环境越发糟糕。事实华科大陆培祥团队2篇PRL,强场超快光学创新研究群体研究成果2022年伊始,物理学顶级期刊物理评论快报(PhysicalReviewLetters)接连发表了陆培祥教授领导的超快光学实验室国家自然科学基金委强场超快光学创新研究群体两篇论文。最新发现地球内部正在变冷,将产生什么影响?众所周知,由于温室效应,全球气候仍处于变暖的趋势之中,刚过去的2021平均气温比基期高0。3度。与地表气候变暖相反,最近,瑞士苏黎世理工大学的科学研究指出,地球内部正在变冷。该研究地外生命不来地球的原因是人类太愚蠢了哈佛大学教授直言不讳哈佛大学物理学教授的阿维罗伯博士表示在2017年第一次观测到的恒星间旅行天体奥陌陌时,指出奥陌陌带来了显示存在地外生命的证据。这引起了话题。这个罗伯博士答应了DailyStar的采好奇号火星漫游车轮胎受损,好奇号还能走多远?NASA好奇号火星漫游车,近期传回了一张特殊的轮胎照片。好奇号通过机械臂上的成像仪,拍摄了自己的轮胎,在照片中可以看到,好奇号的轮胎已经出现了严重的破损,甚至直接出现了一个空洞。陨宇宙之旅大爆炸宇宙形成的故事2太阳地球月亮的形成(上)一银河系出现137亿年前,在某种极度混沌的背景下,有一个无维度的包含了宇宙全部物质的密度极大温度极高的奇点,这个奇点发生了大爆炸,由此开始了宇宙时间及空间的膨胀。随着宇宙体积的膨胀光粒打击一根针以光速30万公里秒,撞向地球会如何?在刘慈欣的科幻小说三体中,高等文明有一种武器名为光粒,指的是一种体积质量较小的物体,但其速度接近光速,可以轻而易举摧毁地球,甚至是恒星。毕竟是科幻小说,听起来有些天方夜谭,但其实背运动和学习本是相亲相爱一家人2022年北京冬季奥运会上,18岁少女谷爱凌摘得2金1银。被她滑雪技巧惊艳的同时,大家还发现,她不仅是冠军,还是学霸,曾以高分考入美国斯坦福大学。什么样的家庭教育成就了谷爱凌成为不