QPainter::begin(): 返回假

问题描述

所以我使用的是 QT 5.15.2,我在这里尝试做的是将 QTableView 的内容打印到 PDF 文件中,这是我的代码

 void ManageTeachers::on_print_clicked() {

    QPdfWriter pdf("C:");
    QPainter painter(&pdf);

        int i = 4000;
            painter.setPen(Qt::blue);
            painter.setFont(QFont("Arial",30));
            painter.drawText(1100,1200,"List of teachers");
            painter.setPen(Qt::black);
            painter.setFont(QFont("Arial",15));
           
            painter.drawRect(100,100,7300,2600);
            painter.drawRect(0,3000,9600,500);
            painter.setFont(QFont("Arial",9));
            painter.drawText(200,3300,"CIN");
            painter.drawText(1300,"First name");
            painter.drawText(2100,"last name");
            painter.drawText(3200,"phone");
            painter.drawText(5300,"email");

            painter.drawText(5300,"salary");
            QSqlQuery query;
            query.prepare("select * from teacher");
            query.exec();
            while (query.next())
            {
                painter.drawText(200,i,query.value(0).toString());
                painter.drawText(1300,query.value(1).toString());
                painter.drawText(2200,query.value(2).toString());
                painter.drawText(3200,query.value(3).toString());
                painter.drawText(4500,query.value(4).toString());
               i = i + 500;
            }
            int reponse = QMessageBox::question(this,"Génerer PDF","<PDF Enregistré>...Vous Voulez Affichez Le PDF ?",QMessageBox::Yes |  QMessageBox::No);
                if (reponse == QMessageBox::Yes)
                {

                    painter.end();
                }
                if (reponse == QMessageBox::No)
                {
                     painter.end();
                } }

问题是在控制台中我收到这些错误

QPainter::begin(): Returned false
QPainter::setPen: Painter not active
QPainter::setFont: Painter not active
QPainter::setPen: Painter not active
QPainter::setFont: Painter not active
QPainter::drawRects: Painter not active
QPainter::drawRects: Painter not active
QPainter::setFont: Painter not active
QPainter::end: Painter not active,aborted

有什么帮助吗?我添加了 QT+= 打印支持多媒体

解决方法

QPdfWriter pdf("C:");
QPainter painter(&pdf);

这很可疑。如果您查阅 QPdfWriterdocumentation,它会注意到第一个参数应该是文件名。 “C:”不是文件名。您需要传递要写入的文件的名称,例如:

QString filename("C:/my_file.pdf");
QPdfWriter pdf(filename);
QPainter painter(&pdf);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...