日志
建立一个类,简单的实现打印机、纸张、纸张名字之间的转换
2017-11-09 21:52
被打印机名字,打印机支持的纸张名字,纸张的尺寸信息 搞得一头雾水。
想简单的实现一个功能,两个combobox,一个显示 支持的打印机名称,一个显示该打印机支持的纸张名称,改变打印机的同时,支持的纸张名称页改变。 可QPrinterInfo 类里只是支持 QPageSize,而需要自己从QPageSize 里自己提取 name。于是简单的做了个类,可以直接实现各个转换。 #ifndef QTEPRINTER_H #define QTEPRINTER_H #include <QString> #include <QStringList> #include <QList> #include <QPageSize> #include <QMap> class QTEPrinter { public: QTEPrinter(); QStringList printerNameList(); QStringList pageNameList(const QString &printerName); QList<QPageSize > pageSizeList(QString &printerName); QString pageName(QPageSize &pagesize); QPageSize pageSize (QString &pagename); QString defaultPrinter(); private: void iniInfomation(); QStringList printerList; QMap <QString, QList <QPageSize> > printerToPageSizeMap; QList <QString> userPageNameList; QList <QPageSize> userPageSizeList; QString userDefaultPrinter; }; #endif // QTEPRINTER_H #include "qteprinter.h" #include <QPrinter> #include <QPrinterInfo> #include <QPageSize> #include <QDebug> QTEPrinter::QTEPrinter() { iniInfomation(); } // 获取支持的打印机名称 QStringList QTEPrinter::printerNameList() { return printerList; } // 根据打印机名称,获取支持的纸张的名称 QStringList QTEPrinter::pageNameList(const QString &printerName) { if(!printerToPageSizeMap.isEmpty()){ userPageSizeList = printerToPageSizeMap.value(printerName); } userPageNameList.clear(); foreach(QPageSize page, userPageSizeList){ userPageNameList.append(page.name()); } return userPageNameList; } // 根据打印机名称,获取支持的纸张的信息 QList<QPageSize> QTEPrinter::pageSizeList(QString &printerName) { if(!printerToPageSizeMap.isEmpty()){ userPageSizeList = printerToPageSizeMap.value(printerName); return userPageSizeList; } } // 根据纸张信息,获取纸张的名称 QString QTEPrinter::pageName(QPageSize &pagesize) { return pagesize.name(); } //根据纸张名称,获取纸张的信息 QPageSize QTEPrinter::pageSize(QString &pagename) { foreach(QPageSize page,userPageSizeList){ if(page.name() == pagename){ return page; } } } // 默认的打印机名称 QString QTEPrinter::defaultPrinter() { return userDefaultPrinter; } // 初始化各个数据 void QTEPrinter::iniInfomation() { printerList = QPrinterInfo::availablePrinterNames(); userDefaultPrinter = QPrinterInfo::defaultPrinterName(); QList <QPageSize> plist; QPrinterInfo info; foreach (QString printer, printerList){ plist = info.printerInfo(printer).supportedPageSizes(); printerToPageSizeMap.insert(printer,plist); plist.clear(); } } |
下一篇: 奇葩的中文显示问题