找回密码
 立即注册
收起左侧
楼主: yafeilinux

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

257
回复
293034
查看
  [复制链接]
累计签到:1568 天
连续签到:1 天
2015-12-18 15:21:50 显示全部楼层
Answer 发表于 2015-12-13 15:42
#include "mainwindow.h"
#include
#include  //添加头文件

你用的是Qt 5吗?如果是,那么已经没有这个函数了,不再需要设置。
回复 支持 反对

使用道具 举报

累计签到:9 天
连续签到:1 天
2016-1-14 12:42:10 显示全部楼层
可以用QStringLiteral来显示中文
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2016-1-14 18:15:53 显示全部楼层
①以无BOM的utf8格式保存含有“新窗口”字串cpp,vs2010(非SP1)编译出错:
      ......\nWindows\mainwindow.cpp:-1: warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

      ......\nWindows\mainwindow.cpp:10: error: C2001: 常量中有换行符
      ......\nWindows\mainwindow.cpp:11: error: C2143: 语法错误 : 缺少“)”(在“}”的前面)
②以有BOM头的utf8格式保存后编译,编译成功但执行时显示乱码。
③以GBK(或者说936代码页、GB2312)格式保存,编译成功但执行时显示乱码。(同时Qt编辑器提示Could not decode "mainwinodw.cpp" with "UTF-8"-encoding. Editing not possible. 选择对应编码后可正常使用)

中文乱码是个讨厌的问题——在Qt5上,文件保存要求统一为utf8(无BOM头);然而中文windows系统中,默认使用GBK编码。而最最糟糕的是,即便微软编译器能识别带BOM头的utf8文件,汉字字符串仍将被内部偷偷转为GBK,导致utf8/gbk一团混乱!(还有,若使用VS2010未加SP1的话,编译将不识别utf8格式)。
对于Qt5,已经取消了setCodecForTr(……)之类的处理,网上的中文处理资料就此失效了!

解决办法:对于要求utf8格式字串的Qt函数,直接书写16进制ut8数据。这样既满足了Qt的要求,又能让VS编译器正常识别(也不会偷偷转码)。
好处是一劳永逸,不必再关心文件到底是utf8还是gbk存放。虽然稍微烦了点,但程序中硬写汉字字符串的地方毕竟不会多。
例如本节教程中的语句写成下面的样子:

ui->pushButton->setText("\xE6\x96\xB0\xE7\xAA\x97\xE5\x8F\xA3");

(同时提请注意:若汉字注释的行注释出问题,那么改用/**/包裹起来吧)


回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-1-24 20:34:08 显示全部楼层
有一个问题   是关于窗口闪退的   不在主函数中调用窗口呢  怎么处理闪退问题?
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-1-25 17:20:08 显示全部楼层
小李飞刀 发表于 2016-1-24 20:34
有一个问题   是关于窗口闪退的   不在主函数中调用窗口呢  怎么处理闪退问题? ...

new一个新的实例。
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-1-27 22:28:02 显示全部楼层
“在弹出的转到槽对话框中选择clicked()信号并按下确定按钮。这时会跳转到编辑模式mainwindow.cpp文件的on_pushButton_clicked()函数处,这个就是自动生成的槽,它已经在mainwindow.h文件中进行了声明。我们只需要更改函数体即可。这里更改为:

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

写了这几行后构建不成功了,系统是ubuntu,gcc 版本gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2) ,qt是qt5
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-1-28 17:58:58 显示全部楼层
今天刚注册,开始学习!
回复 支持 反对

使用道具 举报

尚未签到

2016-2-24 22:13:20 显示全部楼层
谢谢分享!!!!!!!
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-3-6 19:16:50 显示全部楼层
亚飞老师,有几行代码琢磨很长时间还是不太懂
在Dialog(继承自QDialog)的构造函数里:
Dialog:ialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui:ialog)
{
    ui->setupUi(this);
}
ui是Dialog类的私有数据成员,是一个指向Dialog类的指针。可是在执行这个构造函数的时候,又new了一个该类的对象来初始化成员ui,此时又会调用这个构造函数,以此类推,应该陷入死循环中。。。这个应该怎么理解?
刚刚学完C++,恳请老师指点,谢谢!
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-3-7 21:52:56 显示全部楼层
cube1996 发表于 2016-3-6 19:16
亚飞老师,有几行代码琢磨很长时间还是不太懂
在Dialog(继承自QDialog)的构造函数里:
Dialog:ialog(QW ...

如果有《Qt Creator快速入门》建议看下第36页,有详细讲解。

你觉得这个Ui::Dialog和Dialog是同一个类吗?建议看下生成目录下面的那个ui_dialog.h文件,也许你能明白。

还有个术语叫 命名空间,可以百度下。
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-3-8 13:29:43 显示全部楼层
yafeilinux 发表于 2016-3-7 21:52
如果有《Qt Creator快速入门》建议看下第36页,有详细讲解。

你觉得这个Ui:ialog和Dialog是同一个类吗 ...

谢谢亚飞老师,明白了。之前真的没注意到那个Ui::还有,之前就想看看自动生成的.h文件,可我一直在源文件目录下查找,一直找不到,多谢提醒。可能因为平时写的程序都是小练习,对于命名空间这个东西忽略了不少。。。
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-3-8 17:07:27 显示全部楼层
cube1996 发表于 2016-3-8 13:29
谢谢亚飞老师,明白了。之前真的没注意到那个Ui::还有,之前就想看看自动生成的.h文件,可我一直在源文件 ...

恩。生成的文件在类似build-untitled-Desktop_Qt_5_6_0_MinGW_32bit-Debug这样的目录中,没有在源码目录中。
回复 支持 反对

使用道具 举报

累计签到:9 天
连续签到:1 天
2016-3-29 10:51:57 显示全部楼层
有没有人找到Qt5显示中文的解决方法????
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-3-30 11:30:18 显示全部楼层
Sweetyour 发表于 2016-3-29 10:51
有没有人找到Qt5显示中文的解决方法????

直接用就可以了。
回复 支持 反对

使用道具 举报

累计签到:9 天
连续签到:1 天
2016-3-30 14:53:19 显示全部楼层
直接用中文的话会显示乱码
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-4-7 09:13:25 显示全部楼层
编译过程中 总是会提示:D:\Qt\5.1.1\msvc2012_64_opengl\include\QtCore\qglobal.h:46: 错误:C1083: 无法打开包括文件:“stddef.h”: No such file or directory   求指导
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-4-7 21:09:29 显示全部楼层
yang_xuan1993 发表于 2016-4-7 09:13
编译过程中 总是会提示:D:\Qt\5.1.1\msvc2012_64_opengl\include\QtCore\qglobal.h:46: 错误:C1083: 无法 ...

你编译其他项目可以通过吗?

这个程序是基于Qt 4的,建议使用教程中指定的版本。
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-4-7 21:09:33 显示全部楼层
yang_xuan1993 发表于 2016-4-7 09:13
编译过程中 总是会提示:D:\Qt\5.1.1\msvc2012_64_opengl\include\QtCore\qglobal.h:46: 错误:C1083: 无法 ...

你编译其他项目可以通过吗?

这个程序是基于Qt 4的,建议使用教程中指定的版本。
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-4-7 21:09:45 显示全部楼层
yang_xuan1993 发表于 2016-4-7 09:13
编译过程中 总是会提示:D:\Qt\5.1.1\msvc2012_64_opengl\include\QtCore\qglobal.h:46: 错误:C1083: 无法 ...

你编译其他项目可以通过吗?

这个程序是基于Qt 4的,建议使用教程中指定的版本。
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-4-12 15:15:33 显示全部楼层
D:\QT Program\nWindows\main.cpp:8: error: C2039: “setcodecForTr”: 不是“QTextCodec”的成员
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了