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

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

摩托罗拉MotoG735G手机在印度发布IT之家3月10日消息,MotoG735G手机此前在欧洲市场推出,现在已登陆印度市场,该机拥有6。5英寸FHDIPSLCD显示屏,刷新率为120Hz。搭载联发科天玑930芯片,内置酷派手机销售未达预期,2022年预计亏损约6。1亿至6。4亿港元IT之家3月10日消息,酷派集团于3月8日发布盈利警告,预计2022年亏损约6。1亿港元至6。4亿港元(当前约5。41亿元至5。68亿元人民币),较2021年的亏损5。72港元,亏预制菜爆发背后有企业月售1。2亿,冷链成本制约产品降价今年开年,预制菜一再成为社会关注的热点。2023年中央一号文件首次将预制菜写入其中,提出培育发展预制菜产业。3月35日,首届中国国际(佛山)预制菜产业大会在佛山举行,吸引约800家深耕产品价值与模式创新中国汽车品牌领克抢滩欧洲市场领克欧洲造型中心。领克汽车供图。中新网柏林3月9日电中国汽车品牌领克与媒体近日一同来到欧洲,从哥德堡到阿姆斯特丹,一路溯源开新,实地感受领克在欧洲首创的订阅制商业模式,并从欧洲视角重装机兵昙花一现的特色系统,DIY涂装真的专为红狼而生吗?这是老男孩游戏盒的第554篇原创,作者小雷最近老男孩游戏盒在小破站直播重装机兵钢之季节,突然感慨这个系列其实存在好多昙花一现的烂尾系统,就比如钢之季节的厨师系统,玩家可以使用采集到黑化版的家用算力服务器HomeLab本内容来源于什么值得买APP,观点仅代表作者本人作者值个大头鬼起因之前基于NUC6改的HomeLab(之前发过帖)磁盘有点吃紧,就升级了硬盘,结果新换的硬盘可能是温控做得不太好,经你微笑的样子作者朗读醉过知酒浓似雾里婀娜的菡萏若深谷静美的幽兰是梅花映雪是百媚千娇的牡丹你微笑的样子玉液琼浆一般蜜润着心田山重水复后的花明柳暗阴雨连绵后的天际蔚蓝你微笑的样子阳光一样阳光一样照两会湘声丨吴理之构建张家界桂林黄金旅游线路来源红网时刻新闻住湘全国政协委员吴理之。红网时刻新闻记者黎鑫长沙报道湖南西南部和广西北部地区有许多全国乃至世界级的风景名胜区,如果将这些景点予以串联,打造一条南方黄金旅游线路,将可给比亚迪设计师点赞,这外观设计令人惊艳,50万级猎跑SUV来袭跟随新能源汽车的浪潮,国产自主品牌也开始冲击高端,前不久比亚迪就发布了仰望U8U9等豪华车型,如今比亚迪旗下豪华品牌腾势汽车也将发布一款50万级别的SUV腾势N7,从售价来看妥妥面飞鹤奶粉产品研发不断向中国母乳黄金标准看齐近期,婴幼儿配方奶粉新国标正式实施。业内认为,新国标在原料标准配方营养素和安全指标上均进行了调整,促使婴幼儿配方奶粉在品质上进入新阶段,而企业的研发能力将成为未来行业竞争的突出亮点浙江日常酒桌怪象不喝黄酒,不喝烧酒,却偏爱这3款便宜酒人们对江南鱼乡的印象一般都是绵绵细雨烟雨婆娑的迷雾感觉,很少会有人把喝酒放在江南鱼乡的地方。其实大部分人对于江南鱼乡的风俗一般都是诗情画意的,很少会有人把豪放的喝酒风俗放在这里,就
初冬流行乱穿衣,随性又时髦的搭配组合,给你意想不到的惊喜秋日生活打卡季初冬的季节,温度还没有那么低。我们也没有必要急着把自己包裹得那么严实,有时候随性又时髦的搭配组合,才会给你意想不到的惊喜。初冬流行乱穿衣,打破常规又死板的造型,在清爽李少莉和弟弟开挂的人生,和其老公工资,才是这场戏的重点呼和浩特的李少莉副主任因为开发布会,穿得很精致。疑似耳钉三万多,丝巾四千多,波浪头就像可远观而不可亵玩焉的荷花,可远观而不可亵玩。与用手一丝不苟的点读稿子形成鲜明对比,让网友无法接多看绿色真的能保护眼睛吗?千真万确没有亲自尝试过,是不敢在这里分享的!现今社会,基本每个人都是需要和用到手机的,手机已经成了这个时代不可或缺的工具!但手机对人视力的伤害却是众所周知的!不过是有些人重视它,有些人忽视民国妇女身体的解放天乳运动1927年7月7日广东省政府委员会第33次会议上通过了禁止妇女束胸的提案,提案中的具体内容是三个月内全省的女子都停止束胸,如果查到还有束胸的女子就要被处以五十元及以上罚金。这场在广郑秀文的时尚你懂?把牛仔裤当衣服穿,看似奇葩,但恰恰时髦高级头条创作挑战赛时尚界之所以那么让人心驰神往,不仅源自于人们对美的追求,还因为有趣,在时尚的世界中,你可以尽情发挥自己的想象力,把各种不同的颜色廓形材质,运用自己的创意巧思把这些元素记忆中的十月本文作者王文俊人间忽晚,山河已秋。转眼间夏天成了故事,秋天已是风景。深秋红叶添雅韵,墨染清风画诗篇。在我党的正确领导下,民生问题高屋建瓴地取得了成就,人民生活水平显著提高,事业如日藏文科普为啥记忆有时候不靠谱?作者王治钧本文来源知识就是力量杂志脑神经科学领域的研究要回答这些关于记忆的问题,我们首先要了解记忆是如何产生的。人们读到听到或学到的事实会经过三个主要步骤成为记忆获取存入读取。首先刘恺威官宣恋情!父亲刘丹公开表示好开心,期待和儿子的女友见面刘恺威李晓峰终于官宣恋情了!在此之前刘恺威多次被拍到和小女友一起现身的画面,引发热议,一开始的时候刘恺威本人没有承认恋情,还让自己的父亲否认了此事,然而没想到的是眨眼之间就啪啪啪打再去中国台湾省,一定要去野柳看看,期待女王头还矗立在那里中国台湾有一个地方叫野柳,那里的海蚀地貌很著名,特别是大名鼎鼎的女王头,它被海内外无数的摄影师拍摄并传播开来,形象生动惟妙惟肖。令人担忧的是,女王头历经千万年的风霜岁月,在海浪狂风从暴躁女强人到温柔的妈妈,15天的蜕变怎样忘掉生活中的烦恼作者铃铛我出生在一个特别偏远贫穷的小山村里,我是家中的老大,下面有一个妹妹一个弟弟。从小由于爸爸妈妈躲避计划生育的原因,我一直跟着爷爷奶奶长到6岁。安全感严重缺期待着冬季里的,第一次飘雪期待着和它见面,重逢的喜悦场景,一次次的在心里描绘着,曾经憧憬着,有一天我能被点名,荣升为雪婆婆的助手,同她一起酝酿布置,雪花飘舞的频率场次。还是小姑娘时的我,就莫名奇妙的开始喜欢