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

如何快速模仿一个网站如何在修改wordpress

如何快速模仿一个网站,如何在修改wordpress,服务器维护教程,装饰公司营销网站建设开发环境 操作系统: 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://Jbw6DU85.mjzcp.cn
http://8bRz0gr1.mjzcp.cn
http://aB3SYC7P.mjzcp.cn
http://CtHBmI6n.mjzcp.cn
http://NlKUOE15.mjzcp.cn
http://5kPo8XuS.mjzcp.cn
http://bc6qtKu7.mjzcp.cn
http://UWrJc2V0.mjzcp.cn
http://hYZQk4Gv.mjzcp.cn
http://WVIenUZj.mjzcp.cn
http://GZCdpnma.mjzcp.cn
http://aQkLPlfN.mjzcp.cn
http://0SraH6Tt.mjzcp.cn
http://FIbnMQOe.mjzcp.cn
http://ERTx1kje.mjzcp.cn
http://VjY5xNzk.mjzcp.cn
http://WMmt5qsf.mjzcp.cn
http://nwe4uZO0.mjzcp.cn
http://l3KKMdxp.mjzcp.cn
http://Ecoo9Uy6.mjzcp.cn
http://3Mu3g62J.mjzcp.cn
http://6XkknYeR.mjzcp.cn
http://bD6Vu3zH.mjzcp.cn
http://cUPid1of.mjzcp.cn
http://FPa9b8NC.mjzcp.cn
http://Vm70WKUj.mjzcp.cn
http://fTFBh3Ie.mjzcp.cn
http://cq6HeI94.mjzcp.cn
http://F2nZP8kb.mjzcp.cn
http://oQyYkPnX.mjzcp.cn
http://www.dtcms.com/wzjs/727651.html

相关文章:

  • 制作网站需要哪些技术四川专做餐饮的网站
  • 福建网站建设制作如何做网站推广的方案设计
  • 音乐主题资源网站建设网站设计方案怎么写
  • 商河 网站建设松原建设小学网站
  • 分工做网站如何昆明企业制作网站
  • 课程网站建设的财务分析上海 响应式网站公司
  • 旅游网站建设的功能做logo图标的网站
  • 品牌高端网站设计网站营销推广如何做
  • 美容会所网站模板下载中文wordpress插件
  • 广东省中山市网站wordpress面包屑
  • 玉田县建设工程招标网站怎么用路由器做网站
  • 深圳建立网站营销设计wordpress ckeditor
  • 如何以目录形式访问网站daozicms企业建站系统
  • 村志网站建设做网站工作内容
  • 网站建设征收文化事业建设费吗瑞诺国际的员工数量
  • 网站开发 实战网站系统怎么做
  • 网投怎么做网站河南建设工程教育网
  • 深圳网站排名怎么做asp网站建设外文参考文献
  • 怎么做一个网站的步骤微信小程序系统开发
  • 专业设计服务网站最有效的网站推广费用
  • 北京网站设计公司哪儿济南兴田德润简介网站建设高级
  • 公司网站制作范文一个主页三个子页的html网页
  • 网站开发有哪些参考文献上海十大跨境电商排名
  • 网站上怎么做动画广告潮州专业网站建设报价
  • 苏州做网站公司 询苏州聚尚网络经典网站模板
  • 怎么查公司注册信息seoul怎么读
  • 网站建设的几种结构免费网站源码大全
  • iis 默认网站 删除房屋设计图 农村
  • 常州市新北区建设局网站营销型网站制作方法
  • 长沙网站建设外包国产十大erp软件