当前位置: 首页 > wzjs >正文

会员卡管理系统怎么开通seo基础入门免费教程

会员卡管理系统怎么开通,seo基础入门免费教程,网站开发 价格差异,怎么注册个人网站开发环境 操作系统: openkylin2qt版本 : 5.15.10排查过程 首先看下问题的现象, 问题现象 复现问题的demo很简单,只能是从跟踪qt代码方面入手 void MainWindow::on_pushButton_clicked(){QPrinter printer;QPrintDialog dialog(&printer,this);dialog.exec();} 现在需要找一…

开发环境

            操作系统: openkylin2qt版本  : 5.15.10

排查过程

        首先看下问题的现象,

问题现象

        

      复现问题的demo很简单,只能是从跟踪qt代码方面入手

            void MainWindow::on_pushButton_clicked(){QPrinter printer;QPrintDialog dialog(&printer,this);dialog.exec();}

        现在需要找一个代码的起点去跟踪,想了半天没有思绪,于是设置环境变量export QT_DEBUG_PLUGINS=1看看有没有提示,结果发现程序会在这一行阻塞一段时间

     load library  "xxx/plugins/printsupport/libcupsprintersupport.so"

        怀疑可能与加载libcupsprintersupport.so库有关,可以从QLibrary加载插件库的代码开始查,经过gdb+打日志双重定位下,找到了耗时的代码范围

            //这个函数在运行过程中被调用了多次QPrinterInfo QPrinterPrivate::findValidPrinter(const QPrinterInfo &printer){// Try find a valid printer to use, either the one given, the default or the first availableQPrinterInfo printerToUse = printer;if (printerToUse.isNull()) {printerToUse = QPrinterInfo::defaultPrinter(); //调用耗时1秒if (printerToUse.isNull()) {QStringList availablePrinterNames = QPrinterInfo::availablePrinterNames(); //调用耗时1秒if (!availablePrinterNames.isEmpty())printerToUse = QPrinterInfo::printerInfo(availablePrinterNames.at(0));}}return printerToUse;}//这个构造函数被调用了一次QUnixPrintWidgetPrivate::QUnixPrintWidgetPrivate(QUnixPrintWidget *p, QPrinter *prn): parent(p), propertiesDialog(nullptr), printer(prn),#if QT_CONFIG(cups)m_duplexPpdOption(nullptr),#endifoptionsPane(nullptr), filePrintersAdded(false){q = nullptr;if (parent)q = qobject_cast (parent->parent());widget.setupUi(parent);int currentPrinterIndex = 0;QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();if (ps) {const QStringList printers = ps->availablePrintDeviceIds(); //调用耗时1秒const QString defaultPrinter = ps->defaultPrintDeviceId();  //调用耗时1秒widget.printers->addItems(printers);const QString selectedPrinter = prn && !prn->printerName().isEmpty() ? prn->printerName() : defaultPrinter;const int idx = printers.indexOf(selectedPrinter);if (idx >= 0)currentPrinterIndex = idx;}widget.properties->setEnabled(true);#if QT_CONFIG(filesystemmodel) && QT_CONFIG(completer)QFileSystemModel *fsm = new QFileSystemModel(widget.filename);fsm->setRootPath(QDir::homePath());widget.filename->setCompleter(new QCompleter(fsm, widget.filename));#endif_q_printerChanged(currentPrinterIndex);QObject::connect(widget.printers, SIGNAL(currentIndexChanged(int)),parent, SLOT(_q_printerChanged(int)));QObject::connect(widget.fileBrowser, SIGNAL(clicked()), parent, SLOT(_q_btnBrowseClicked()));QObject::connect(widget.properties, SIGNAL(clicked()), parent, SLOT(_q_btnPropertiesClicked()));// disable features that QPrinter does not yet support.widget.preview->setVisible(false);}//上面调用耗时的函数就是下面这两个QStringList QCupsPrinterSupport::availablePrintDeviceIds() const{QStringList list;cups_dest_t *dests;int count = cupsGetDests(&dests); //调用耗时1秒list.reserve(count);for (int i = 0; i < count; ++i) {QString printerId = QString::fromLocal8Bit(dests[i].name);if (dests[i].instance)printerId += QLatin1Char('/') + QString::fromLocal8Bit(dests[i].instance);list.append(printerId);}cupsFreeDests(count, dests);return list;}QString QCupsPrinterSupport::staticDefaultPrintDeviceId(){QString printerId;cups_dest_t *dests;int count = cupsGetDests(&dests); //调用耗时1秒for (int i = 0; i < count; ++i) {if (dests[i].is_default) {printerId = QString::fromLocal8Bit(dests[i].name);if (dests[i].instance) {printerId += QLatin1Char('/') + QString::fromLocal8Bit(dests[i].instance);break;}}}cupsFreeDests(count, dests);return printerId;}

               cupsGetDests是cups库的api

 (1) cups 是一个开放源代码的打印系统,为Unix类操作系统(如Linux)提供了标准的打印架构。(2) libcupsprintersupport.so库为qt开发者提供更便捷的api, libcupsprintersupport.so库内部调用的还是cups库api

                

               我单独写了一个调用cups api的demo,进一步验证是cupsGetDests耗时

            #include < cups/cups.h >#include < iostream >#include < ctime >#include < sys/time.h >//编译命令 g++ test.cpp -lcups/*开始 cupsGetDestsTimestamp (milliseconds): 1742524701156Timestamp (milliseconds): 1742524702187结束 cupsGetDests开始 cupsFreeDestsTimestamp (milliseconds): 1742524702187Timestamp (milliseconds): 1742524702187结束 cupsFreeDests*/void getime(){struct timeval tv;gettimeofday(&tv, nullptr);long timestamp = tv.tv_sec * 1000 + tv.tv_usec / 1000;std::cout << "Timestamp (milliseconds): " << timestamp << std::endl;}int main() {// 获取打印机列表cups_dest_t* dests = nullptr;std::cout << "开始 cupsGetDests" << std::endl;getime();int num_dests = cupsGetDests(&dests);  //此处耗时大约1秒getime();std::cout << "结束 cupsGetDests" << std::endl;/*if (num_dests == 0) {std::cerr << "No printers found!" << std::endl;return 1;}*/// 遍历打印机列表for (int i = 0; i < num_dests; i++) {cups_dest_t& dest = dests[i];// 打印打印机名称std::cout << "Printer Name: " << dest.name << std::endl;// 打印打印机是否默认if (dest.is_default) {std::cout << "  (Default Printer)" << std::endl;}// 打印打印机选项for (int j = 0; j < dest.num_options; j++) {std::cout << "  Option: " << dest.options[j].name<< " = " << dest.options[j].value << std::endl;}std::cout << std::endl;}// 释放打印机列表std::cout << "开始 cupsFreeDests" << std::endl;getime();cupsFreeDests(num_dests, dests);getime();std::cout << "结束 cupsFreeDests" << std::endl;return 0;}

排查结论

        qt程序运行过程中使用cups库的api,调用api耗时,导致qt组件弹出慢

http://www.dtcms.com/wzjs/382807.html

相关文章:

  • 有移动端网站 怎么做app免费网站收录入口
  • 公司网站可直接购物支付网站服务公司
  • 网站开发专员岗位职责百度广告一天多少钱
  • 遂宁网站建设seo综合优化公司
  • 桂林微信网站设计360网站推广登录
  • 美丽说网站案例分析百度优化师
  • 空间站做网站有什么产品软文范例大全
  • 西安网站seo价格ip反查域名网站
  • 深圳招聘网站找工作杭州seo网站建设靠谱
  • 济南城乡建设官方网站百度指数如何提升
  • 什么公司需要做网站厦门人才网最新招聘信息
  • wap网站 视频教程广告投放方案
  • 零食铺网站建设策划书竞价推广托管服务
  • 太原汽车网站建设谷歌外贸平台叫什么
  • 三门峡做网站双桥seo排名优化培训
  • 最大的房产网站排名百度营销官网
  • 网站规划的原则有哪些内容网站seo优化方案项目策划书
  • 织梦网站程序5.7首页模板培训学校机构有哪些
  • 域名网站平台seo推广有哪些公司
  • 襄阳网站建设营销自贡网站seo
  • 网站开发 顺德软文营销文章300字
  • 合肥seo网站优化怎么注册电商平台
  • 中国移动idc建设网站海南乐秀同城群软件下载
  • wordpress原生评论网站服务器速度对seo有什么影响
  • 张家港建网站的公司sem投放是什么意思
  • 做网站需要掌握十大中文网站排名
  • 做销售网站要多少钱建站模板平台
  • 做暧暖ox免费网站谷歌浏览器官网
  • wordpress引用文件英文seo外链发布工具
  • 沈阳网站建设优秀公司搜索引擎优化seo课程总结