Qt学习之路之文本打印

本次的博文是 Qt学习之路之打开并显示文件内容文件 的后续~~~  

有关文本打印的代码,请注意代码中的注释

打印文本在工作中经常使用,类QPrintDialog标准对话框提供了打印机的选择,配置功能等。

在开始前,请先设置工程文件,加入:QT += printsupport, 不然编译不会通过~~~

file_widget.h

#ifndef FILEWIDGET_H
#define FILEWIDGET_H

#include <QFileDialog>
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QFile>
#include <QIODevice>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QTextStream>
#include <QMessageBox>
#include <QPrintDialog>		//---文本打印新增
#include <QPrinter>				//--文本打印新增

class FileWidget : public QWidget
{
	Q_OBJECT
public:
	explicit FileWidget(QWidget *parent = 0);

	public slots:
		void slotOpenFileDialog();	//打开打开文件对话框
		void slotPrintText();				//--文本打印新增 --------打印文本文件
private:
	QPushButton *openBtn;
	QPushButton *printBtn;		//---文本打印按钮
	QLabel *tipsLabel;
	QTextEdit *showText;
};

#endif	//FILEWIDGET_H
file_widet.cpp
#include "file_widget.h"

FileWidget::FileWidget(QWidget *parent /*= 0*/) : QWidget(parent)
{
	//---按钮与label 
	printBtn = new QPushButton("print", this);		//---文本打印新增
	openBtn = new QPushButton("OPEN", this);
	connect(openBtn, SIGNAL(clicked()), this, SLOT(slotOpenFileDialog()));
	connect(printBtn, SIGNAL(clicked()), this, SLOT(slotPrintText()));		//---文本打印新增
	tipsLabel = new QLabel("open file...", this);

	//----showText
	showText = new QTextEdit();

	//---按钮与label布局
	QVBoxLayout *vLayout = new QVBoxLayout();
	vLayout->addStretch();
	vLayout->addWidget(tipsLabel);
	vLayout->addWidget(openBtn);
	vLayout->addWidget(printBtn)				;//---文本打印新增
	vLayout->addStretch();
	vLayout->setSpacing(10);
	
	//---3个控件整体布局
	QHBoxLayout *hLayout = new QHBoxLayout(this);
	hLayout->addLayout(vLayout);
	hLayout->addWidget(showText);
	hLayout->setSpacing(10);
	hLayout->setContentsMargins(10, 2, 10, 2);

	//--显示布局
	setLayout(hLayout);

	//---窗口属性
	resize(400, 300);
	setWindowTitle("open file");
}

//------打开文件对话框
void FileWidget::slotOpenFileDialog()
{
	/*
	getOpenFileName函数说明
	函数原形: QStringList QFileDialog::getOpenFileNames(
	QWidget * parent = 0, 
	const QString & caption = QString(),	//  打开文件对话框的标题
	const QString & dir = QString(),			//	查找目录
	const QString & filter = QString(),		//  设置需要过滤的文件格式
	QString * selectedFilter = 0, 
	Options options = 0) [static]
	*/
	//---获取文件名
	QString fileName = QFileDialog :: getOpenFileName(this, NULL, NULL, "*.h *.cpp *.txt");	

	//---打开文件并读取文件内容
	QFile file(fileName);

	//--打开文件成功
	if (file.open(QIODevice ::ReadOnly | QIODevice ::Text))
	{
		QTextStream textStream(&file);
		while (!textStream.atEnd())
		{
			//---QtextEdit按行显示文件内容
			showText->append(textStream.readLine());
		}
	}
	else	//---打开文件失败
	{
		/*
		information函数参数说明:
		函数原型
		QMessageBox::information(
		QWidget * parent, 
		const QString & title,					//--- 标题
		const QString & text,					//---显示内容
		StandardButtons buttons = Ok,	//---OK按钮
		StandardButton defaultButton = NoButton)	
		[static]
		*/
		QMessageBox ::information(NULL, NULL, "open file error");
	}
}


//---打印文本
void FileWidget::slotPrintText()
{
	QPrinter printer;		//--新建一个QPrinter对象
	QPrintDialog printDlg(&printer, this);

	if (printDlg.exec())				//---用来判断用户是否点击了打印对话框上的“打印”按钮
	{
		//----获取文本内容
		QTextDocument *doc = showText->document();
		// ---打开打印对话窗口
		doc->print(&printer);
	}
}

main.cpp

#include <QtWidgets/QApplication>
#include "file_widget.h"


int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	FileWidget win;
	win.show();
	
	return a.exec();
}


~~~~~~~~~笔者的机器上未连接任何打印设备,不能上最后的有关打印的效果截图了~~~~~~

~~~~~~若代码有错误,还请留言. 并指证~~~~  ^_^ ^_^


发布了419 篇原创文章 · 获赞 382 · 访问量 160万+
展开阅读全文

Qt5打印,却生成PDF文档

03-25

在自己机器上运行好好的,打印预览都OK,但是打包后去别的机器上后,点击打印后,预览界面还是正常的,但是选择打印机那个标准提示框不见了,点击打印那个按钮,直接让我保存为PDF格式文件,怎么回事?? 电脑打印机可以使用,打印机也设置为默认了 void Print::printInfor(int n) { /* QPrinter printer( QPrinter::PrinterResolution ); printer.setPageSize(QPrinter::A4); printer.setOrientation(QPrinter::Portrait); QPrintDialog dialog( &printer ); if ( dialog.exec() ) { qDebug("ERROR"); } */ QPrinter printer(QPrinter::ScreenResolution); QPrintPreviewDialog preview(&printer, this); preview.setWindowState(Qt::WindowMaximized); ui->stackedWidget->setCurrentIndex(n); //打印“印刷生产订单” connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(printPreview(QPrinter*))); preview.exec(); } void Print::Zhibiao_filePrintPreview()//治标 { printInfor(2); } void Print::printPreview(QPrinter *printer) { QPainter painter(printer); QPixmap image; image = this->grab(QRect( QPoint( 0, 0 ), QSize( -1, -1 ) )); //QPixmap image; //image = image.grabWidget(this, 0, 0, 1005, 1283); QRect rect = painter.viewport(); QSize size = image.size(); size.scale(rect.size(), Qt::KeepAspectRatio);//此处保证图片显示完整 painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); painter.setWindow(image.rect()); painter.drawPixmap(0, 0, image); } 复制代码 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览