我在sun下面用qt3.3打印中文的时候,打印机输出的老是乱码,只有数字和字母是正常的,请问大家遇到过没有,交流交流,下面是打印代码:
int main( int argc, char **argv )
{
QApplication a( argc, argv );
qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
#ifdef __sun
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")) ;
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
#endif
QPrinter* m_qPrinter=NULL;
if( !m_qPrinter ){
m_qPrinter = new QPrinter(QPrinter::HighResolution);
if( !m_qPrinter )
{
printf("debug new QPrinter fail\n");
return 1;
}
}
QPainter p;
if( !p.begin( m_qPrinter ) )
{
printf("debug p.begin fail\n");
return 1;
}
QMainWindow mainw;
QPaintDeviceMetrics metrics( p.device() );
int dpiy = metrics.logicalDpiY();
int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins
/*------------------------*/
QString textStr=QString("中文打印测试 123 abc");
QRect body( margin, margin, metrics.width() - 2*margin, metrics.height() - 2*margin );
QSimpleRichText richText( QStyleSheet::convertFromPlainText(QString::fromLocal8Bit(textStr)),
QFont(),
QString::fromLocal8Bit("datatable"),
QStyleSheet::defaultSheet(),
QMimeSourceFactory::defaultFactory(),
body.height() );
richText.setWidth( &p, body.width() );
QRect view( body );
qDebug(textStr);
int page = 1;
do {
richText.draw( &p, body.left(), body.top(), view, mainw.colorGroup() );
view.moveBy( 0, body.height() );
p.translate( 0 , -body.height() );
p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ),
view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) );
if ( view.top() >= richText.height() )
break;
m_qPrinter->newPage();
page++;
} while (TRUE);
return 1;
}