您的位置:首页 > 其它

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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: