chartdirector 中文乱码问题

loveseunghun 2011-06-15 04:29:24
QT + ChartDirector + windows
窗口的标题,和按钮的名字可以正常显示。 chartdirector的三个标题都是乱码!
 main.cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
//QTranslator translator;
//translator.load("linelossdialog_zh.qm");
//app.installTranslator(&translator);
LineLossDialog dialog;
dialog.show();
return app.exec();
}

 LineLossDialog.cpp
LineLossDialog::LineLossDialog(QWidget *parent) : QDialog(parent)
{
setFixedSize(600, 400);
QString str("台区线损率");
setWindowTitle(str);
QPushButton *pointerPB = new QPushButton(QIcon(":/pointer.png"), "中文", this);
pointerPB->setGeometry(0, 0, 112, 28);
m_ChartViewer = new QChartViewer(this);
m_ChartViewer->setGeometry(2, 28, 600, 300);
drawChart(m_ChartViewer);
}
void LineLossDialog::drawChart(QChartViewer *viewer)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("aa");
db.setDatabaseName("dd");
db.setUserName("dd");
db.setPassword("cc");
db.setPort(1521);
if(!db.open())
return ;
QSqlQuery query(db);
query.exec("select Rate from AMI_TransAreaLineLoss where areaID=1 and Day>=to_date('2010-01-01','yyyy-MM-dd') and Day<to_date('2010-02-01','yyyy-MM-dd') order by day asc");
double y[31];
int count = 0;
while(query.next())
{
y[count] = query.value(0).toDouble() * 100;
count++;
}
double data1Start = Chart::chartTime(2010, 1, 1);
double data1End = Chart::chartTime(2010, 1, 31);

XYChart *c = new XYChart(600, 400);
c->setDefaultFonts("simsun.ttc", "simsun.ttc", "simsun.ttc", "simsun.ttc");
c->setBackground(c->linearGradientColor(0, 0, 0, 100, 0x99ccff, 0xffffff),
0x888888);
c->setRoundedFrame();
c->setDropShadow();
c->addTitle("台区线损率曲线", "simsun.ttc", 18)->setMargin(0, 0, 16, 0);

PlotArea *plotArea = c->setPlotArea(60, 60, 500, 240, -1, -1, Chart::Transparent,
c->dashLineColor(0x444444, 0x000101), -1);
LegendBox *legendBox = c->addLegend(plotArea->getLeftX() + plotArea->getWidth() /
2, 45, false, "simsun.ttc", 10);
legendBox->setAlignment(Chart::TopCenter);
legendBox->setBackground(Chart::Transparent, Chart::Transparent);
c->yAxis()->setTickDensity(30);
c->xAxis()->setTickDensity(75);
c->xAxis()->setColors(Chart::Transparent);
c->yAxis()->setColors(Chart::Transparent);
c->xAxis()->setMargin(15, 15);
c->xAxis()->setLabelStyle("simsun.ttc", 8);
c->yAxis()->setLabelStyle("simsun.ttc", 8);
c->yAxis()->setTitle("中文", "simsun.ttc", 10);
LineLayer *layer0 = c->addLineLayer();
layer0->addDataSet(DoubleArray(y, sizeof(y)/sizeof(y[0])),
0xff0000, tr("ChartLegend1").toUtf8().constData())->setDataSymbol(Chart::ChartDir_CustomSymbol, 11);
layer0->setXData(data1Start, data1End);
layer0->setLineWidth(3);
delete viewer->getChart();
viewer->setChart(c);
updateImageMap(viewer);
}
...全文
494 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveseunghun 2011-06-20
  • 打赏
  • 举报
回复
上面那个错了: 改为:
c->addTitle(QTextCodec::codecForName("UTF-8")->fromUnicode("线损率曲线").constData(), "simsun.ttc", 18)->setMargin(0, 0, 16, 0);
loveseunghun 2011-06-20
  • 打赏
  • 举报
回复
自己解决!结贴!
附方法:
LineLossDialog.cpp 以GB2312编码保存。
 c->addTitle("台区线损率曲线", "simsun.ttc", 18)->setMargin(0, 0, 16, 0);

改为:
c->addTitle(QTextCodec::codecForName("UTF-8")->fromUnicode("线损率曲线").constData(), "simsun.ttc", 18)->setMargin(0, 0, 16, 0);
loveseunghun 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 namelij 的回复:]
在你的main函数最前面加

C/C++ code


QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecFor……
[/Quote]
我都试过了,对chartdirector内的不管用。
  • 打赏
  • 举报
回复
在你的main函数最前面加

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
loveseunghun 2011-06-15
  • 打赏
  • 举报
回复
两个cpp都在vs2010中保存为UTF-8代签名的 编码格式

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧