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工程文件中加入下面一行
