qt - QPainter drawText() in QGLWidget draw long Chinese text with English upside down -


i use codes below draw text in qglwidget, when text long , mixed chinese(or japanese) english, text becomes upside down. knows why?

ps1: when change qglwidget qwidget, ok.

ps2: qt version 4.8.0, os ubuntu 12.04 64bit

ps3: when firstly draw text image, draw image, ok.

normal when using qwidget: normal text

upside-down when using qglwidget: upside down text

mainwindow.h

#ifndef mainwindow_h #define mainwindow_h  #include <qglwidget>  class mainwindow : public qglwidget { q_object  public:     explicit mainwindow(qglwidget *parent = 0);  protected:     void paintevent(qpaintevent* event); };  #endif // mainwindow_h 

mainwindow.cpp

mainwindow::mainwindow(qglwidget *parent) : qglwidget(parent) {     setgeometry(0, 0, 1000, 200); }  void mainwindow::paintevent(qpaintevent* event) {     qpainter painter;     painter.begin(this);      qstring text = qstring::fromlocal8bit(                 "this is一段a很长的long示例文本text。在非常长的时候会出现上下  颠倒的问题。你那里是否出现了?" \                 "一段很长的示例文本。在非常长的时候会出现上下颠倒的问题。你那里是否出现了?" \                 "一段很长的示例文本。在非常长的时候会出现上下颠倒的问题。你那里是否出现了?"                 );      painter.setfont(qfont("default", 46, -1, false));     painter.drawtext(qrect(0, 0, 3000, 200), qt::textsingleline, text);     painter.end(); } 

**

edit:

**

i change font family name "default" "yahei consolas hybrid", becomes normal when drawtext once. when use codes below change text @ intervals, chinese characters become upside down again...

mainwindow.cpp

#include <qtgui> #include "mainwindow.h" #include "ui_mainwindow.h"  mainwindow::mainwindow(qglwidget *parent) : qglwidget(parent) {     setgeometry(0, 0, 2000, 100);      painttimer = new qtimer(this);     connect(painttimer, signal(timeout()), this, slot(repaint()));     painttimer->start(16);      text1 ="【中文1024测试】abcdefghijklmnopqrstuvwxyz中文abcdefghijklmnopqrstuvwxyz"\             "中文abcdefghijklmnopqrstuvwxyz中文abcdefghijklmn";      text2 = "中文english中文english中文english中文english中文englis中文";      text = text2;      offset = 0; }  void mainwindow::paintevent(qpaintevent* event) {     qpainter painter;     painter.begin(this);      painter.setfont(qfont("yahei consolas hybrid", 40, -1, false));     painter.drawtext(qrect(0, 0, 3000, 100), qt::textsingleline, text);     painter.end();      offset= (offset + 8) %400;      if (offset > 200) {         text = text1;     } else {         text = text2;     } } 

mainwindow.h

#ifndef mainwindow_h #define mainwindow_h  #include <qglwidget> #include <qtimer> #include <qfont>  class mainwindow : public qglwidget {     q_object  public:     explicit mainwindow(qglwidget *parent = 0);  protected:     void paintevent(qpaintevent* event); private:     qtimer* painttimer;     qstring text1;     qstring text2;     qstring text;     int offset; };  #endif // mainwindow_h 

the codes below can solve upside down problem:

void mainwindow::paintevent(qpaintevent* event) {     qglclearcolor(qcolor(0,0,0));     glclear(gl_color_buffer_bit | gl_depth_buffer_bit);      qpainter painter(this);     painter.beginnativepainting();     rendertext(-offset, 60, 0, text, qfont("yahei consolas hybrid", 40, 1, false));     painter.endnativepainting(); } 

Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -