原创 Windows I/O編程注意事項!!!(CreateFile或CreateFile打開後一定要調用CloseHandle(HANDLE)關閉)

調用Windows I/O讀寫文件和設備時,一定要記得關閉句柄,最好在return前面CloseHandle(HANDLE),任何有提前返回的分支也要CloseHandle(HANDLE),否則再次調用會打開句柄失敗,這是博主血淚教訓。博

原创 Qt通過類QFile寫入二進制數據(dd文件,write)

Qt的QFile類主要用於文件和設備I/O操作,本文主要用簡單示例總結QFile::write()函數將一個二進制數據原封不動的完整寫入binary.dd文件中。本文要把一個二進制字符串"0x7c 0x81 0xfd 0xf3"完整的寫入

原创 Qt熱插拔USB設備函數總結(Windows版)

1.1在一個QWidget上重寫虛函數QWidget::nativeEvent(),插拔USB設備後,會自動觸發該虛函數。下面是重寫虛函數代碼: #include <dbt.h> #include <QDebug> bool Widg

原创 調用宏DEFINE_GUID()需要頭文件Initguid.h

無論是在vs IDE還是qt IDE調用宏DEFINE_GUID()都需要頭文件Initguid.h,如下所示 #include <Initguid.h> DEFINE_GUID(GUID_DEVINTERFACE_DISK,

原创 Qt調用頭文件setupapi.h的函數SetupDiGetClassDevs()編譯出錯

博主用QtCreator集成開發環境和MinGW32編譯器編譯Windows下的API函數,即頭文件setupapi.h中的函數SetupDiGetClassDevs()時,編譯出錯。 1.1問題 錯誤如下: D:\QtProject\t

原创 C++枚舉類型用法總結(enum)(可以用枚舉字符常量代替常量)

C++枚舉類型enum表示枚舉,通常用於定義個新類型的字符常量,比如enum {January,February,March}。枚舉類型的作用域一般是整個文件或者類內。當枚舉類型定義在文件開頭時,則作用域是從定義位置開始往後(不包括函數內

原创 QtCreator中用C++的命名空間namespace替換全局變量用法

本文主要總結在QtCreator中,用C++的命名空間namespace替換全局變量的用法,其中命名空間是標準C++特有的。命名空間的聲明和定義跟類基本一樣,如下所示。其中命名空間相當於一個容器,裏面可以包含類,基本變量,函數,結構體,共

原创 Qt發佈程序(Windows平臺 IDE爲QtCreator)

Qt生成release後的可執行程序*.exe要發佈在其它平臺,需要用到Qt自帶的一個工具windeployqt.exe。只需要簡單的兩步就可以完成。 a1 把可執行程序放到單獨文件 a2 在qt自帶ming32編譯器執行命令windep

原创 C++中static用法之一(只在程序啓動的時候初始化一次,後續不在初始化)(函數內調用同名外部變量用作用域解析運算符::)

C++中static定義靜態變量時,只在程序啓動的時候初始化一次,後續不在初始化,且定義的該變量只能在該文件中使用,而不能誇文件使用。要想在其它文件中使用全局變量,則需要在定義的文件中使用extern關鍵字進行定義,並且在使用的其它文件中

原创 Qt編譯一大堆錯誤提示(error: cannot define member function 'QImageWidget::QSet::reserve' within 'QImageWid)

QtCreator集成開發環境出現一個bug,當定義一個類時,誤刪除了括號"};",就會提示一大堆錯誤,但是編譯時就是不提示那裏少了一個符號"};"錯誤,如下圖所示。 D:\Qt\Qt5.9.4\5.9.4\mingw53_32\inc

原创 C++函數模板原理和用法總結(template auto decltype())

函數模板是C++一個重要特性,主要用在同一種相同或者相似結構中,但是函數的參數不同,下面是函數模板原理和用法總結。 一、函數模板簡單用法 1.1簡單模板函數定義 template<typename T> void Swap(T &a,

原创 Qt繼承QWidget或者QWidget直接彈出窗口(非模態對話框)(對話框)

QWidget是Qt中主流的窗口類,實現QWidget窗口彈出主要有三個步驟。 1.1實例一個窗口類對象QWidget *widget = new QWidget(NULL); 1.2調用函數函數QWidget::setWindowsMo

原创 Qt中獲取樹形控件QTreeView選中行內容(QTreeView::model->itemData())

本文主要總結獲取Qt中獲取樹形控件QTreeView選中行內容,具體如下所述。 1.1核心函數 要獲取QTreeView選中行內容,只需要兩行代碼搞定,一個是綁定點擊選中行信號和槽函數connect(...),另一個是在槽函數中添加函數Q

原创 QTreeView樹形控件自動顯示水平滾動條(resizeColumnToContents())

本文主要總結Qt中QTreeView樹形控件自動顯示水平滾動條內容。 在Qt中,是默認根據需要顯示水平和垂直滾動條的。但是我們發現實踐中只能自動顯示垂直滾動條,而水平滾條無法自動顯示,在顯示窗口中多餘的內容用省略號“...”代替。 進過查

原创 Qt中void QTreeView::expand(const QModelIndex &index)基本用法總結(展開二級節點)(expandAll展開所有節點)

本文主要總結Qt中函數void QTreeView::expand(const QModelIndex &index)基本用法,用該函數可以展開指定樹形節點。如果要展開所有節點,可以用void QTreeView::expandAll()