CodeBlock下开发窗口出现乱码

来源:互联网 发布:最全淘宝假货店铺名单 编辑:程序博客网 时间:2024/06/07 03:39

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


0 0
原创粉丝点击