原创 Qt顯示圖像彙總

1、QLabel Qt居中顯示圖片,圖過大則出現滾動條(ui方式)的兩種方法Label+ScrollArea、GraphicsView - 夕西行 - 博客園 (cnblogs.com) 2、QWidget+QPainter 自定義控件 Q

原创 Qt顯示圖像之QGraphicsPixmapItem

爲防止不斷地addItem導致內存增長,建議在初始化時new Item、scene->addItem。在合適的地方scene->removeItem(或scene->clear)或者item->setVisible。 h頭文件中 #inc

原创 高數據類型存取低數據類型,如int存儲uchar

數據通信領域爲了提高效率和節省空間,經常傳輸具體的字節數。 圖像的紅綠藍值一般是uchar類型0~255,即1個字節。那麼可以用int類型存紅綠藍(4個字節足夠存3個字節的內容)。 //char佔1個字節,int佔4個字節,足夠存

原创 c++ queue在多線程中的使用

queue隊列,先進先出。 多線程的一種使用案例: 生產者每3s push一個元素 消費者每5s才能 pop一個元素(隊首) 那麼,2個消費者就可以及時地消耗掉push的元素。 #include<iostream> #include<th

原创 c++ bind this 實現成員函數代替靜態函數

bind可以用成員函數來替代靜態函數。 回調函數一般使用靜態函數,其中需要傳入具體對象的指針,然後該對象的成員變量或函數,都需要加上“對象指針->”這個前綴。 bind可以將成員函數用於回調函數。成員函數多了一個隱含的參數this,所以直接

原创 鎖、原子變量

當多個線程操作同一全局變量時,需要對該變量進行保護。推薦使用原子變量,當然也可以使用加鎖。 原子變量,參考官方cplusplus.com/reference/atomic/atomic/,翻譯C++原子變量atomic詳解 - 知乎 (zh

原创 exe重啓自己,WinExec非阻塞、system阻塞

使用bat腳本,先殺死exe進程,再啓動exe restart.bat @echo off ::注意保存編碼格式爲ANSI,否則中文亂碼 taskkill /f /im "Restart.exe" echo "exe進程停止成功" :

原创 記錄CMake使用的一些異常

1、find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) 無法自動找到Qt,原因是環境變量裏沒有。因此係統環境變量Path裏進行如下設置  

原创 QLabel 圖片縮放居中、圖片適應控件、控件適應圖片

縮放居中 QPixmap pix = QPixmap::fromImage(m_QImg); ui.label->setAlignment(Qt::AlignCenter); ui.label->setPixmap(pix.scaled(

原创 Qt保留小數

以保留小數點後2位爲例,四捨五入 方式一 QString txt = QString("%1,%2,%3").arg(m_fAngle,0,'f',2).arg(m_fDeltaX,0,'f',2).arg(m_fDeltaY,0,'f'

原创 Qt錯誤排查

1、error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject 在添加Q_OBJECT後出現的錯誤提示。 解決:這個宏放在頭文件中,而不是cpp中。 原因:QT error LN

原创 Qt並行計算

比如QVector中所有元素+1,可以用並行計算。 QtConcurrent::map():將一個函數應用於一個容器中的每一項,就地修改 items。 void add(int &num) { num +=1; } {

原创 QtConcurrent::run()多線程的同步、異步

Qt 提供了 QtConcurrent 模塊,處理一些常見的並行計算,最大的特點就是無需再使用互斥鎖這種很低級的操作,全都封裝好了。除此以外,QFuture、QFutureWatcher、QFutureSynchronizer 類提供了一些

原创 Qt同步、異步

【同步、異步】 同步意味着事件、操作或進程是有序的,一個操作必須在另一個操作完成後開始執行。當多線程時通過鎖、信號量等機制來確保數據一致性或避免競爭條件。 異步則意味着事件、操作或進程是獨立的,可以在不等待其他操作完成的情況下開始執行。一定

原创 QToolBar右側添加QAction

使用QToolBar的addWidget,添加一個可伸縮的空QWidget //Action放右側:使用QToolBar的addWidget,添加一個可伸縮的空QWidget。 QWidget* spacer=new QWidget; s