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

第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  文件中先定义一个对话框对象,并再在构造函数中进行创建,然后再到这里使用。
  下面大家可以运行一下程序,查看效果。  结语
  这个程序里我们实现了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。

这4种蔬菜餐桌上很常见,但很多人都吃错了,现在知道还不晚想必大家都知道,多吃蔬菜有益健康,可以给我们的身体补充维生素及各种营养物质,所以一日三餐总是少不了它们的身影。但有一些我们经常吃的蔬菜做法都错了,反而浪费了其中的营养价值,比如这4病毒无处不在深入了解甲型流感,预防病毒侵袭!季节性流感高峰来临,你准备好了吗?甲型流感知识科普什么是甲型流感?甲型流感是一种由甲型流感病毒引起的感染疾病。甲型流感病毒通常分为多种亚型,其中最为常见的是H1N1和H3N2。与其全国政协委员齐向东民营经济在推动共同富裕方面发挥重要作用北京商报讯(记者方彬楠陆珊珊)3月7日,在全国政协十四届一次会议第二场委员通道上,第十四届全国政协委员全国工商联副主席奇安信集团董事长齐向东表示,民营经济已成为我国社会主义市场经济CBA解立彬三外援需要调整更多不能因一点伤病就有骄娇二气7日,首钢男篮在主场以85比94输给了深圳男篮。主教练解立彬在赛后发布会表达了需要球队三外援贡献更多力量的意思。解立彬说我们的三外援需要调整地更多,国内球员有不少都是带伤带病去坚持7种食物是胃胀气克星,每天吃一些,缓解胃胀胃酸!胃胀气在临床上是指病人感觉胃脘撑胀,外观又有胀满的形态表现的一种病症。胃胀气吃些防治胃胀气的食物很有效。那么吃什么治胃胀气呢?下面我们就来了解一下!吃什么治胃胀气1香蕉香蕉具有促进前列腺好不好,看看舌头就知道,医生教你分辨不同证型前列腺增生前列腺增生究竟该怎么调理?为什么吃了药病情反反复复,中医治病讲究辨证论治,效果不好,还是因为辨证不够准确,今天崔医生教你如何从舌象判断自己有没有前列腺增生判断自己属于哪种证型。首先输球还嘴硬!沙特队主帅称国青只会防守再踢99次国青都不可能赢球昨晚国青队在U20亚洲杯第二轮爆出惊天大冷门,在控球率只有24,射门只有对手一半的情况下,依靠下半场的两个反击进球,20击败了卫冕冠军沙特队,出线形势由危转安,下场比赛对阵两战皆输探索白起坑杀40万赵国俘虏的根本原因文多芬奇编辑多芬奇白起是中国历史上著名的将领,他的军事才能和战功都非常突出,被誉为兵家神话。而他屠杀赵国士兵的事件也是历史上备受争议的一段历史。本文将从历史背景战争原因战术决策和后3月7日CBA赛事及消息汇总,网红大战广州胜同曦,CBA收回新疆股份大家好,我是小北聊球,每日我都会更新CBA每日赛事结果及一些重要消息,有感兴趣的小伙伴可以关注我,一同交流,欢迎打扰。昨日晚上CBA第三阶段进行了4场比赛,具体胜负情况及比分为(主十年前贾秀全经历各种风波,如今还能度过,他的运气太好了最近大家都在对陈戌源和李铁进去争论,认为他有可能把贾秀全牵连进去,虽然他被请去调查,大家开始对他的前途十分担忧,可是没过几天,他安全着陆,而且一点事情都没有,而且现在他又重新走上工安卓系统防爆型加固平板电脑安卓系统防爆型加固平板电脑视频加载中安卓系统防爆型加固平板电脑安卓系统防爆型加固平板电脑安卓系统防爆型加固平板电脑安卓系统防爆型加固平板电脑市面上的防爆型加固平板电脑有很多,主要分
当年红极一时的奇志大兵闹掰,19年后再看,两人状况各不相同以说湖南特色方言而出名的师徒奇志大兵,当时可是首屈一指的相声演员。是湖南台的相声节目台柱子,还多次登上过春晚。后来两人由于创作理念不和而分手。分开后,两人的热度大减,盛况不复从前。人老了,走不动了,有三件事最好守口如瓶,这才是真聪明图源自网络侵权请联系删除俗语说,家有一老,如有一宝。一个家庭若有一个足够睿智足够明事理的老人,那么该家庭很容易就会成为被人羡慕的对象。因为这样的老人,不仅能以主心骨的形象,稳住整个真正的聪明人,大都有这些习惯,你占了几个?情感情感事务所我要上头条曾经听别人说过这样一句话弱者单纯抱怨世界,智者适应世界,强者改变世界。是啊,虽然我们都生活在同一个世界里,但是我们对生活的态度却是截然不同的。那些能够依靠自2022中国高校录取分排名!川大重大上交遇冷,两电一邮受热捧2022年中国各名校在湖南理科录取分数线排行榜!川大重大上交遇冷,两电一邮受热捧,北大力压清华!中国知名高校,2022年在湖南的表现如何,谁被捡漏了?谁是大赢家?一起来看看,各高校胡闹的北欧!挪威有高糖税,丹麦对单身狗撒肉桂,养猪要硕士学位北欧五国指的是瑞典丹麦挪威芬兰和冰岛,在很多人的心里,这片深入北极圈的荒袤之地就是诗与远方。北欧这几个国家的历史背景紧密相连,生活方式也相近而且如今都是发达国家。今天,小编为大家盘天气预报今日27号暴雨大雨中心确认,60年一遇冷夏?看农谚咋说导读天气预报今日27号暴雨大雨中心确认,60年一遇冷夏?看农谚咋说今天时间到了7月27号,中伏第二天,昨天进中伏我们当地出现了超强强对流天气,早晨出现狂风暴雨,吵醒我的不是知了,确北京一男子划皮划艇上班成水乡了?北京一男子划皮划艇上班成水乡了?北京一男子划皮划艇上班相关部门不提倡上班,无非是公交地铁开车两轮车步行。但是居然有人划船去上班。在北京,一名男子划船上班。(据北京日报沸点搜狐海报北2022中国学生营养与健康发展大会在呼和浩特市成功召开7月23日,由中国学生营养与健康促进会呼和浩特市人民政府共同主办,蒙牛集团承办的2022中国学生营养与健康发展大会在内蒙古自治区呼和浩特市成功召开。教育部体育卫生与艺术教育司副司长全国哪的腐乳最好吃?经过评比,这4个地方不错,有你家乡吗却笑北平思食乳,霜刀不切粉酥归。腐乳,被称之为中国奶酪。是我国特有的一种美食,到现在已经有几千年的历史了。其口感独特嫩滑清爽,不管是用它来炒菜还是调制蘸料,都独具魅力。我国的腐乳种体检发现肝囊肿肾囊肿严重吗?医生这3个地方有囊肿要警惕王先生单位组织了全员体检,一周后,大家都拿到了体检报告。但是,王先生看到结果,内心却有些慌张,因为他的报告里显示他有肾囊肿。虽然他本人没有任何不舒服的症状,但看见体检结果他还是忍不全国哪的白酒最好喝?经过评选,这四个地方榜上有名,有你家乡吗提到好酒,大家能想到的大概就是茅五泸,他们也确实好,又贵又好。难道除了这些名酒,就没有别的好酒了吗?自然是有的,中国地大物博,美酒数不胜数,很多品牌空有酒质,但是名气却是未能打开,