用惯C#再用C++的一些麻烦事
2012-02-25 17:17 zhoujie 阅读(2873) 评论(7) 编辑 收藏 举报C#作为一种高级语言更接近于人的思维,而C++则更理解机器一些。就连平常用惯了的string类型,到了C++里变成了char*,wchar*等等原始的东东。由于平常只用QT这个类似C#对象系统的工具开发程序,主要奉行qt+winapi=一切,其他地都靠边站别阻挡我视线的原则,所以很少接触到纯粹c++的东西,下面把我认为是麻烦事,而C++高手们却视为家常便饭的知识点记录备忘。
1、常量字符串 :
主要是调用WinAPI函数时,有时需要const char*,有时需要const wchar*。
const wchar* wstr=L"this is a wide string"//没错加个L就搞定
如果你用的IDE和我一样是QTCreator的话,你会发现:L"中文"时,会出现编译错误--“Illegal byte sequence”。我用的2.2.1版本没发现好的解决方法,只能用笨拙的方法,找到包含中文的.cpp或.h文件--〉用Notepad打开--〉另存为utf-8,就可以正确编译了。
如果是QString变量而不是常量,加“L”就不灵了。这时需要强制类型转换:
2、对象为空的判断:
Dialog* dlg;
//mainwindow.cpp中判断为空,则创建。
if(!dlg){
dlg=new Dialog();
}
dlg.show();
本来以为这样就行了,结果出错!原因是:dlg指针没有显式初始化为0。
3、窗体设计:
a.Dock.Fill Qt中类似winforms的Dock概念是Layout布局 ,QT Creator中隐藏的好深:
4、输出调试信息:
程序运行时,在“应用程序输出”中可以看到输出信息。
5、对象的销毁:
C++没有垃圾回收,QT使用引用计数来管理对象的是否可以释放。通过delete释放和销毁对象:
QSqlDatabase::removeDatabase("qt_sql_default_connection");
//这里就不会有下面的警告了!
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.);
6、如果使用了windows的gdi等dll,需要添加对.lib的引用,才能被正确的连接,不然会有这样的连接错误:
解决方法: 在.pro工程文件中加入下面一行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2011-02-25 像使用C#一样使用C++