如何在Linux下通过libcups编程获取当前打印机名称?
获取Linux系统默认打印机(基于libcups)
你可以通过两种方式获取默认打印机:
1. 在现有打印机列表中识别默认项
cups_dest_t结构体包含一个is_default字段,当该字段值非0时,对应的打印机就是系统默认打印机。修改你的代码如下:
#include <cups/cups.h> #include <QStringList> QStringList getPrinters(QString *defaultPrinterName = nullptr) { QStringList printerNames; cups_dest_t *dests; int num_dests = cupsGetDests(&dests); for (int pr = 0; pr < num_dests; ++pr) { QString printerName = QString::fromUtf8(dests[pr].name); printerNames.append(printerName); // 检查是否为默认打印机 if (dests[pr].is_default && defaultPrinterName) { *defaultPrinterName = printerName; } } cupsFreeDests(num_dests, dests); return printerNames; }
调用时可传入QString指针接收默认打印机名称:
QString defaultPrinter; QStringList allPrinters = getPrinters(&defaultPrinter); if (!defaultPrinter.isEmpty()) { // 处理默认打印机逻辑 }
2. 直接获取默认打印机
如果不需要全部打印机列表,用cupsGetDest函数直接获取默认打印机效率更高:
#include <cups/cups.h> #include <QString> QString getDefaultPrinter() { cups_dest_t *dest = cupsGetDest(nullptr, nullptr, 0, nullptr); if (!dest) { return QString(); } QString defaultName = QString::fromUtf8(dest->name); cupsFreeDests(1, dest); return defaultName; }
关键点说明
cups_dest_t.is_default:非0值表示该打印机是系统默认项cupsGetDest参数说明:- 第一个参数:传
nullptr表示查找默认打印机 - 第二个参数:传
nullptr忽略打印机实例限制 - 第三个参数:固定传0
- 第四个参数:传
nullptr可忽略错误代码
- 第一个参数:传
内容的提问来源于stack exchange,提问作者Helg1980
相关产品推荐
相关产品推荐

