QT横向打印的Bug,可有人遇到过啊?

时间:2021-10-28 23:27:05
Linux操作系统,内核版本2.6.32-71.29.1,
打印机为HP color LaserJet CP5225,
打印机驱动为操作系统自带驱动,
打开一个文档设置成横向打印,打印正常。
我自己做一个Qt打印程序,采用QPainter来自己画出要打印的内容,纵向打印正常,横向打印出错!
我从网上下载了两个打印的例子,在本机编译后也出现上述问题,纵向打印正常,横向打印出错。
可有人也遇到过类似的问题啊?能否给些提示或者解答啊?

8 个解决方案

#1


另外,我虚拟打印,打印成PDF文件的话,横向和纵向都能正常打印,没有问题,用打印机打印,横向打印会出问题!!!!!!!!!!!

#2


横向打印出错.
至少说明是什么错误,以及错误提示内容吧.

#3


谢谢回复,
竖版打印没有问题,横版打印出错;
如果虚拟打印,生成PDF,都是正常的。
横版出的错误有两类,
如果不是特别复杂的页面的话,能够打印出结果,但是有些字体完全混乱,页头有不需要的横线,打印队列会报错。比较复杂的页面,和多页的话,打印不出结果,能看到任务进入打印队列,打印队列报错。

#4


打印代码很简单,希望高人能指导一下,或者有linux系统和打印机的,能试一下
 

    QPrinter printer;


 //设置为横版打印
    this->printer.setPageSize(QPrinter::A4);
    this->printer.setOrientation(QPrinter::Landscape);
    this->printer.setPageMargins(20,20,20,20,QPrinter::Millimeter);

//
//连接信号和槽函数
    //打印预览
    this->connect(ui->pushButton,SIGNAL(clicked()),this,
                  SLOT(doPreview()));
    //直接打印
    this->connect(ui->pushButton_2,SIGNAL(clicked()),this,
                  SLOT(doPrint()));

void MainWindow::exPrint()
{
    QPainter painter(&this->printer);
    QFont colFont("华文黑体",30,QFont::Bold);
    painter.setFont(colFont);
    painter.drawText(20,30,"This is a Simple Example! Just Test Print!");
    painter.drawText(20,100,"Hellow World! This is a Test,Page One");
    painter.drawText(20,180,"In Linux, I hope all will be OK!");
    painter.drawText(20,280,"Did it Success?");
    //新的一页
    this->printer.newPage();
    painter.drawText(QRect(20,30,800,600),Qt::AlignHCenter|Qt::TextWordWrap,
                     "Across the Great Wall We Can Reach Every Corner in the World!");
    painter.drawText(20,200,"This is a Test! Page 2!!!!");
    painter.drawText(20,280,"Test 2!");
    painter.drawText(QRect(20,300,800,600),Qt::AlignHCenter|Qt::TextWordWrap,
                     "This is the way the world ends not with a bang but a whimper");
}
void MainWindow::doPreview()
{
    QPrintPreviewDialog *myDlg=new QPrintPreviewDialog(&this->printer);
    this->connect(myDlg,SIGNAL(paintRequested(QPrinter*)),this,SLOT(exPrint()));
    myDlg->exec();
}

void MainWindow::doPrint()
{
    QPrintDialog  *ptDlg=new QPrintDialog(&this->printer,this);
    if (ptDlg->exec()==QDialog::Rejected)
        return;
    this->exPrint();
}

#5


你一直的QT是什么版本的?我移植QT4.5,一运行QPrintPreviewDialog就完全退出QT程序.  可是QPrintPreviewDialog的类在4.4中就已经出现啦.求解释...

#6


我的qt是4.62版本.
运行QPrintPreviewDialog退出的话,应该是你的代码的问题。
否则应该是编译的错误啊

#7


引用 6 楼  的回复:
我的qt是4.62版本.
运行QPrintPreviewDialog退出的话,应该是你的代码的问题。
否则应该是编译的错误啊


编译已经通过了,我用QT4.5里demos下的textedit打开也是同样的情况.一样的代码在XP上运行很好,linux交叉编译到ARM上,就不行了.是不是4.5的庫不全?纠结中...

#8


你这个代码是在WINDOW下运行的吗?在ARM开发板上能正常打印吗?

#1


另外,我虚拟打印,打印成PDF文件的话,横向和纵向都能正常打印,没有问题,用打印机打印,横向打印会出问题!!!!!!!!!!!

#2


横向打印出错.
至少说明是什么错误,以及错误提示内容吧.

#3


谢谢回复,
竖版打印没有问题,横版打印出错;
如果虚拟打印,生成PDF,都是正常的。
横版出的错误有两类,
如果不是特别复杂的页面的话,能够打印出结果,但是有些字体完全混乱,页头有不需要的横线,打印队列会报错。比较复杂的页面,和多页的话,打印不出结果,能看到任务进入打印队列,打印队列报错。

#4


打印代码很简单,希望高人能指导一下,或者有linux系统和打印机的,能试一下
 

    QPrinter printer;


 //设置为横版打印
    this->printer.setPageSize(QPrinter::A4);
    this->printer.setOrientation(QPrinter::Landscape);
    this->printer.setPageMargins(20,20,20,20,QPrinter::Millimeter);

//
//连接信号和槽函数
    //打印预览
    this->connect(ui->pushButton,SIGNAL(clicked()),this,
                  SLOT(doPreview()));
    //直接打印
    this->connect(ui->pushButton_2,SIGNAL(clicked()),this,
                  SLOT(doPrint()));

void MainWindow::exPrint()
{
    QPainter painter(&this->printer);
    QFont colFont("华文黑体",30,QFont::Bold);
    painter.setFont(colFont);
    painter.drawText(20,30,"This is a Simple Example! Just Test Print!");
    painter.drawText(20,100,"Hellow World! This is a Test,Page One");
    painter.drawText(20,180,"In Linux, I hope all will be OK!");
    painter.drawText(20,280,"Did it Success?");
    //新的一页
    this->printer.newPage();
    painter.drawText(QRect(20,30,800,600),Qt::AlignHCenter|Qt::TextWordWrap,
                     "Across the Great Wall We Can Reach Every Corner in the World!");
    painter.drawText(20,200,"This is a Test! Page 2!!!!");
    painter.drawText(20,280,"Test 2!");
    painter.drawText(QRect(20,300,800,600),Qt::AlignHCenter|Qt::TextWordWrap,
                     "This is the way the world ends not with a bang but a whimper");
}
void MainWindow::doPreview()
{
    QPrintPreviewDialog *myDlg=new QPrintPreviewDialog(&this->printer);
    this->connect(myDlg,SIGNAL(paintRequested(QPrinter*)),this,SLOT(exPrint()));
    myDlg->exec();
}

void MainWindow::doPrint()
{
    QPrintDialog  *ptDlg=new QPrintDialog(&this->printer,this);
    if (ptDlg->exec()==QDialog::Rejected)
        return;
    this->exPrint();
}

#5


你一直的QT是什么版本的?我移植QT4.5,一运行QPrintPreviewDialog就完全退出QT程序.  可是QPrintPreviewDialog的类在4.4中就已经出现啦.求解释...

#6


我的qt是4.62版本.
运行QPrintPreviewDialog退出的话,应该是你的代码的问题。
否则应该是编译的错误啊

#7


引用 6 楼  的回复:
我的qt是4.62版本.
运行QPrintPreviewDialog退出的话,应该是你的代码的问题。
否则应该是编译的错误啊


编译已经通过了,我用QT4.5里demos下的textedit打开也是同样的情况.一样的代码在XP上运行很好,linux交叉编译到ARM上,就不行了.是不是4.5的庫不全?纠结中...

#8


你这个代码是在WINDOW下运行的吗?在ARM开发板上能正常打印吗?