Qt项目中遇到的一些小问题汇总

VS2013下Qt5.6.1项目配置方法以及各种问题汇总 一、QtCreator与VS2013下Qt1.QtCreator里有:Editor, Assistant, Designer, Debuger因此,Qt Creator是一个IDE,也就是一个集成开发环境,里面有代码编写器,编译器,调试器,还有图形设计器Qt Designer,有了它你可以写软件。而Qt Designer是用来设计界面的,只能设计图形,是个图形设计器!2.Visual Studio... 阅读详情

点击打开原文链接


公司让负责qt界面开发,但是接触qt又不久,现将在项目中遇到的一些问题汇总下,一为了避免自己忘记,二希望能帮助到他人。

1.在程序关闭窗口时,显示提示窗口:

       qt中有很多信号和相应的槽函数,上述问题需要拦截关闭窗口信息QWidget::close(),QWidget::closeEvent( QCloseEvent * event )重写,即对代码如下:

[cpp]  view plain copy
  1. <span style="font-family:SimSun;font-size:13px;">void QWidget::closeEvent ( QCloseEvent * event )  
  2. {  
  3.     QMessageBox::StandardButton button;  
  4.     button = QMessageBox::question(this,tr("退出程序"),  
  5.         QString(tr("警告:程序正在运行中,是否结束操作退出?")),  
  6.         QMessageBox::Yes | QMessageBox::No);  
  7.     if(button == QMessageBox::No)  
  8.     {  
  9.         event->ignore();  
  10.     }  
  11.     else if(button == QMessageBox::Yes)  
  12.     {  
  13.         event->accept();  
  14.     }  
  15. }</span>  

2.在程序中开辟线程,需要在程序结束前结束线程,如果在程序中动态开辟了内存,需要考虑内存释放问题:

      (1).开启线程, 如果程序中需要使用线程,可以通过自定义线程,继承QThread,重写QThread::run(),run()函数体内就是线程的执行过程,记得在函数最后加上事件循环QThread::exec(),再通过QThread::start()函数开启线程。

     (2).结束线程,先调用QThread::exit(),结束线程事件循环,再调用QThread::wait()来阻塞主程序知道线程结束运行。

     (3).内存释放问题,如果是在线程中开辟的动态内存,需要在线程结束前手动释该内存,可以在析构函数中调用delete来删除,再调用(2)中退出线程,这些可以在析构函数中实现。

          补充: qt中当parent销毁时,会自动delete child对象,而对于没有parent的对象需要手动释放。

 

3.信号和槽问题:

       (1).信号是某个对象的信号,槽也是某个对象的槽,信号和槽通过QObject::connect()联系在一起,这个联系可以再很多地方都可建立,只要确定
再调用QObject::connect()函数前,该信号和槽的对象已经存在。

      (2).多线程间的通信,也可以通过信号和槽来实现。


4.qt可执行程序在他人电脑上运行显示乱码问题:

  Qt目录plugins下的codecs文件夹下的内容是跟文字显示有关,如果没有这个,可能会出现中文乱码等等一些问题,解决方法如下:

  a. 在主程序main开始处增加以下语句,注意要按顺序书写:

 QApplication::addLibraryPath("./plugins");
 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
 QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
   b.程序其他地方,包括其他文件、类文件中,直接使用中文,建议还是用tr("中文形式"):
QString str = tr("我是中文");
lbl1.setText(str);
lbl2.setText("你好,中文!");
   c.在部署目录(执行程序放置的目录)中建立子目录 plugins,之后在此目录中建立codecs子目录,将qcncodecs4.dll复制到此子目录中(根据程序需要,有可能是codecs下的其他文件),形成如下目录结构:
<app-install-dir>\plugins\codecs

    d.大功告成!试试你的程序吧,漂亮的中文出现了!

    其实plugins中还可以放置程序中使用的其他插件,如sql和图像处理插件(到qt安装目录下的qt\plugins下按目录结构复制你所需要文件的即可)。

5.qt加载文件,及工程工作目录与可执行文件目录的区别:

       对于较大的程序,程序中可能会调用很多其它工程的dll或者需加载信息,习惯上将可执行程序单独放在一个目录下。

       工作目录:一般情况下是指程序工程目录,而不是可执行程序所在目录(一般在工程目录中的debug目录下)。

       有的时候可执行程序需要脱离工程目录,如将程序放在其它电脑上运行时,以下是将工作目录设置成可执行程序目录的代码:

      (1). qt获得当前可执行程序目录:QDir::currentPath();

      (2).修改工作目录:bool QDir::setCurrent( const QString &path ) [static];

      (3).获得可执行程序所在目录:QString  QCoreApplication::applicationDirPath()  [static];

[cpp]  view plain copy
  1. <span style="font-family:SimSun;font-size:13px;">QString  dir = QApplication::applicationDirPath();  
  2. QDir::setCurrent(dir);</span>  

6.vs2010无法设置断点问题:The breakpoint will not currently be hit.     

  从菜单栏的 Tools->Options->Debugging->General  
  取消  "Require source to exactly match..." 项的选择。
  还有两个可能是
  1.  打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上。
  2. 由于Terminal Services 这个服务被禁用了,将这个服务设为自动,将这个服务启动。

 以上转自:http://www.cnblogs.com/mapk/archive/2007/08/19/861943.html

对于单个断点,可以右键—>location—>勾选“allow source code to be defferent”

7.qt主程序界面退出时,想要使程序退出:

      一般情况下,当程序有多个窗口时,如果没有关闭所有窗口,程序并不会终止,这是因为在窗口被创建时,默认将窗口的属性设置为QWidget::setAttribute( Qt::WA_QuitOnClose,true),即表示程序退出的条件是设置这个属性为true的所有窗口都退出。

     所以如果想要主程序界面退出的时候,程序结束,只要将该窗口上述属性设置为true,其余窗口该属性设置为false,并设置应用程序app如下即可:

     connect( &app,SIGNAL(lastWindowClosed()), &app, SLOT(quit());

8.qt+vs2010程序在其他为安装vs2010环境的计算机上无法运行解决方案:

        通过depends工具查找程序依赖的dll,正常情况下,对于没有安装vs2010环境的计算机想要运行该程序,需要加载msvcp100.dll、msvcr100.dll、msvcp100d.dll、msvcr100d.dll,这几个dll中100表示2010版。

        

9.QMainWindow控件中心控件自动添加滚动条,及对窗口标题栏上的最大、最小、关闭按钮的设置:

[cpp]  view plain copy
  1. QTextEdit *edit = new QTextEdit;  
  2. edit->setText(tr("hello world"));  
  3. edit->setGeometry(5,5,1000,800);   
  4. QScrollArea *area = new QScrollArea;  
  5. setCentralWidget(area);  
  6. area->setWidget(edit);//只是中心部分,其余自己自己补充  

按钮设置:

setWindowFlags ( Qt::WindowFlags type )
Qt::FrameWindowHint:没有边框的窗口
Qt::WindowStaysOnTopHint://总在最上面的窗口
Qt::CustomizeWindowHint://自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏
Qt::WindowTitleHint:显示窗口标题栏
Qt::WindowSystemMenuHint://显示系统菜单
Qt::WindowMinimizeButtonHint://显示最小化按钮
Qt::WindowMaximizeButtonHint://显示最大化按钮
Qt::WindowMinMaxButtonsHint://显示最小化按钮和最大化按钮

Qt::WindowCloseButtonHint://显示关闭按钮

10.设置窗口为模式对话框或者非模式对话框:

    QWidget :: void setWindowModality ( Qt::WindowModality windowModality )

11.当用自定义信息参数为自定义结构体时,显示error:

      QObject::connect: Cannot queue arguments of type 'MediaDbAttirbute' (Make sure 'MediaDbAttirbute' is registered using qRegisterMetaType().)

解决方法:

qRegisterMetaType<MediaDbAttirbute>("MediaDbAttirbute");



【Qt】Qt6系列教程汇总_qt6教程 简介:QT相关电子书、建议和相关参考网址。 阅读详情

相关推荐

【Qt】之 【bug】常见问题

qt常见问题与解决

-笔记- 2016

Qt如何解决QMessageBox覆盖子窗口问题

我们都会遇到这种情况,当子窗口点击一个按钮的时候,出现模态对话框,当将模态对话框消去时,子窗口不在最顶端了。 解决方法: 将子窗口先hide再show,因为Qt种show默认是出现在最顶端的。 ...

看看世界看看你 1396

Gemini Enterprise免费试用攻略:解锁企业级AI平台的隐藏技巧与避坑指南

本文详细介绍了Gemini Enterprise免费试用的全流程攻略,包括注册优化、团队协作、资源管理和典型应用场景。通过解锁企业级AI平台的核心功能如Gemini 3.0 Pro模型和Nano Banana图像生成系统,帮助企业高效评估AI与业务的契合度。文章还提供了安全合规与数据管理的实用建议,确保试用过程顺畅无忧。

weixin_29233857的博客 657

Qt5中QMessageBox按钮无法显示中文

问题描述:添加此翻译文件后QMessageBox按钮依然无法显示中文。 原因:qt5源码更新翻译文件没有更新。 解决方法: 1.搜索文件qt_zh_CN.ts,使用编辑器打开,将QDialogButtonBox修改为QPlatformTheme。 <name>QDialogButtonBox</name> 2.打开Qt Linguist程序,加载修改后的文件,点击"文件"菜单,选择另存发布为qt_zh_CN.qm文件,替换原有文件即可正常显示中文。 ...

m0_57787354的博客 584

Tesseract-Ocr踩坑下载以及进行检验

1 OCR,即Optical Character Recognition:光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。下载完成后进行解压找到这两个,然后复制到之前下载Tesseract-Ocr的tessdata文件下。可能会出现报错说chi下载的问题咱们不用管继续ok让它先下载完毕,后续会有下载chi的步骤。四、检验tesseract使用(将以下图片进行下载我这里将以下图片命名为3.png)我这里选的是2024年的版本如果下载不了;4 在安装的时候(找到下载的exe文件,双击)

m0_51428325的博客 1916

naca翼型_STARCCM+计算二维翼型气动性能

STAR-CCM+计算二维翼型气动性能一算例背景机翼理论主要研究翼型在流体中运动时的力学特性。在工程领域中,机翼以升力面、控制面、叶片或桨叶等形式出现。舰船上的舵、水翼、减摇鳍等都是机翼,螺旋桨、汽轮机叶片和压缩机叶片也都是利用机翼原理工作的,而在研究船舶操纵性时,甚至还可把船体的水下部分看作一个巨大的机翼。随着航空科学的发展,世界各主要航空发达的国家建立了各种翼型系列。美国有NACA系...

weixin_39863741的博客 1万+

QT MessageBox 头文件引用

今天做了个测试代码。在引用QMessageBox头文件时,编译器报错无此头文件,然后查了一些资料找到问题所在。 Qt5将MessageBox移到 widgets 下。因此可采用两个解决方案: 1)在.pro中添加 QT += widgets. 2)在引用头文件时 #include 但是考虑到Qt4和Qt5代码的通用,最好使用第一种解决方案。

secondtick的专栏 1万+

葵花 Himawari 8/9号数据学习记录-01-数据初识

葵花卫星学习记录,第一章:卫星的来源与卫星数据的波段介绍

weixin_44111909的博客 537

QT中QmessageBox bug的修复

   QT3.2版本的QMessageBox有这样一个bug,就是当你传的参数足够长以至于你的屏幕不能显示的时候就会将字符串截断,剩下的字符串就无法显示了,如果本身的字符串长度已知,那就很好办了,在字符串中间加换行符呗,但是很多时候这个字符串的长度是不定的,程序中发生异常了catch后把字符串显示出来,不同的问题显示的长度就不一样。   到QT4这个bug就被修复了,但是很多较老的软件用的还是

ShaPherD @ HUST 的专……栏 1380

Hermes Agent 对阵 OpenClaw:自我改进的 AI 队友

但在 2026 年 2 月,Nous Research 发布了 Hermes Agent,它带来了不同的愿景:一个不仅能够运行,还能学习的代理。在完成复杂的多步骤任务后,它会分析自己的操作并创建一个可复用的技能。对于已在使用 OpenClaw 的澳大利亚企业而言,这意味着您可以试用 Hermes Agent,而无需丢失数月的配置和自定义成果。最重要的区别在于理念:OpenClaw 是一个需要配置的工具,而 Hermes Agent 则是一个会学习的队友。OpenClaw 的技能是静态的。

xiaoshun007的专栏 1571

Vue3 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue3,nuxt3,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue3对接海康监控设备,无法连接,报错,vue3对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue3,海康,vue海康视频监控,

🏆 前端领域优质创作者 1万+

Qt项目中遇到的一些 小问题汇总

公司让负责qt界面开发,但是接触qt又不久,现将在项目中遇到的一些问题汇总下,一为了避免自己忘记,二希望能帮助到他人。 1.在程序关闭窗口时,显示提示窗口:        qt中有很多信号和相应的槽函数,上述问题需要拦截关闭窗口信息QWidget::close(),QWidget::closeEvent( QCloseEvent * event )重写,即对代码如下: [cp

ljasdf123的专栏 1067

科研级YOLOv8 Neck革新:HS-FPN模块赋能,让特征融合更高效且参数量直降100W的实战指南

在文件夹下新建HS_FPN.py,将上述和HS_FPN类的代码写入其中。这一步是为了让YOLOv8的代码架构能识别我们的自定义Neck模块。

FJN110的博客 153

QT4到QT5,打开项目,出现 QMainWindow: No such file or directory 等问题解决方法汇总

1、"error: QMainWindow: No such file or directory", 解决方法: 在.pro文件 #include <QMainWindow> 改为#include <QtWidgets>(若没有#include <QMainWindow>,直接添加#include <QtWidgets>),然后加上 QT...

qq_40318907的博客 1万+

【学习系列】SAP RAP 16:RAP应用部署集成至Fiori Launchpad 【On-Premise】

本文详细介绍了如何将开发完成的RAP应用部署到S4HANA 2023 On-Premise环境并集成到Fiori Launchpad的完整流程。主要内容包括:1)通过ADT工具创建Fiori项目并配置外部IDE(VSCode);2)使用npm命令部署应用到系统;3)通过事务代码创建语义对象、磁贴目录和目标映射;4)配置PFCG角色分配;5)补充了部署失败解决方案、翻译问题处理、自定义主题设置以及登录页面LOGO修改等内容。文章提供了step-by-step的操作指南,帮助开发者将预览模式的应用正式部署到生产

DeveloperMrMeng的博客 637

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Qt项目移植到mac上一些问题汇总

【代码】Qt项目移植到mac上一些问题汇总。

weixin_41605683的博客 989

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

CMake构建OpenCv并导入QT项目过程中出现的问题汇总

本文,将CMake构建OpenCv并导入QT项目过程出现的常见问题做了一下汇总,希望对你有所帮助

qq_54334713的博客 655

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VS2013+QT5.4.0+OpenCV2.4.9开发项目过程中碰到的问题汇总

我的电脑系统是Win10 64位系统开发VS2013+QT5.4.0+OpenCV2.4.9项目,下面是碰到过的问题,都是用下面方法解决的,亲测有效。 1、 warning MSB8027: Two or more files with the name of moc_Quantum_denoise_model.cpp will produce outpu 解决方法: VC++编译源文件时默认...

weixin_42118531的博客 1万+

2020-2021项目遇到的部分问题 编程语言C++ 编程软件QT

** 2020-2021项目遇到的部分问题 编程语言C++ 编程软件QT 本博客只用来自己做笔记用。之前一直写在word上,现在存入博客。 信号和槽 03_SignalAndSlot2 ** //标准的信号和槽 connect(&b1,&QPushButton::pressed,this,&MainWidget::close); /* &b1 信号发出者 &QPushButton::pressed 发出者的类名::信号的名字(信号名字是按F1)

Qingshan_z的博客 1466

QT过程遇到的各种问题(小白)

1. QT中提示没有QSqlDatabase这个目录(已加了QT +=sql) 解决:把之前编译过的项目清除掉就不会提示错误了。 2. 连接MYsql的时候出现,Authentication plugin ‘caching_sha2_password’ cannot be loaded: 找不到指定的模块。 QMYSQL: Unable to connect。 **2.**或者是 解决:请参考博文解决之法 ...

weixin_45677723的博客 1万+

qt遇到的问题汇总,不定时更新

使用QProcess时: 问题:QProcess::start: Process is already running 方法:在start后添加process->waitForFinished()

ly1705的博客 1129

科大讯飞语音识别C++版本SDK集成测试的一些问题,工具VS+QT

1:无法打开.ui文件,或打开后闪退 解决方法:右键.ui文件选择打开方式,手动添加QT designer.exe,然后设为默认方式。 QT designer.exe路径示例:QT5.13.0\5.13.0\msvc2017_64\bin 2:无法解析的外部符号,error LNK2019 原因: 链接问题,主要有头文件包含和Lib库包含问题 解决方法:1)右键属性,在VC++目录-库目录中添加lib路径,VC++目录-包含目录添加include 链接器,附加依赖项添加lib路径 修改活.

qq_38610729的博客 1970
上一篇: QThread的正确使用方法
下一篇: c++ volatile用法(转)
C_arm
博客等级 码龄16年 38粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值