CodeBlock下开发窗口出现乱码
2014-04-12 10:33
716 查看
.Code::Blocks 编辑器保存源文件用的编码。
默认情况下,是保存为windows本地编码的,也就是WINDOWS-936字符集,也就是GBK编码。
但是很神奇的是,GCC编译器默认编译的时候是按照UTF-8解析的。你存成GBK,但是当成UTF-8解析,这还能编译通过,这才有鬼了,所以这两个地方编码不统一好,编译的时候报错:error: converting to execution character set: Illegal byte sequence,你根本连通过编译的可能性都没有!
其实要解决这个问题很简单,编写Code::Blocks的人只需要在调用编译器之前检测一下源文件是什么编码,然后就自动让编译器用什么编码进行解释,问题就解决了。只是很可惜,Code::Blocks编写的人可能还没有这么做。所以
QT的代码中需要加入, QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));来改变默认字符集。
#include <QtGui>
#include<QPaintEvent>
#include <QWidget>
#include <QRadioButton>
#include <QTextEdit>
#include <QPushButton>
#include <QGridLayout>
class Widget : public QWidget
{
public:
Widget(QWidget *parent = 0)
: QWidget(parent)
{}
private:
QRadioButton* radioBtnMengToHan;
QRadioButton* radioBtnHanToMeng;
QTextEdit* leftEdit;
QTextEdit* rightEdit;
QPushButton* translateBtn;
QGridLayout* mainLayout;
void paintEvent(QPaintEvent *)
{
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
// QTextCodec::setCodecForCStrings("GB2312");//::codecForName("GB2312");
// QPainter p(this);
#if 1
// QTextDocument document;
// document.setHtml("<br>Tssss<br>e<br>s<br>t<br>");
// document.drawContents(&p);
// QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
radioBtnHanToMeng = new QRadioButton(QObject::tr("汉译蒙"));
radioBtnMengToHan = new QRadioButton(tr("蒙译汉"));
leftEdit = new QTextEdit;rightEdit = new QTextEdit;
translateBtn = new QPushButton(tr("翻译"));
mainLayout = new QGridLayout(this);
mainLayout->addWidget(radioBtnHanToMeng, 0, 0);
mainLayout->addWidget(radioBtnMengToHan, 0, 1);
mainLayout->addWidget(leftEdit, 1, 0);
mainLayout->addWidget(rightEdit, 1, 1);
mainLayout->addWidget(translateBtn, 2, 1, 1, 1);
#else
drawRotatedText(&p, 90, width() / 2, height() / 2, "The vertical text");
#endif
}
/*
void drawRotatedText(QPainter *painter, float degrees, int x, int y, const QString &text)
{
painter->save();
painter->translate(x, y);
painter->rotate(degrees);
painter->drawText(0, 0, text);
painter->restore();
}
*/
};
int main(int argc, char **argv)
{
QApplication a(argc, argv);
Widget w;
w.resize(800,460);
//QString string = "t\ne\ns\nt";
// QString string = "test";
// QString string="§ß§ç§Ò§à§Ý§Õ";
// QLabel label;
// label.setText(string);
// label.show();
// QPainter p;
// w.drawRotatedText(&p,90,10,10,string);
w.show();
return a.exec();
}
默认情况下,是保存为windows本地编码的,也就是WINDOWS-936字符集,也就是GBK编码。
但是很神奇的是,GCC编译器默认编译的时候是按照UTF-8解析的。你存成GBK,但是当成UTF-8解析,这还能编译通过,这才有鬼了,所以这两个地方编码不统一好,编译的时候报错:error: converting to execution character set: Illegal byte sequence,你根本连通过编译的可能性都没有!
其实要解决这个问题很简单,编写Code::Blocks的人只需要在调用编译器之前检测一下源文件是什么编码,然后就自动让编译器用什么编码进行解释,问题就解决了。只是很可惜,Code::Blocks编写的人可能还没有这么做。所以
QT的代码中需要加入, QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));来改变默认字符集。
#include <QtGui>
#include<QPaintEvent>
#include <QWidget>
#include <QRadioButton>
#include <QTextEdit>
#include <QPushButton>
#include <QGridLayout>
class Widget : public QWidget
{
public:
Widget(QWidget *parent = 0)
: QWidget(parent)
{}
private:
QRadioButton* radioBtnMengToHan;
QRadioButton* radioBtnHanToMeng;
QTextEdit* leftEdit;
QTextEdit* rightEdit;
QPushButton* translateBtn;
QGridLayout* mainLayout;
void paintEvent(QPaintEvent *)
{
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
// QTextCodec::setCodecForCStrings("GB2312");//::codecForName("GB2312");
// QPainter p(this);
#if 1
// QTextDocument document;
// document.setHtml("<br>Tssss<br>e<br>s<br>t<br>");
// document.drawContents(&p);
// QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
radioBtnHanToMeng = new QRadioButton(QObject::tr("汉译蒙"));
radioBtnMengToHan = new QRadioButton(tr("蒙译汉"));
leftEdit = new QTextEdit;rightEdit = new QTextEdit;
translateBtn = new QPushButton(tr("翻译"));
mainLayout = new QGridLayout(this);
mainLayout->addWidget(radioBtnHanToMeng, 0, 0);
mainLayout->addWidget(radioBtnMengToHan, 0, 1);
mainLayout->addWidget(leftEdit, 1, 0);
mainLayout->addWidget(rightEdit, 1, 1);
mainLayout->addWidget(translateBtn, 2, 1, 1, 1);
#else
drawRotatedText(&p, 90, width() / 2, height() / 2, "The vertical text");
#endif
}
/*
void drawRotatedText(QPainter *painter, float degrees, int x, int y, const QString &text)
{
painter->save();
painter->translate(x, y);
painter->rotate(degrees);
painter->drawText(0, 0, text);
painter->restore();
}
*/
};
int main(int argc, char **argv)
{
QApplication a(argc, argv);
Widget w;
w.resize(800,460);
//QString string = "t\ne\ns\nt";
// QString string = "test";
// QString string="§ß§ç§Ò§à§Ý§Õ";
// QLabel label;
// label.setText(string);
// label.show();
// QPainter p;
// w.drawRotatedText(&p,90,10,10,string);
w.show();
return a.exec();
}
相关文章推荐
- eclipse 编写java 窗口中GBK转UTF-8中文出现乱码
- 用Idea编写JSP程序进行Javaweb开发时,网页出现乱码怎么办?
- vagrant nginx php开发环境中浏览器访问js文件,文件中出现乱码的解决方法
- pycharm开发python时出现控制中文显示乱码
- Windows系统下dos窗口运行程序出现中文乱码
- MFC窗口中汉字出现乱码 解决方法
- android开发中在eclipse中导入一个项目时出现中文乱码的解决方法
- pycharm开发python时出现控制台显示中文乱码
- swing中在JTextPane中的输入窗口出现乱码的问题
- VS中配置opencv,使用imshow方法出现窗口名称乱码解决方案
- android studio开发 Toast消息和控制台输出内容出现乱码解决方案
- eclipse开发jsp,网页出现乱码
- swing中在JTextPane中的输入窗口出现乱码的问题
- 在vs中采用xamarin开发时移动应用时出现乱码解决方法
- SpringMVC开发过程中配置了拦截器数据库还会出现中文乱码问题
- 在做出入库项目的时候,弹出窗口showModalDialog,另一页面接收的时候,汉字出现乱码
- android 开发笔记 使用Volley框架获取json数据出现中文乱码解决方案
- Servlet+JSP+MySQL5.6模式下开发web应用出现的中文乱码处理
- pycharm开发python时出现控制台显示中文乱码
- 关于PHP+MYSQL开发时出现的乱码问题