目錄大綱
- 序
- 認識Qt
- 學習網站
- 安裝Qt
- 構建項目及設置配置
- Qt右擊上下文菜單的某些選項之間區別
- 創建主窗口、設置窗口居中、dialog與widget與mainWindow比較
- pro文件
- 添加文件
- 多個UI界面的聯繫
- qmake
- 爲什麼main()函數總是有"return a.exec"
- int main(int argc, char *argv[]){}
- include <xxx.h> 與 include "xxx.h" 的區別
- #ifndef XXX_H #define XXX_H .... #endif
- ~MainWindow()
- ~QString()
- setCodecForTr()與setCodecForCStrings() 、setCodecForLocale()
- tr() string和QString亂碼的解決
- setText() setPlainText()
- Qt中獲取當前路徑
- QByteArray
- QWdiget
- QWidget *parent = 0
- setStyleSheet("QLabel{border:5px solid rgb (0x00,0xff,0x00,0x00);}")
- Qt::FocusPolicy
- QLayout
- QComboBox
- QSpinBox
- QThread
- QMath
- QDebug
- QSettings
- QStandardItem
- QMessageBox
- QPushButton
- 繪圖類
- QPainter 及其使用
- QPalette調色板
- const
- virtual
- moc,Q_OBJECT
- emit,signal,slot
- Q_PROPERTY
- Q_UNUSED
- Qsrand與Qrand
- QRectF QRect
- QPoint與QPointF
- QSize
- 數學計算函數
- QFile常用函數及使用
- Dialog
- 容器類
- 在學習STL風格迭代器的兩種分類("QMap與QHash")時,要接觸的知識點【時間複雜度爲主】
- explicit與implicit
- globalPos()與pos()
- TextEdit
- typedef
- qreal
- 鍵盤事件
- 界面刷新
- 解決亂碼
- 線程
- 異常/問題
- “collect 2:error :ld returned 1 exit status”
- 編寫串口軟件出現的異常
- D:\....\mainwindow.cpp:20: error: undefined reference to `SPComm::isOpen() const'
- D:\....\debug\spcomm.o:-1: In function `ZN6SPCommC2EP7QObject':
- "munmap_chunk(): invalid pointer"
- "error: ‘tr’ was not declared in this scope"——“tr”未在此作用域中聲明
- “: -1: error: 沒有規則可以創建“mainwindow.o”需要的目標“../qt_battery/ui_mainwindow.h”
- “Project ERROR: Unknown module(s) in QT: declarative”
- “ error: ‘class Ui::MainWindow’ has no member named ‘timerLabel’ ui->timer ”
- “deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] char *i2c_device = "/dev/stm32_control";”
- “QObject::connect: No such slot QLabel::valueChange2() in ../batteryDisplay/m。。。”(即:“QObject::connect: No such slot Xxx....”)
- "/qopengl.h:140: error: GL/gl.h:沒有那個文件或目錄"
- "error:forward declaration of class"
- “Project ERROR: Unknown module(s) in QT: opengl”
- “: -1: warning: TARGET is empty”
- "Signal received The inferior stopped because it received a signal from the operatina system."
- "libpng warning: iCCP: known incorrect sRGB profile"
- C:\...\項目名2.0.0.20161005\forms\about.cpp:-1: warning: C4819(編碼問題)
- “glibc detected”
- 快捷鍵
- Linux中命令
- 自定義控件及其他Qt使用例子
- QProcess
- Java,C++,C某些的比較
- Qt Assistant
- 指針及運算符
- 打包發佈
- 全志平臺T3
- Qt調度器
- Qt看門狗
- Qt5串口收發數據(通信)
- 動態變化的例子
- 挑戰
- 隨便看看
序
本人會些Java、C++,速成做了Qt前端工程師,但是做項目時遇到很多不懂或問題,想在此分享於大家,也方便自己回顧;若有關於Qt問題,可評論提出,或許能幫些忙;若編寫有誤,也可評論,我會積極糾正的,提前道聲謝謝~
認識Qt
- Qt1
- 1991年由Qt Company(原公司名:奇趣科技)開發的跨平臺C++ 圖形用戶界面(GUI)應用程序開發框架——Qt。它既可以開發GUI程序,也可用於開發非GUI程序,比如控制檯工具和服務器。
Qt是面向對象的框架,使用特殊的代碼生成擴展(稱爲元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,並且允許真正地組件編程。 - 1996年進入商業領域,成爲全世界範圍內數千種成功的應用程序的基礎。它也是目前流行的Linux桌面環境(KDE)的基礎,KDE是Linux發行版的主要一個標準組件。
- 2008年,奇趣科技被諾基亞公司收購,Qt也因此成爲諾基亞旗下的編程語言工具。
- 2012年,Qt被Digia(芬蘭IT服務公司)收購。
- 2014年,Digia宣佈成立“The Qt Company”全資子公司,以進一步推動Qt產品的開發和市場擴張。
- 2014年4月,跨平臺集成開發環境Qt Creator 3.1.0正式發佈,實現了對於iOS的完全支持,新增WinRT、Beautifier等插件,廢棄了無Python接口的GDB調試支持,集成了基於Clang的C/C++代碼模塊,並對Android支持做出了調整,至此實現了全面支持iOS、Android、WP,它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所有功能。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等圖形界面庫和 Windows 平臺上的 MFC,OWL,VCL,ATL 是同類型的東西。
學習網站
安裝Qt
在Linux時
- Linux操作系統——qtcreator5.8安裝教程
- 安裝後,我的Qt Creator是4.2.1版,Qt是5.8.0版。
在Windows時
- Win10系統安裝Qt5.8.0,不會出現“缺少某dll文件”的問題。
- 打開Qt軟件,載入已有項目:
- [提示譯文:沒有找到這個Qt Creator實例創建的 .user 設置文件。您以前是否在其他機器上使用過這個項目,或者使用過不同的使用路徑?您是否仍然要加載設置文件“C:\Userslyanfa\Desktop\DialogDialog.pro.user”?]
- 按No後會跳轉到這個窗口,要點擊“Configure Project”按鈕。
- 注:若剛安裝Qt Creator,第一次載入項目最好點No,然後配置環境,到了第二次第三次第N次都可以按Yes,環境可自動配置成Qt5.8.0 MinGW 32bit。
- 若按Yes,直接在“編輯”的“項目框”中出現對應項目。
- 無論是按Yes還是No,最終運行時,構件套件都是Qt5.8.0 MinGW 32bit配置。
- [提示譯文:沒有找到這個Qt Creator實例創建的 .user 設置文件。您以前是否在其他機器上使用過這個項目,或者使用過不同的使用路徑?您是否仍然要加載設置文件“C:\Userslyanfa\Desktop\DialogDialog.pro.user”?]
- Win7系統中安裝Qt,也許會出現這樣的問題。
- 如何安裝Qt 5.8.0 +mingw
- 若你下載了VS2010或VS其他版本的軟件,則你需要找上圖的“1、”;
- 若沒有下載,只想下載Qt Creator,則找上圖的“2、”;
- 若找不到5.8.0版,那你不用麻煩了,直接進入下面的文檔鏈接
安裝或異常解決方案文檔:
鏈接:https://pan.baidu.com/s/18a7CKGmvMTKwVK6fv7YEfg 提取碼:xjjx
找到Qt5.8SetUp文件夾,下載之後,雙擊安裝—》安裝時一定要勾選Tools的MinGW選擇(默認不勾選),否則後面項目運行會報錯—》安裝時,可能會彈出警告
- 可以看:計算機中丟失api-ms-win-crt-runtime-l1-1-0.dll的疑難雜症解決方法、 Win7中出錯:無法啓動此程序,因爲計算機中丟失api-ms-win-crt-runtime-|1-1-0.dll、 因爲計算機中丟失api-ms-win-crt-runtime-l1-1-0.dll”問題的解決辦法(無法定位程序輸入點 xxx於動態鏈接庫 api-ms-win-crt-runtime-l1-1-0.dll上:這篇是真正解決我問題的文章;安裝64位的Qt,彈出警告“無法定位程序輸入點ucrtbase.abort於動態鏈接庫api-ms-win-crt-runtime-11-1-0.dll”,我就安裝dll補丁,安裝失敗,接着安裝Service Pack1之後安裝補丁,成功了!)】】
- 插曲:所謂的報錯:【Error while building/deploying project movie (kit: Desktop Qt 5.8.0 MSVC2015…】
-
Cannot find file: E:\Qt程序\day.pro. When executing step "qmake"的問題
-
Qt Creator 報錯:Error while building/deploying project helloworld (kit: Desktop Qt 5.6.2 MinGW 32bit) When executing step “qmake”【當我安裝Qt5.8.0時未勾選Tools的MinGW環境配置,當我項目運行時,就會報這樣的異常(當時環境配置是Qt默認環境),我使用過文章的“方法一”,似乎也不奏效,可能問題源頭是“未配置MinGW”】
OrQt學習一: Qt 在 win7 的安裝和環境配置【圖的“1、”是方案二,圖的“2、”是方案一】
QT5.8.0+MSVC2015安裝以及環境配置(不需要安裝VS2015)【簡單粗暴的講解,當時只覺得唯有這個是有用的信息:跳轉Qt官方Qt5.8.0版本的軟件下載鏈接】 -
[下面倆文章,我暫時未用過]
QT creator 5.8.0/5.9+opencv2.4.13.6安裝與配置方法
QT5.12安裝圖文教程與安裝成功後環境配置詳細教程
32位系統與x86系統關係
構建項目及設置配置
Qt右擊上下文菜單的某些選項之間區別
創建主窗口、設置窗口居中、dialog與widget與mainWindow比較
- Qt MainWindow 程序主窗口
- Qt 設置窗口居中顯示和窗體大小
- 07_Qt的三大窗口dialog、widget、mainwindow
- 講解MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
- QT基礎:33—QT的窗體類以及窗體設置函數
pro文件
- pro = project
- 當你打開一個Qt程序,必定要選擇“打開xxx.pro文件”
- QT pro文件詳細寫法+實例
- QT中PRO文件寫法的詳細介紹,很有用,很重要!
- QT pro文件詳解
pri文件
- Qt中 .pro 文件和 .pri 文件簡介
- pri = “pro + include”;
- 可以把 ×.pro 文件內的一部分內容單獨放到一個 ×.pri 文件內,然後include到×.pro 文件中
- 如:將×.pro 文件用上的"configure function build"分類,獨立出分別放入configure.pri、function.pri、build.pri,接着在×.pro 文件中include即可
include( $${PWD}/../../。。。/examples/examples.pri )
PS:若多個pri文件,最好集成於一個example.pri中,而在pro文件中,include的example.pri即可(include括號裏的路徑中不能出現回車符或者空格,否則系統找不到對應的文件)
添加文件
添加資源,在資源裏添加並使用圖片
- QT creator:創建和添加資源resource【創建資源文件】
- Qt中爲工程添加資源文件、給按鈕添加圖片【只是大概講解‘添加資源文件’,但主要是給按鈕添加圖片】
qrc文件
- Qt5之qrc資源文件【創建qrc文件】
- Qt中的qrc文件【講解分析】
在已有的項目中分別添加頭文件、源文件 與 使用.h文件
多個UI界面的聯繫
qmake
- 若將Qt項目放入開發板中,則要在終端輸入指令生成exec文件,用得上:qmake、make clean、make這三個指令
- 【qmake常用語法】(看不出與qmake有關)
qmake手冊——qmake語言
Qt編程中qmake的使用詳解
爲什麼main()函數總是有"return a.exec"
- 關於qt的主程序調用exec()
- a.exec()的作用,該怎麼解決
[譯文: 第一行:進入主事件循環並等待,直到調用exit()。返回設置爲exit()的值(如果通過quit()調用exit(),則返回0)。
第二行:需要調用此函數來啓動事件處理。主事件循環從窗口系統接收事件,並將這些事件分派給應用程序小部件。
第三行:要使應用程序執行空閒處理(即在沒有掛起事件時執行特殊函數),請使用超時爲0的QTimer。使用processEvents()可以實現更高級的空閒處理方案。
第四行:我們建議您將清理代碼連接到aboutToQuit()信號,而不是將其放在應用程序的main()函數中,因爲在某些平臺上,QCoreApplication::exec()調用可能不會返回。例如,在Windows上,當用戶註銷時,系統在Qt關閉所有頂級窗口後終止進程。因此,在QCoreApplication::exec()調用之後,不能保證應用程序有時間退出事件循環並在main()函數結束時執行代碼
"引用"欄的譯文: 彙編代碼:
進入主事件循環並等待,直到調用exit()。返回設置爲exit()的值(如果通過quit()調用exit(),則返回0)。
有必要把這個函數稱爲…] - Qt exec()做了什麼
- qt: exec()的用法,accept()和accepted的概念
myDlg.exec()==QDialog::Accepted
- my1.exec()==QDialog::Accepted
- exec():顯示模式對話框【不關閉此對話框,不能執行別的操作】
- my1是一個對話框或下拉框,當調用exec方法時,彈出‘框’,等待用戶響應,用戶可能點擊確定或選擇xxx項,那麼exec返回QDialog::Accepted值(int類型),如果點擊取消或不選擇點擊框外範圍,則返回QDialog::Rejected(int類型)
- 這句話是通過返回值來確定用戶的響應結果。
- 一般作爲if語句的條件
模態與非模態的區別
模態對話框
- 模態窗體一般指:在其沒有被關閉之前,用戶不能與同一個應用程序的其他窗口進行交互,直到該對話框關閉。
非模態對話框
- 非模態窗體是指:當被打開時,用戶既可選擇和該對話框進行交互,也可以選擇同應用程序的其他窗口交互。
show()與exec()的區別
show()
- 可以顯示非模式也可以顯示模式對話框。
- 當設置modal爲true時,顯示模式對話框;若false(默認值)則顯示非模式。
MyDialog myDlg;
myDlg.setModal(true); myDlg.show();//模態
myDlg.setModal(false);或者myDlg.setModal(); myDlg.show();//非模態
exec()
- 顯示模式對話框。
myDlg.exec();
同中不同:模式對話框的顯示不同
- show()
- 顯示的模態對話框並非真正意義上的模態,雖然在對話框彈出的時候,程序的其它操作(按鈕、窗口切換等)都失效了;但是程序仍然在調用對話框之後,繼續執行後面的代碼。但這樣,就不會得到窗口的返回值。
- exec()
- 在調用之後,程序就被鎖定在原地。等待窗口的關閉。
順便提下:C語言的main函數爲什麼要返回0?
int main(int argc, char *argv[]){}
- main函數參數argc,argv說明
- argc 是指命令行輸入參數的個數(以空白符分隔) ;
argv存儲了所有的命令行參數。
include <xxx.h> 與 include “xxx.h” 的區別
#ifndef XXX_H #define XXX_H … #endif
之間的關係與區別
#ifndef 本文件的頭文件名全大寫XXX_H
#define 本文件的頭文件名全大寫XXX_H
........某內容.......
#endif
延伸
#ifdef…#else…#endif與#ifndef…#else…#endif
- #if #ifdef #ifndef #elif #else #endif的用法【#ifdef、#ifndef、#if使用實例】
- c++ #ifndef#define#endif的用法(整理) 【以上提到的#指令與if判斷的使用整理】
#if defined…#endif
#if…#elif…#else…#endif與if…else if…else
- 【C基礎】#if、if、#ifdef、#if defined之間的區別【含#if 與if #ifdef的區別以及宏的幾種用法大多內容】
- C語言條件編譯(#if,#ifdef,#ifndef,#endif,#else,#elif)
- #if、#elif、#else 和 #endif 指令詳解 (C/C++)【後面有時間看看,感覺多餘】
- 使用多個if和使用if else if的區別【效率上的比較】
- if else用法詳解,C語言if else用法完全攻略【用法攻略,可忽略】
區別
\ | #if | if |
---|---|---|
名稱 | 條件編譯 | 條件語句 |
介紹 | 是C語言中預處理部分的內容,它是編譯器編譯代碼時最先處理的部分 | 是 C 語言中的關鍵字,它根據表達式的計算結果來覺定執行那個語句,它裏面的每個分支都編譯了的 |
簡單說 | 根據 宏條件 選擇性地編譯語句,它是編譯器在編譯代碼時完成的 | 根據條件表達式選擇性地執行語句,它是在程序運行時進行的 |
代碼 | qb-01區代碼 | qb-02區代碼 |
意思 | 如果宏條件符合,編譯器就編譯這段代碼,否則,編譯器就忽略這段代碼而不編譯 | 做A條件判斷 |
什麼時候用 | 如果你的條件在程序編譯前就已經確定了,那就用#if | 如果條件需要在程序運行過程中才能判斷,則用if |
qb-01:
#define A 0 //把A定義爲0
#if (A > 1)
printf("A > 1"); //編譯器沒有編譯該語句,該語句不生成彙編代碼
#elif (A == 1)
printf("A == 1"); //編譯器沒有編譯該語句,該語句不生成彙編代碼
#else
printf("A < 1"); //編譯器編譯了這段代碼,且生成了彙編代碼,執行該語句
#endif
qb-02:
#define A 0
if (A > 1)
printf("A > 1"); //編譯器編譯該語句,但因爲A == 0 未執行
else if(A == 1)
printf("A == 1"); //編譯器編譯該語句,但因爲A == 0 未執行
else
printf("A < 1"); //編譯器編譯該語句,因爲A == 0 故執行
~MainWindow()
- Qt程序報error: undefined reference to `MainWindow::~MainWindow()’
- 析構函數(Destructor)也是一種特殊的成員函數,沒有返回值,不需要程序員顯式調用(程序員也沒法顯式調用),而是在銷燬對象時自動執行。
- 構造函數的名字和類名相同,而析構函數的名字是在類名前面加一個~符號。
- 函數名是標識符的一種,原則上標識符的命名中不允許出現~符號,在析構函數的名字中出現的~可以認爲是一種特殊情況,目的是爲了和構造函數的名字加以對比和區分。
- 析構函數沒有參數,不能被重載,因此一個類只能有一個析構函數。如果用戶沒有定義,編譯器會自動生成一個默認的析構函數。
- 析構函數裏的delete,銷燬組件、部件緩存,減少內存或釋放內存,防止內存泄漏。
~QString()
- QString類
- QString::~QString ()
- 表示:銷燬這個字符串並且如果這是 這個字符串 的最後一個複製,就釋放“真實的”字符串。
QString
QString::number()
- 原型: 常用:
static QString number(int value, int base=10);
【若base值未賦值,默認爲10】 - 說明:十進制整型value值轉成十進制字符串
可以用於“int類型轉成QString類型”
int val = 6;
QString str = QString::number(val);
錯誤:QString str = new QString() 或 new QString 或 new QString("43");
否則,報錯:"錯誤:從'QString*'轉換爲請求的非標量類型'QString'"
正確:QString str = "";或QString str;
非標量與標量類型
參考:
《SQL與關係數據庫理論——如何編寫健壯的SQL代碼》一一2.5 標量類型vs.非標量類型
錯誤:轉換爲非標量類型(Error: Conversion to non-scalar type)
錯誤:從“基本類型”轉換爲請求的非標量類型“NamedType <基本類型>”
共用體 結構體 枚舉的特點與區別
QString::at ( uint i )
- 原型:QChar QString::at ( uint i ) const
- 返回在索引i處的字符,或者如果i超過字符串的長度返回0。
const QString string( "abcdefgh" );
QChar ch = string.at( 4 );// 打印ch == 'e'
QString str = "After finishing the homework,she does her housework~";
qDebug() << "str[2] = " << str.at(2);//打印:str[2] = 't'
QString::arg()
1.
QString m = tr("%1:%2:%3").arg("12").arg("60").arg("60");
//結果是m = "12:60:60"
2.
QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char( ' ' )) const
[在QString頭文件:inline QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const]
分析:
第一個參數是要填充的數字(一定是十進制,若二進制數值傳入,也會被認爲是"十進制"數值),
第二個參數爲最小寬度,
第三個參數爲進制,
第四個參數爲當原始數字長度不足最小寬度時用於填充的字符
如:
QString text = QString("%1:%2")
.arg(123, 5, 10, QChar('0'))
.arg(456, 5, 10, QChar('0'));
//結果是text = "00123:00456"
從QString頭文件看出:一個arg()函數最多實現九個參數;
若一定要實現九個以上的參數值呢,可以這樣:
QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11")
.arg("1","2","3","4","w","6","7","8","9").arg("a","b");
//結果是:"1 2 3 4 5 6 7 8 9 a b"
QString的isEmpty與isNull
- QString的isEmpty與isNull區別
- Qt: QString::isEmpty()與QString::isNull()區別
- isEmpty()如果字符串沒有字符,則返回true;否則返回false。
- isNull() 如果字符串是無效的,則返回true;否則返回false。
- 區別:
(1)由於歷史原因,Qt對無效字符串和空字符串進行了區分。對於大多數應用程序,重要的是字符串是否包含任何數據,這可以使用isEmpty()函數來確定;
(2)無效的字符串指的是QString沒有初始化,這也是isEmpty與isNull的區別;
(3)無論QString有沒有初始化,QString()與QString("")的isEmpty都爲真,而QString()的會被判定爲無效字符串。
isEmpty與isNull的基本區別
QString().isEmpty(); // returns true
QString("").isEmpty(); // returns true
QString("x").isEmpty(); // returns false
QString("abc").isEmpty(); // returns false
QString().isNull(); // returns true
QString("").isNull(); // returns false
QString("abc").isNull(); // returns false
toInt()
- Qt十六進制轉十進制轉ASCII碼,附ASCII碼錶
- 原型:int toInt(bool *ok=Q_NULLPTR, int base=10) const;
- 如:toInt(0,16)
- 表示:十六進制轉十進制的函數
- 表示:十六進制轉十進制的函數
QString str1("F");
int i1 = str1.toInt(0,16);
qDebug() << i1 << " = i1~~~";
std::string與QString
如:
int data = 123;
QString convertedValue = QString("%1").arg(data,16,2,QLatin1Char('0')).toUpper();
//arg()函數在上面已說明,int類型的data轉QString類型,而toUpper()函數:把小寫字母轉換爲大寫字母。
QByteArray ba = convertedValue.toLatin1();//將QString轉QByteArray類型
ba[15] = '1';//可以直接更改QByteArray某index的字符
std::string str = ba.toStdString();
//QByteArray的toStdString()專門從QByteArray轉成std::string類型
/* 該語句就是你們要找的!!! */
QString convertedValue1 = QString::fromStdString(str);
//利用QString的fromStdString函數,將std::string類型轉成QString類型
或者
QString qstr = QString::number(123);//int類型的數據轉QString類型
string s = qstr.toStdString();//除了QByteArray有toStdString(),QString也有
QString qstr2 = QString::fromStdString(s);//將std::string類型轉成QString類型
延伸
atoi()和itoa()
- atoi()和itoa()函數詳解以及C語言實現
- 各類數字與字符串轉換的標準庫函數【存在些許問題,但是函數的意義是可信的】
- C語言 atoi()和itoa()函數 整數與字符串的相互轉換
atoi()
- atoi函數 字符串轉數字,數字轉字符串C函數
- C語言 字符串和數字轉換函數
- 原型:int atoi(const char *str );
- 所屬頭文件:stdlib.h【Windows系統的Qt纔有,不是一個標準的c函數】
- 作用:把字符串轉換成整型數。
- 說明:參數str:指 要進行轉換的字符串。
stoi()
參考:
該函數,在 進制間的轉換 方面中,起到很大作用:
C++中二進制、字符串、十六進制、十進制之間的轉換
【c++ 二進制字符串轉成10進制數】
itoa()
- Linux編程:11 itoa函數未定義標識符
- C錯誤:對’_itoa’的未定義引用
- 原型:char *itoa( int或者long value, char *string,int radix);
- 所屬頭文件:stdlib.h【Windows系統的Qt纔有,不是一個標準的c函數】
- 作用:將整數value 轉換成字符串存入string 指向的內存空間 ,radix 爲轉換時所用基數(保存到字符串中的數據的進制基數)。
- 說明:value:要轉換的數據。string:目標字符串的地址。radix:轉換後的進制數,可以是10進制、16進制等,範圍必須在 2-36。
setCodecForTr()與setCodecForCStrings() 、setCodecForLocale()
函數 | 描述 |
---|---|
QTextCodec::setCodecForCStrings(textc) | 主要用在用字符常量或者QByteArray構造QString對象時使用的默認編碼方式。 |
QTextCodec::setCodecForTr(textc) | 這個函數的作用是設置傳給tr函數時的默認字串編碼。 |
QTextCodec::setCodecForLocale(textc) | 這個函數主要用於設置和對本地文件系統讀寫時候的默認編碼格式。 |
tr() string和QString亂碼的解決
QString拼接數值或字符串
- qt QString 字符串的拼接,支持變量拼接的方法【使用QString::arg()函數】
- QString拼接【拼接的四種方式,其中,‘+’操作符只能用於組合拼接字符串,若組合字符串與數值的話用sprintf()函數或者另外兩個函數】
- QT開發(二十七)——QT常用類(一)【提到QString的拼接函數】
setText() setPlainText()
Qt中獲取當前路徑
- Qt 程序獲取程序所在路徑、用戶目錄路徑、臨時文件夾等特殊路徑的方法【QString QCoreApplication::applicationDirPath():獲取程序當前運行目錄】
QByteArray
- Qt學習筆記:QByteArray Class
- QByteArray詳解
- QByteArray_Qt文檔
- (Qt)深受QByteArray的陷害
- 關於QByteArray用法的小總結
- QByteArray使用方法舉例
- Qt中16進制數據的QByteArray與QString的轉換
- QByteArray在Qt5.9中的賦值和顯示以及存儲形式(toHex()函數)
- (C#基礎) byte[] 之初始化, 賦值,轉換。
- QByteArray簡單入門
QString convertedValue = QString("%1").arg(data,16,2,QLatin1Char('0')).toUpper();
//arg()函數在上面已說明,int類型的data轉QString類型,而toUpper()函數:把小寫字母轉換爲大寫字母。
QByteArray ba = convertedValue.toLatin1();//將QString轉QByteArray類型
ba[15] = '1';//可以直接更改QByteArray某index的字符
std::string str = ba.toStdString();
//QByteArray的toStdString()專門從QByteArray轉成std::string類型
QWdiget
QWidget *parent = 0
- qt QWidget *parent = 0
- 正確理解Widget::Widget(QWidget *parent) :QWidget(parent)這句話
- Qwidget詳解
- 正確理解Widget::Widget(QWidget *parent) :QWidget(parent)這句話
- MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)的理解
- MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)解析
- 表示某控件不是任何控件的子控件;
- 參數 parent 指向父窗口,如果這個參數爲 0,則窗口就成爲一個頂級窗口。
setStyleSheet(“QLabel{border:5px solid rgb (0x00,0xff,0x00,0x00);}”)
- QWidget背景(透明)問題【譯爲簡體版:Qt 的一些心得】
- (轉載)Qt5.9中setStyleSheet設置圖形界面詳細用法
- Qt 之 樣式表的使用——設置樣式的方法
- QT基礎:63—Qt樣式表(setStyleSheet函數、.qss文件)
- QSS-qt樣式表
QWidget *m_statusInd = new QWidget;
m_statusInd->setFixedSize( 16, 16 );
m_statusInd->setStyleSheet("background-color: red");
//使用部件Widget的setStyleSheet函數
Qt::FocusPolicy
- Qt::FocusPolicy的使用
- Qt.FocusPolicy
- QWidget的setFocusPolicy的注意事項
- 原型:
void setFocusPolicy(Qt::FocusPolicy policy);
- 有五種屬性:
- 原型:
屬性 | 表示的十六進制 | 描述 |
---|---|---|
Qt::TabFocus | 0x1 | 接受Tab鍵焦點 |
Qt::ClickFocus | 0x2 | 接受鼠標單擊做焦點 |
Qt::StrongFocus | TabFocus or ClickFocus or 0x8 | 接受Tab鍵和鼠標單擊做焦點 |
Qt::WheelFocus | StrongFocus or 0x4 | 滑輪作爲焦點選中事件 |
Qt::NoFocus | 0 | 不接受焦點 |
#include <QLineEdit>//若頭文件沒有繼承QWidget,就要加上這個
QLineEdit *edit = new QLineEdit;
edit->setFocusPolicy(Qt::StrongFocus);//默認使用Qt::StrongFocus屬性
QLayout
addLayout與addWidget
- QT佈局之addWidget和addLayout(widget基類)【QWidget的addWidget()】
- Qt中QLayout.addWidget()參數結構及用法【QLayout的addWidget()】
- QT 佈局時使用 addStretch 可伸縮設置
- Qt 佈局設置stretch,不起作用解決方法
- Qt addStretch()
- addLayout()方法用於向佈局中添加子佈局。
- addWidget()方法用於向佈局中添加控件。
注:因qstatusbar頭文件繼承了"QWidget"類,則截圖的addWidget函數是QWidget類的【但QWidget類頭文件裏並沒有addLayout()及addWidget()兩函數】;該頭文件定義的addWidget函數只有兩個參數,其中stretch參數與addStretch()函數效果一樣,在m_statusText控件與m_statusInd控件之間空開(間距)10像素。 - addStretch()方法用於某控件前面平均分配間距(即空白,類似段落前的間距)。
layout佈局
QComboBox
- Pyqt5_QComboBox【與Qt5_QComboBox差不多】
addItem()
- 原型:常用:
inline void addItem(const QString &text, const QVariant &userData = QVariant());
- 說明:添加一個下拉選項
- 說明:添加一個下拉選項
for(int i=0; i<8; i++)
ui->cmbCode->addItem(QString::number(i));
QSpinBox
- Qt 之 QSpinBox 和 QDoubleSpinBox
- QSpinBox旨在處理整數和離散值(例如:月份名稱)。如圖所示:圖-1
- QDoubleSpinBox則用於處理浮點值。如圖所示:圖-2
- 他們之間的區別就是處理數據的類型不同,其他功能都基本相同。
圖-1
圖-2
setEnabled()
- 原型:
void setEnabled(bool);
- 所在文件:qwidget.h
- 這個"選值框"是否啓用setEnabled():
- 設置成true時,相當於激活了框,框的狀態不再是死的,而是會對觸摸或者點擊產生反應,並且可以響應一些觸發事件。
- 而設置成false時,框呈灰色的,無論是否可點擊(即使將setClickable()設置成true),都無法響應任何觸發事件。如圖所示:圖-1
圖-1
QThread
sleep()
Windows下
- Qt中如何使用Sleep函數
- QThread::sleep(10);參數的單位爲秒
- Sleep(15000);參數的單位爲毫秒
#include <QDebug> //qDebug()要求的
#include <QTimer> //QTimer要求的
#include <synchapi.h> //Sleep()要求的
QTimer *ti = new QTimer(this);
ti->start(1000);
qDebug() << "Start to sleep 10 seconds~~";
QThread::sleep(10);
qDebug() << "End to sleep 10 seconds But start to Sleep 15 seconds~~";
Sleep(15000);
qDebug() << "End to Sleep 15 seconds~~";
Linux下
QMath
pow()
- C++中pow()函數
- 【C/C++】 二進制字符串 轉 十進制整型
- 原型:
double pow( double x, double y );
- 描述:計算x的y次冪
- 頭文件:#include “math.h”
- 原型:
運用:
二進制字符串轉爲十進制數值
QString val = "0000000010001100";
QByteArray ba = val.toLatin1();
int nVal = 0;
for(int i = 15;i>=0;i--)
{
if(ba[i] == '1')
{
int t = 15-i;
nVal += pow(2, t);//2的t次冪
}
}
QDebug
- qDebug用法總結
- qDebug 的使用
- qDebug的用法
- 經常用到:重定向操作符(<<)
- 頭文件:#include “qdebug.h” 或者 #include <QtDebug> 或者#include <QDebug>[因爲編輯器原因,將英文半角尖括號符號用了全角的尖括號]
QString chin = "中文繁體";
qDebug() << chin.toStdString().c_str();
char da = 'a';
qDebug("%04x",da);
qDebug()<< "MainWindow : Init Completed ";
qDebug() << "Hello" << 123;
qDebug() << QString("Hello") << QPoint(10, 10);
int num = 20;
char str[20]="hello world";
qDebug("如果只寫在括號裏,是不需要QDebug頭文件的 %d %s", num, str);
QSettings
- QSettings使用二(普通ini文件的讀寫:實際操作)
- QSettings 類
- QSettings 自定義格式
- Qt配置信息設置(QSettings在不同平臺下的使用路徑)
- QSettings 用法總結(很好用)
- QT QSettings 操作(導入導出、保存獲取信息)*.ini文件詳解
- QSettings配置讀寫-win註冊表操作-ini文件讀寫
- 所屬文件:#include <QSettings>
QSettings st = new QSettings("qModMaster.ini",QSettings::IniFormat);
//IniFormat存儲格式:'讀寫配置ini文件'可以儲存一些系列配置,即將設置存儲在INI文件中。
QStandardItem
- QStandardItem_Qt文檔
- QRowTable表格控件(三)-效率優化之-合理使用QStandardItem
- 是一個數據結構,它可以存儲一個cell單元格的各種信息,比如文本、圖標、是否可選、字體、別景色、前景色等等。並且QStandardItem可以有孩子和兄弟,它是爲model提供數據存儲的節點。
- 使用該類:#include “qstandarditemmodel.h” 或者 #include <QStandardItem>
- 可能用上的
void setEditable(bool editable);
- 說明:若editable爲true,設置表格某列的某項可編輯,若爲false,則不可編輯。
QAbstractItemModel
- QAbstractItemModel_Qt文檔
- QT開發(三十八)——Model/View框架編程
- Qt淺談之十九:Model/View實現表格和統計圖【相當於QtCreator工具書的View章節】
- Qt5模型/視圖結構-視圖(View)
QStandardItemModel
- Qt QStandardItemModel用法(超級詳細)
- QListView,QTreeView和 QStandardItemModel的簡單使用
- 【QT】模型與視圖,QStandardItemModel and QTreeView
- Qt 常用類——QStandardItemModel
- 是標準的基於項數據的數據模型,以類似於二維數組的形式管理內部數據,適合於處理表格型數據,其顯示一般採用 QTableView。
- 是標準的以項數據(item data)爲基礎的標準數據模型類,通常與 QTableView 組合成 Model/View 結構,實現通用的二維數據的管理功能。
- 使用該類:#include “qstandarditemmodel.h” 或者 #include <QStandardItem>
- 爲什麼QStandardItemModel和QStandardItem,引入同樣的頭文件?
- 因爲在qstandarditemmodel.h頭文件中,定義聲明瞭“class QStandardItemModel”、“class Q_GUI_EXPORT QStandardItem”。
- 繼承了QAbstractItemModel類
- 構造函數原型:
QStandardItemModel(int rows, int columns, QObject *parent = Q_NULLPTR);
- 說明:聲明數據模型(表格)有rows+1(說明row是某行的下標)行、columns列,基類是Q_NULLPTR2。
- 注:Q_NULLPTR表示該類(此處指QStandardItemModel)不作爲頂層容器。
- 可能用上的
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- 說明:取下標爲row的行及第column+1列的QModelIndex()父類類型的值作爲index索引值。
- 可能用上的
void setItem(int row, int column, QStandardItem *item);
- 說明:row與column從0開始,設置row+1這麼多行column+1這麼多列的項(一項項組合起來成一個表格)。
//在頭文件的類外定義聲明
static const int AddressColumn=0;
static const int ValueColumn=1;
//在cpp中的類的函數中定義聲明
int m_startAddress = 2;//設置開始的索引號從2開始
int m_noOfItems = 4;//讀取指定表格的兩列四行(或者指四項[是"鍵-值"————“addressItem-valueItem”的形式])
for (int row = 0; row < m_noOfItems ; row++)
{
//將int類型轉QString類型賦值於QStandardItem的addressItem變量
QStandardItem *addressItem = new QStandardItem(QString::number(m_startAddress+row));
model->setItem(row, AddressColumn, addressItem);//設置addressItem放在 row從0開始遍歷的對應行 及 索引號爲0的列 中(即,addressItem放在每行的第一列)
addressItem->setEditable(false);//設置addressItem項不可編輯,不可雙擊或點擊觸發編輯事件
QStandardItem *valueItem = new QStandardItem("-");//設置valueItem的值爲字符"-"
model->setItem(row, ValueColumn, valueItem);//讓valueItem放在每行的第二列
//valueItem->setEditable(valueIsEditable);//若爲false,調用這個函數的控件不能被編輯,如果設爲true或者不調用這個函數,則控件可以編輯。
}
延伸:C++11中可使用nullptr替代Q_NULLPTR
- nullptr3表示對象句柄、內部指針或本機指針類型不指向對象(即,空指針)。nullptr空指針常數可以轉換爲任意類型的指針類型。
- 如圖所示:(Windows的Qt中找到的)
區別
- 宏Q_NULLPTR向讀代碼的人說明了意圖,而nullptr向編譯器說明意圖。Q_NULLPTR沒有提供類型安全,僅僅是“裝飾”作用的。若軟件兼容或支持C++11,宏Q_NULLPTR會自動擴展爲nullptr。如果編譯器不支持c++11,它將被替換爲NULL(被替換爲0)。
- 什麼時候用Q_NULLPTR?【
Johannes Matokic解答的譯文:實際上Q_NULLPTR只有一個目的:允許使用nullptr而不喪失對不支持c++ 11/ c++ 0x的編譯器的支持,因爲直接使用nullptr會導致這種設置中的錯誤。其不利之處在於,與nullptr相比,回退到NULL(或舊Qt版本中的0)可能會導致意外的運行時行爲,並限制所支持的用例。在極少數情況下,你的目標是不兼容c++ 11的編譯器,使用Q_NULLPTR,但是要確保在禁用c++ 11特性時代碼能夠正常工作。在所有其他情況下,nullptr是更好的選擇,因爲它會導致編譯錯誤,而不是與遺留編譯器一起使用時出現錯誤的運行時行爲。Qt 5.7,後來取消了編譯不使用c++ 11的支持,所以如果依賴於這些版本,就不需要Q_NULLPTR。還有其他一些特性,如qMove或Q_DECL_OVERRIDE,它們在支持編譯器時提供了更好的語義,而不會破壞舊編譯器上的編譯。
Martin Hennings解答的譯文:使用Q_NULLPTR來保持編譯器的獨立性。如果您現在決定使用nullptr,那麼您的代碼將無法使用較舊的c++98編譯器進行編譯。如果決定使用NULL,就會失去c++11類型安全性,即使在當前編譯器中可用。出於同樣的原因,存在qMove(x)等宏以及相應的定義Q_COMPILER_RVALUE_REFS。】
- 什麼時候用Q_NULLPTR?【
setData()
- 項目中經常使用該函數,在qstandarditemmodel.h中:
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- 將項目在索引index處的角色role數據設置爲值value。
- 如果成功返回true;否則返回false。
- 如果數據設置成功,則應該發出dataChanged()信號。
- 基類實現返回false。這個函數和data()必須爲可編輯的模型重新實現
static const int ValueColumn=1;//在頭文件的類外定義聲明
//在cpp中的類的函數中定義聲明
QStandardItemModel *model = new QStandardItemModel(0,2,this);
//以代碼所在的該類爲基類,初始化:一行兩列的表格;第一參數,指的是行下標index;第二參數,指的是表格的每行有幾列。
for (int i = 0; i < m_noOfItems; i++)
{
QModelIndex index = model->index(i, ValueColumn, QModelIndex());
//取下標爲i,第valueColumn列的QModelIndex類型的索引號
//qDebug() << index << " = index!";
//若i=0,打印QModelIndex(0,1,0x18da0380,QStandardItemModel(0x18d29be8)) = index!
model->setData(index,"N/A",Qt::DisplayRole);
//將索引號index行列要顯示出來(DisplayRole角色屬性)的值設置爲"N/A",
}
data()
- 用了setData(),怎麼少的了用data()函數?
- 在qstandarditemmodel.h中,原型:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- 說明:返回由索引index(表格的行索引號從0開始)引用的項的給定角色role(默認爲Qt::DisplayRole)下存儲的數據。
QTableView
- 若只使用QStandardItemModel,會遇到個表格問題,將十進制轉16位的二進制後,表格的列不能自動調整大小!
- 此時,使用QTableView再好不過了!
//根據內容自動調整所有列的列寬
//設置表格的列與內容相匹配
ui->tblView->resizeColumnsToContents();
//我將放在mainWindow.cpp的某函數中,起作用了呀!
//【若你的未起作用,可以看看第三篇文章,或許對你有幫助】
- QTableView根據內容自動調整列寬行高
- QTableView根據內容自動調整大小(resizeColumnToContents解決不了的)
- Qt表格視圖-簡單表格
- QT模型(表格繪製)
- QT表格的實現
- Qt中模型/視圖結構
QTableWidget
- QTableWidget使用注意要點總結
- QT中QTableWidget清空或刪除內容功能
- QT中的QTableView+QTableWidget
- QTableWidget與QTableView的區別
QTreeView
參考:
QTreeWidget
參考:
繼承了QTreeView類:
QItemSelectionModel
- Qt文檔 QItemSelectionModel
- Qt 學習之路:視圖選擇 (QItemSelectionModel)
- 基類是QObject,但製作表格時可能會用到該類,跟蹤視圖的選定項,獲取單元格改變的值。
- Qt 的信號順序問題(以QListWidget 的itemSelectionChanged爲例)
- Qt QStandardItemModel用法(超級詳細)
QMessageBox
- 消息對話框,用於顯示提示、警告、錯誤等信息,或進行確認選擇。
- Qt 5種標準對話框及使用方法詳解【其中一種就是QMessageBox】
- 原型:
static StandardButton critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton);
- 說明:被用於保留嚴重錯誤。彈出警告(有紅×的圖標)窗口,第一參數表示父類是this(MainWindow該類),這樣的話將窗口彈在父類“主窗口”的前面居中位置,而且窗口是模式的,第二參數是窗口的標題,第三參數是窗口彈出的內容,第四參數表示未賦值的話,默認(缺省)按鈕的文本爲OK,第五參數是缺省選擇的按鈕,缺省表示沒有選擇(該參數沒什麼用)。
//彈出窗口最多有三個按鈕,超三個就會報錯!
QMessageBox::critical(this, "Request failed","Add items to Registers Table.","Ready","Cancel","Close");
//設置三個或者兩個按鈕後,右上角的紅×都是失效的!
//默認第一個按鈕亮起藍色框,按鈕文本可以用中文表示
//只有設置一個按鈕或者使用默認按鈕OK的時候,右上角的紅×纔是有效的!
QMessageBox::critical(this, "Request failed","Add items to Registers Table.","Ready");
QString errorDetails = "404";
第三參數可以是:(拼接的字符串)
QString("An internal error occurred. Please ") +
"call technical support at 123456789 and report\n"+
"these numbers:\n\n" + errorDetails +
"\n\n<Application> will now exit."
critical() 與 Critical
- 都在qmessagebox.h中定義。
- QMessageBox::Critical用來顯示Critical圖標。而QMessageBox::critical()函數應用於保留嚴重錯誤。
QPushButton
setChecked()
- 原型:
void setChecked(bool);
- 所在文件:qabstractbutton.h
- 說明:設置選中狀況。會影響click、toggled觸發事件的bool值。
- 實操情景:若設置true,就一直是選中狀態(怎麼點,都是藍色按鈕),不可變換按鈕文本,觸發不了toggled事件,但能觸發clicked事件。
- QCheckBox也有該函數,選中是“勾選複選框”狀態。
isChecked()
- 原型:
void setChecked(bool);
- 所在文件:qabstractbutton.h
- 說明:提示按鈕是否已經標記、已選中;返回按鈕的狀態,已選中:返回值爲True;未選中:返回False。大多用於“判斷”。
setCheckable()
- 原型:
void setCheckable(bool);
- 所在文件:qabstractbutton.h
- 說明:設置按鈕是否能夠被選中;若設置爲true,表示能選中該按鈕,但出現選中變藍再選中變米白色的情況,不是這個函數控制的,而是setChecked函數控制,默認點一次,setChecked(true)變藍,反之亦然。
- 實操情景:如果設置True,則表示按鈕將保持已點擊(變藍色)和釋放狀態,只要再點一次,按鈕可從藍色變正常色;若爲false,按鈕不可點擊。
ui->btTest->setCheckable(false);//表示btTest按鈕不可選中,特徵:呈灰色,不可點擊
繪圖類
QPixmap、QImage、QBitmap、QPicture
- QPixmap、QImage、QBitmap、QPicture【顯示指定圖片爲例子】
- Qt筆記——繪圖(QBitmap,QPixmap,QImage,QPicture)
- QPixmap簡單使用、QPixmap的使用
- QImage與QPixmap完全解析
- Qt中用QPixmap::load來加載圖片
QIcon或QLable縮放 QPixmap的自適應
- Qt實用技巧:代碼中QIcon縮放(QPixmap的手動放大和QIcon自動縮小)
- pixmap和label設置圖片自適應大小
- Qt:QPixmap的圖片縮放方法
- [QT]QPixmap圖片縮放和QLabel 的圖片自適應效果對比
- pixmap和label設置圖片自適應大小
- qt 中 QPixmap 類的使用及用 QLabel 顯示圖像 -計算機視覺 with OpenCV 3 and Qt 5
- Qt QPixmap設置圖片
QPainter 及其使用
QPalette調色板
setAutoFillBackground
- Qt中setAutoFillBackground
- qt 透明度設置(setWindowOpacity 和 setAutoFillBackground 和 帶透明度的畫刷填充就好了)
- 此函數保存小部件背景是否自動填充,true 爲是 false爲否。
const
- 轉:關於C++ const 的全面總結【全面】
【這篇文章有些問題,不過我在這糾正一下,如圖所示】
- QT學習筆記——“const"【簡述】
- C++中const的使用和放在函數前和函數後的區別【指針使用const關鍵字】
virtual
- C++:多態與純虛函數、虛函數【簡述】
- qt中的虛函數【相對全面】
- C++ 中的虛函數、純虛函數區別和聯繫或C++虛函數與純虛函數用法與區別(轉)【前面看不懂的,看這篇應該就懂了】
- 關於虛函數和 Qt 的 Event 函數的簡單說明【通過例子說明】
moc,Q_OBJECT
- 官方解釋:Q_OBJECT宏必須出現在類定義的私有部分中,該類定義聲明自己的信號和插槽,或者使用Qt的元對象系統提供的其他服務
- mocOrmoc
- Q_OBJECT宏的作用
- QT中添加Q_OBJECT出現的問題【多重繼承時QObject一定要放在最前面】
- [該文章的譯文:剛收到這個錯誤消息而編譯一個小類,它來源於QTreeWidgetItem:錯誤C2039:“staticMetaObject”:不是’QTreeWidgetItem’的成員。這就是說QTreeWidgetItem不是從QObject繼承的,這意味着您自己的單繼承類也不是從QObject繼承的。繼承QObject是使用Q_OBJECT宏的先決條件之一,如果您和我一樣,您可以自動地將Q_OBJECT宏插入到任何與Qt GUI相關的類中。如果您沒有在子類中使用任何元對象,例如信號/插槽或屬性,那麼只需取出Q_OBJECT宏。如果您需要使用信號和插槽,您還需要使您的子類從QObject中多次繼承。如果您採用這種方法,請記住,多重繼承要求QObject位於第一,否則您將得到與上面相同的錯誤,或者類似於您的類從moc的兩個QObject子類繼承]
emit,signal,slot
- Qt 信號槽 signals slots 特點 限定符的區別【談到public slots、private slots】
- QT 中 關鍵字講解(emit,signal,slot)
- Qt5 emit——不同窗口之間的觸發信號
- 關於QT的emit的一點疑問——論壇
emit
- 發出信號(A類信號函數)
- 連接信號(A類信號函數)與槽(B類或本類槽函數)
- emit也可以向一個已定義的信號函數提供參數
- emit無非就是告訴編譯器編譯的時候A類信號函數 的定義實現在另一個地方(A類),從B類的connect方式中可以找到。
A類:
.h裏:
Q_SIGNALS:
void SShowB();
.cpp裏:
按鍵釋放事件函數裏:
switch (event->key()){
case Qt::Key_M:{
hide();//隱藏當前或A類窗口
emit SShowB();
}
}
B類:
.h裏:
private:
A a;
B b;
public slots:
void SlotShowThisWindow();
.cpp裏:
在構造函數裏:
connect(&a,SIGNAL(SShowB()),this,SLOT(SlotShowThisWindow()));//顯示當前窗口
聲明SlotsShowB函數:
void SlotShowThisWindow(){
show(); //顯示當前或B類窗口
}
信號與槽的連接關係 sender()函數
Q_SLOTS Q_SIGNALS namespace
Q_PROPERTY
Q_UNUSED
- 是宏,可以去掉編譯器因形參未使用產生的警告,可以規避代碼靜態檢查工具未使用參數檢測。
- Q_UNUSED 的使用
- Q_UNUSED ( name ) 的用法
Qsrand與Qrand
- Qt生成隨機數的方法【瞭解及比較 分別爲:C++隨機數的用法Orrand()和srand()函數的用法及QT生成隨機數】
在Qt中,設置隨機種子的方法是void qsrand(uint seed)。它的參數seed是一個無符號32位數,一般都是與調用時間關聯起來【qsrand用法】
比如使用QT獲取0-10之間的隨機數
#include <ctime>
//這裏以時間爲種子
qsrand((quint32)time(0));
int res = 0+qrand()%10;
qsrand(QTime::currentTime().msec()); //取時間作爲產生隨機數的種子
timer->start(qrand()%5000+1000);//qrand()%5000+1000是產生一個在 1000-6000間的數,timer->start()是根據上述產生的數值來啓動定時器
QRectF QRect
- Qt 4.8: QRectF Class Reference【還可查閱其他關鍵字的定義】
QRect Class Reference
QPoint與QPointF
QSize
QRect QSize QPoint 的使用
數學計算函數
- qAbs() qMin() qMax() qBound()
- Qt學習(二)算法(qAbs()、qMax()、qRound()、qSwap())及正則表達式
- Qt四捨五入取模取餘操作【qRound與qRound64】
QFile常用函數及使用
- QT 對文件的操作(創建、拷貝、寫入、刪除)
- Qt拷貝文件、文件夾、創建文件夾、刪除文件夾操作
- QT 讀取txt文件的幾種方法
- Qt實現讀取、顯示、修改並保存txt文件
- Qt – MainWindow實現文本新建/打開/保存/另存
QDir
mkpath和mkdir的區別
代碼實現創建文件夾功能
- Qt創建文件夾【用指針變量】
- 【Qt5】判斷文件夾是否存在並新建文件夾【用普通變量】
代碼實現刪除文件夾
Dialog
FileDialog
- FileDialog::getOpenFileName()函數用法及FindDialog::FindDialog(QWidget *parent) :QDialog(parent)
- 使用前要:#include <QFileDialog>
容器類
在學習STL風格迭代器的兩種分類(“QMap與QHash”)時,要接觸的知識點【時間複雜度爲主】
explicit與implicit
- 其實是:隱式轉換和顯示轉換之間的比較
- C++ 隱式轉換和顯示轉換【看完這個,explicit的用法差不多會了】
- C++ explicit關鍵字詳解
- C++中的explicit關鍵字介紹
- C++中的explicit關鍵字
globalPos()與pos()
函數 | 描述 |
---|---|
globalPos() | 給出的座標信息是相對於桌面的,即以桌面左上角爲原點。 |
pos() | 是相對於窗口的,以窗口左上角爲原點(去除邊框)。 |
- 即pos()給出的是一個相對位置座標。而globalPos(),給出的是一個絕對座標。
- qt的pos()和globalpos()(globalpos是相對於桌面的)
TextEdit
- 文本框,代碼控制寫入字符串,可能出現中文亂碼
- Qt中QTextEdit顯示字符串
- QTextEdit如何顯示漢字?——論壇
- qt怎麼在textedit中顯示中文
typedef
qreal
- QT中qreal關鍵字詳解(RGBDSLAM_V2)【圖的來源】
也有這個說法:“在桌面操作系統中(比如Windows, XNix等)qreal其實就是double類型;而在嵌入設備系統中,qreal則等同於float 類型。”
鍵盤事件
鍵盤事件之回車事件Qt::Key_Return與Qt::Key_Enter
- 分別是字母區大鍵盤迴車鍵Qt::Key_Return、數字區小鍵盤迴車鍵Qt::Key_Enter
- qt 回車事件之Qt::Key_Return與Qt::Key_Enter
- qt綁定回車鍵和確定按鈕
- Qt鍵盤迴車事件keyPressEvent之Qt::Key_Enter與Qt::Key_Return
界面刷新
- 【一般使用update()函數】
- QT 界面刷新
解決亂碼
線程
異常/問題
“collect 2:error :ld returned 1 exit status”
- 採用“編寫代碼”的方式來實現應用程序功能時,遇到的異常/問題,“collect 2:error :ld returned 1 exit status”,用這篇文章的第三個解決方法(根據我當時需求,我先註釋頭文件沒有定義的槽函數,後面完善功能,才繼續編寫,定義槽函數)
- QT編譯報錯,error: collect2: error: ld returned 1 exit status. 【論壇,隨便看看,可能扯到該篇文章:C++繼承中關於子類構造函數的寫法、自學QT之QT編程中出現collect2.exe👎 error: error: ld returned 1 exit status的解決辦法】
- QT錯誤:collect2:ld returned 1 exit status的解決方法之一
- collect2: error: ld returned 1 exit status 錯誤分析
編寫串口軟件出現的異常
D:…\mainwindow.cpp:20: error: undefined reference to `SPComm::isOpen() const’
- 說明SPComm類的isOPen()函數沒有定義
- 解決:在cpp裏寫入即可:
bool SPComm::isOpen() const
{
if(m_serialPort->isOpen())
return true;
else
return false;
}
D:…\debug\spcomm.o👎 In function `ZN6SPCommC2EP7QObject’:
- 解決:在pro文件加上"QT += serialport"
“munmap_chunk(): invalid pointer”
“error: ‘tr’ was not declared in this scope”——“tr”未在此作用域中聲明
“: -1: error: 沒有規則可以創建“mainwindow.o”需要的目標“…/qt_battery/ui_mainwindow.h”
- 報錯來源:
在qt_battery項目目錄下打開終端進行qmake和make編譯,生成了項目的Makefile、.exe文件、moc_xxx.cpp文件、xxx.o、moc_xxx.o文件,之後做某些操作(身爲小白的我,沒有習慣在終端指定項目目錄下編譯,但這個‘所謂的某些操作’之前必須要先編譯),完成後,我在終端執行“make clean”指令,將.o文件清空,並將剩下的文件(除了xxx.cpp xxx.h xxx.pro)放入回收站,然後在Qt中調試模式運行qt_battery程序,在控制檯中出現該異常了 - 解決:
缺什麼給什麼,編譯過的項目,就不能像“沒在終端編譯過,沒生成.o文件,也可直接在Qt軟件中調試運行,程序能照常運行”的項目了,必須“qmake和make編譯”產生Makefile、.exe文件、moc_xxx.cpp文件、xxx.o、moc_xxx.o文件之後,纔去Qt軟件中調試運行。
- 若項目簡單,沒有“界面文件”(就不會在某.cpp中加入"
#include “ui_mainwindow.h”"),則不會報這個錯。
“Project ERROR: Unknown module(s) in QT: declarative”
-
接觸的這個項目是從別人那拷貝的,因爲環境配置(有人另稱爲交叉工具鏈【我虛擬機Linux裏的Qt使用的是GCC編譯器套件】)不同,彈出了這異常,導致不能正常執行該程序(下面第三張圖,按鈕呈灰色,表示不能運行程序)
-
QT中的未知模塊:聲明性的/Unknown module(s) in QT: declarative
【可參考:QtDeclarative module】
以上都沒有說怎麼解決,我就自個找找看:在xxx.pro文件中將"QT += declarative"代碼註釋(加“#”表示註釋),就不會出現該異常,但有新的異常出現了。。。 -
補充:
一個異常解決了之後還有新的異常,可能存在某些原因:項目涉及底層程序或某些驅動程序,不好註釋更改,又或者富有複雜性、移植性不高,不易配置相應的庫或環境配置。。。但是“辦法總比問題多”,吼~嘎油!
GCC:GCC(GNU編譯器套件)常用簡要介紹、GCC編譯器(Linux gcc命令)30分鐘入門教程
“ error: ‘class Ui::MainWindow’ has no member named ‘timerLabel’ ui->timer ”
- 有人這麼解決的:C語言,C++編譯遇到問題:has no member named ''XXX‘
- 而我的解決方式:
- 分析:“異常的意思是:主窗口的ui界面沒有timerLabel標籤控件”,
- 找問題:“QLabel控件有名字爲timerLabel的!”,
- 解決:在對應項目文件夾下----》在空白處右擊鼠標彈出菜單----》選擇打開終端,編譯一遍:“qmake”、 “make clean”、 “make”(接着我關閉項目,重新載入項目【若編譯之後運行還是出現了異常,則多做這個步驟】),然後運行,異常解決了
- 補充:
- Qt的常見編譯錯誤
- Qt系列 :用MSVC2015編譯常見編譯錯誤及解決方案【目前遇不到這樣的問題,先放着或許某天用得上】
“deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] char *i2c_device = “/dev/stm32_control”;”
- (譯爲:不推薦將字符串常量轉換爲“char*”)
- warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 【解決:const char *i2c_device = “/dev/stm32_control”;】
- 也有這種方法:解決C++中[Warning] deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]【char* s改爲char s[]】
- warning:deprecated conversion from string constant to 'char *'解決方案【全面方案】
“QObject::connect: No such slot QLabel::valueChange2() in …/batteryDisplay/m。。。”(即:“QObject::connect: No such slot Xxx…”)
- Qt 信號和槽異常: QObject::connect: No Such slot baseClassName::subClassfunction() in …【補充:摘抄網友:檢查槽函數名拼寫是否有誤,以及對應的signal和slot的參數是否一致
如果還不行的話,清理項目,刪掉原有的moc_xxx.cpp,重新執行qmake.
還有一點要注意的是:signal和slots的參數要一樣】 - QT運行出錯:QObject::connect: Parentheses expected以及QObject::connect: No such slot ***【異常的產生是因爲connect()的第四個參數的槽函數少了“()”】
“/qopengl.h:140: error: GL/gl.h:沒有那個文件或目錄”
- 如何擺脫這些編譯器錯誤glu.h?(how do i get rid of these compiler errors in glu.h?)
- 【Qt】Qt5.9.0: error: GL/gl.h: 沒有那個文件或目錄【輸入指令sudo aptitude install libgl1-mesa-dev】
- 錯誤GL/gl.h: No such file or directory的解決方法
- QT常見錯誤之GLU頭文件沒法使用
- 解決找不到GL/gl.h的問題
“error:forward declaration of class”
“Project ERROR: Unknown module(s) in QT: opengl”
- Project ERROR: Unknown module(s) in QT: opengl【遇到這個問題,搜百度,目前都沒有解決好問題,這個關於OpenGL的項目我就先放下不弄了,就是很苦惱,我明明安裝更新了GL庫還是出現這個異常,不知道哪位大神能指教一二】
- Project ERROR: Unknown module(s) in QT: webkitwidgets
- 編譯QT5.7.0遇到 ERROR: Unknown module(s) in QT: quick
“: -1: warning: TARGET is empty”
“Signal received The inferior stopped because it received a signal from the operatina system.”
- 異常譯文:下級停止,因爲它收到了來自操作系統的信號。
Signal name : SIGSEGV Signal meaning : Segmentation fault"
- 【突然彈出提示,我都懵了,百度上都幫不了我,我後面自己解決了,知道是那段代碼造成的,但具體不知道錯哪裏,我就一直調試,後面解決了,因爲隔太久才記錄該異常,具體解決方案給予不了,只能看下次是否遇上,再記錄具體解決方法了】
- Qt 錯誤:The inferior stopped because it received a signal from the Operating System
- qt調試時出現的錯誤:The inferior stopped because it received a signal from the Operating System.
- Linux下QT界面編程解決SIGSEGV的SIGNAL錯誤
“libpng warning: iCCP: known incorrect sRGB profile”
- libpng warning: iCCP: known incorrect sRGB profile解決辦法
- libpng warning: iCCP: known incorrect sRGB profile告警處理
- 解決問題:libpng warning: iCCP: known incorrect sRGB profile
C:…\項目名2.0.0.20161005\forms\about.cpp👎 warning: C4819(編碼問題)
- 完整版異常:C:\項目名(1)\項目名_V2.0.0.20161005\forms\about.cpp👎 warning: C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失
- warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失
- 徹底解決Qt中文亂碼以及漢字編碼的問題(UTF-8/GBK)
- 可能導入他人項目時,編碼格式不一致:(Windows:找菜單–》選項–》窗口的文本編輯器–》行爲–》文件編碼–》選擇UTF-8)
- 可能本地安裝了VC,影響Qt軟件導入他人項目,需要卸載Qt軟件,重新導入
“glibc detected”
- “glibc detected”, free(), invalid pointer解決方法【free函數我這邊無效】
- Linux+QT+OpenCv攝像頭調試心得(3)---- glibc detected *** free(): invalid pointer: 0xafeff000
快捷鍵
- 當使用Qt時,快捷鍵的使用是必不可少的,而且提高不少的工作效率呢~
常用
快捷鍵 | 意義 | 備註 |
---|---|---|
Ctrl+X | 剪切選中範圍 | |
Ctrl+V | 粘貼 | |
Ctrl+C | 複製 | |
Ctrl+O | 打開文件 | |
Ctrl+S | 保存修改內容 | |
Ctrl+N | 彈出“新建項目”窗口 | |
Ctrl+↑ | 滾動條向上 | (Ctrl+↓作用與之類似) |
Ctrl+← | 焦點在的那行,若在單詞或詞組後,會出現在單詞或詞組的前面 | (Ctrl+→作用與之類似) |
Ctrl+/ | 在選中部分區域的頭和尾加上"/* */",在選中整個函數代碼或語句塊代碼的每行前面加上"//“註釋符號,若沒有選中區域,在光標所在的行加上”//",若已經有"註釋符號",快捷鍵之後會取消"註釋符號" | |
Ctrl+Z | 撤回[向前撤回] | |
Ctrl+Shift+Z | 重寫[向後重寫] | 一般用Ctrl+Y表示向後撤回,但Ctrl+Y好像不是重寫作用,反正按了沒有反應 |
Ctrl+回車Enter | 光標只要在該行(無論是代碼前還是代碼中或尾),快捷鍵之後,該行的下一行出現空行,光標出現在空行中 | |
Shift+回車Enter | 光標在整行代碼前面,快捷鍵之後在該行的上一行會插入空行,但光標還在該行代碼前面 | 其實與回車Enter效果一樣 |
Shift+Ctrl+回車Enter | 光標則與上面的相反了,只要在該行(無論是代碼前還是代碼中或尾),快捷鍵之後,該行的上一行出現空行,光標出現在空行中 | |
Shift+’ | 在選中區域的頭與尾加上雙引號"" | 注意:一定在英文輸入的雙引號纔有這樣的快捷鍵效果 |
Tab | 若未選中代碼,光標在代碼中,相當於“空格”的作用,會在光標前空一格或兩格或四格;光標在代碼最前面,會在光標前空四格 ,整行代碼往後走。若選中代碼,整體都會向後走,每行代碼最前多四格空格 | Shift+Tab是其反向操作 |
Shift+Tab | 若未選中代碼,光標在代碼中,會將光標前的空格清除;光標在代碼最前,會將光標的該行向前減少四個空格。若選中代碼,整體會向前走,每行代碼減少四個空格 | 與Tab是反方向的作用 |
Ctrl+Tab | 當前窗口與前一個窗口的跳轉 | |
Ctrl+H | 選中某部分改過的代碼,按快捷後,會打開Diff窗口,比較選中代碼範圍或文件的差異 | 如圖:kj-01(紅色部分是改之前的代碼,綠色部分是已改的代碼) |
Ctrl+F | 若未選中單詞,會自動捕捉光標附近的單詞,若選中整個語句,會出現淡藍色背景的框 框住選中的語句,彈出Find小窗口進行查找 | 如圖:kj-02(第一張圖,選中的值有重複的,呈黃色,第二張圖,選中範圍,有重複的背景呈黃色,無重複的呈淡藍色背景) |
Ctrl+A | 選中當前文件的所有內容 | |
Ctrl+B | 對當前項目所有文件進行“遍歷編譯檢查”,系統查看是否存在問題,若存在問題,會在問題控制檯呈現。若有代碼修改未及時保存,它會彈出提示“以下文件有未保存的修改【如圖:kj-16】” | 如圖:kj-03 |
Alt+D | 彈出調試菜單的子菜單項 | 如圖:kj-04 |
Alt+E | 彈出編輯菜單的子菜單項 | 如圖:kj-05 |
Alt+F | 彈出文件菜單的子菜單項 | 如圖:kj-06 |
Alt+B | 彈出構建菜單的子菜單項 | 如圖:kj-07 |
Ctrl+T | 彈出運行項目的構建項 | 如圖:kj-08 |
Alt+T | 彈出工具菜單的子菜單下 | 如圖:kj-09 |
Alt+W | 彈出控件菜單的子菜單下 | 如圖:kj-10 |
Alt+H | 彈出幫助菜單的子菜單下 | 如圖:kj-11 |
Ctrl+I | 選中部分代碼,相當於做了一次“Shift+Tab”操作,按了一次,對同樣代碼按第二次第三次都不會有反應的 | |
Ctrl+J | 若未選中代碼,按了快捷鍵,將光標所在行與下一行之間的空格清除;若選中部分代碼,按快捷鍵後,會將代碼中的所有的空格清除,只留下有意義的空格,變成簡化的代碼行 | 如圖:kj-12(第一張是按鍵前,第二張是選擇範圍按鍵後) |
Ctrl+K | 打開項目文件搜索欄,可以進行文件名的搜索 | 如圖:kj-13(第一張是按鍵後,立馬彈出的樣子;第二張是進行搜索的樣子) |
Ctrl+L | 好像沒什麼用,光標出現在代碼中(可選中代碼,也可不選擇代碼),按這個快捷鍵,文件搜索欄會出現“l <line>:<column>”(因爲該編輯器問題,將半角的英文"<>"改用全角的尖括號);若光標不在代碼中,而是選中某個文件或文件夾,按鍵後並沒有反應 | 如圖:kj-14 |
Ctrl+M | 在光標所在行(無論有沒有選中代碼),按一次快捷鍵,會在行數標誌旁加“書籤”圖標;再按一次,取消“書籤”圖標 | 如圖:kj-15 |
Ctrl+Q | 退出Qt窗口(關閉Qt軟件)。若你不小心按到,而且剛剛修改的代碼未保存,它會彈出提示“以下文件有未保存的修改” | 如圖:kj-16 |
Ctrl+R | 按鍵後,對【如圖:kj-17】的紅圈圈起的已選中的項目重新構建,相當於“Release(Run)”運行發佈操作。若有代碼修改未及時保存,它會彈出提示“以下文件有未保存的修改【如圖:kj-16】” | |
Ctrl+U | 若未選中代碼範圍,光標在某單詞“前、中、後”,會自動選中單詞;關閉在標點符號或標號 “前、中、後”(反正光標不在單詞旁),會自動選中標號的 該行 / 整段語句塊 / 整段語句 | |
Ctrl+W | 將當前文件關閉 | |
F1 | Windows端Qt中:若選中某函數後按鍵,會在最右邊擴展出“幫助”欄,其中是對應的函數解釋,如圖所示:18-01圖一;若無選中,操作變得無意義,擴展的“幫助”欄:顯示“沒有可用文檔”,如圖所示:18-02圖二;Linux端Qt中:若選中某函數按鍵,直接跳轉“幫助”項的窗口,查看對應函數解釋 | 如圖:kj-18 |
F2 | 若選中“函數名”或"類名",按鍵後跳到對應的“.h”頭文件;若選中“變量名”,按鍵後跳至“定義”之處;若選中“控件名”,按鍵後跳至“ui_mainwindow.h”頭文件 | |
kj-01:
kj-02:
kj-03:
kj-04:
kj-05:
kj-06:
kj-07:
kj-08:
kj-09:
kj-10:
kj-11:
kj-12:
kj-13:
kj-14:
kj-15:
kj-16:
kj-17:
kj-18:
18-01圖一:
18-02圖二:
參考
Linux中命令
- 我這邊:命令大多在“ Tera Term【是支持UTF-8協議的開源自由軟件終端仿真器,是串口調試工具】 ”軟件上輸入,連接開發板與虛擬機VWM裏的Linux,做橋樑搭建連接
- 有個快捷鍵必須知道:
- Tab鍵
- 輸入文件名或項目名的開頭字母,按Tab鍵,會自動匹配開頭字母相同的名稱
- 若有多個前幾個字母都相同的名稱,則要多寫些字母,最好具有唯一性,這樣匹配度更高:
有i2c_abcd,i2c_bcde,i2c_cdef三個文件, 則輸入“i2c_a”之後按Tab鍵,自動匹配i2c_abcd名字; 若輸入"i2c_"之後按Tab鍵,不會匹配任何名字; 若輸入"i"之後按Tab鍵,自動匹配i2c_相同部分。 PS:若跳轉某目錄,輸入目錄名時,按Tab鍵,可能會根據“已輸入的字母開頭”找到相同字母開頭相同的名字,可能沒有一點反應。
- Tab鍵
常用
Linux指令 | 意義 | 備註 | 圖 |
---|---|---|---|
cp -R或-r或忽略 Test或/test/Test /home或/home/或/home/Test2 | 複製本目錄下的Test文件或test目錄下的Test文件至home目錄下 或 home目錄下並改名爲Test2文件(可以指定Test文件是哪個目錄下的某文件,自動新建或覆蓋)。 | Test、Test2:文件名;test:目錄名;home:把複製的文件放入指定目錄的目錄名 ;"-R"或"-r"可忽略、也可二選一。 | Linux-001至003 |
cd / | 進入根目錄,最上級目錄。 | ||
cd . . | 進入本目錄的上級目錄。 | 點點之間不可出現空格。 | |
cd test 或 cd /test/ 或 cd /test 或 cd /test/test1/test2 | 進入本目錄的test目錄 或 根目錄下的test目錄或 根目錄下的test的test1的test2目錄。 | ||
mkdir Test 或 mkdir /home/Test | 在本目錄創建新文件夾或在根目錄下的home目錄裏新建文件夾。 | 目錄名不可與同級文件或文件夾重名。 | Linux-004 |
touch Test 或 touch Test.ini 或 touch Test.txt 或 touch /home/Test 或 touch home/Test 或touch /home/test1/test2/Test 或 touch /udisk/yuv6 /udisk/yuv7 | 在本目錄下新建Test或Test.ini或Test.txt普通文本文件 或者 在根目錄下的home目錄裏新建Test文件 或者 在根目錄下的home的test1的test2目錄下新建Test文本文件 或者 在根目錄的udisk目錄裏新建yuv6和yuv7兩個文件。 | 若touch home/Test新建時出現提示:touch: home/Test: No such file or directory則改用“touch /home/Test”命令,因爲本目錄沒有叫home的目錄。若同時新建多個文件,就以空格相隔。 | Linux-005 |
rm -f /home/Test 或 rm yuv7 yuv3 | 刪除home文件夾下的Test文件 或者 刪除本目錄的yuv7和yuv3文件。 | 若文件是有後綴的,在指令中的文件名部分就要補上後綴名;-f可忽略。 | Linux-006 |
rm -rf /home/test | 刪除home文件夾下的test文件夾;若test目錄含文件和文件夾的話,則作用是:刪除test文件夾及其含有的文件或文件夾。 | r是遞歸處理,f是強制刪除;一旦刪除了一個文件,就無法再恢復它。 | Linux-007 |
rm *.ini *.jpg | 刪除當前目錄的所有.ini和.jpg後綴的文件。 | ||
more mxx.ini | 將文件從第一行開始,根據輸出窗口的大小,適當的輸出文件內容,只能向後翻(怎麼翻頁在文章中有表述,但沒實操過)。 | 若文件是有後綴的,在輸入指令時文件名要補上後綴名。 | Linux-008 |
less mxx.ini 或 less passwd | 可以向前或向後翻看文件(退出查看,按“Q或q”鍵),less的用法比起more又更加有彈性。 | 若文件是有後綴的,在輸入指令時文件名要補上後綴名。 | Linux-008 |
ps | 查看當前所有進程。 | Linux-009 | |
ls | 查看當前目錄的所有文件、文件夾,結果顯示一般爲:文件或文件夾的名字和圖片視頻的名字加後綴名。 | ||
killall pinchzoom或其他程序名稱 | 關閉正在運行的名爲pinchzoom的程序(一般開發板開機默認運行pinchzoom程序[在背景圖——奶酪上有一羣老鼠亂跑];若要進行其他程序,最好用該命令強制關閉之後纔去運行指定的程序)。 | Linux-010 | |
kill -9 1444或進程號PID或1444 1445 | 關閉指定進程號的進程,必須指定進程號PID;否則,如圖所示:Linux-011。 | Linux-012 | |
./T3QQ | (在開發板上)運行當前目錄/當前文件夾下T3QQ程序,若要退出程序,一般用“Ctrl+C”快捷鍵就可以關閉當前程序。 | ||
./T3QW & | (在開發板上)的後臺執行,補:一般使用Ctrl+C可以退出程序,但,在放入後臺執行的情況下,想完全關閉程序,只能kill或killall進程,才能真正的關閉程序。 | Linux-013 | |
ifconfig | 查看網絡IP地址(必須有網,結果會出現eth1或eth0、lo;若無網,只存在lo:127.0.0.1,但對於仿真工作來說這是無意義)。 | ||
ifconfig eth1 192.168.XXX.XXX | 修改eth1的ip地址爲’192.168.XXX.XXX’。 | ||
reboot | 重啓。 | ||
vi 文件名(如:xxx/xx.ini) | 查閱文件內容,按"小寫i或大寫I",可編輯文件內容,即進入編輯模式,**按"Esc"表示退出編輯模式(若沒有進入編輯模式,則爲無效按鍵指令),按(必須是英文符號)“:q!“表示不保存並結束查看,與按”:wq”**表示保存並結束查看。 | vim指令也是這樣,若輸入之後,出現如圖所示:Linux-015這樣的情況,換成vi命令即可(哪個簡單哪個來嘛~)。 | Linux-016 |
init 0 | 在終端輸入該指令,表示停機或關機(千萬不能將initdefault設置爲0)。 | ||
init 6 | 重啓(千萬不要把initdefault設置爲6)。 | ||
init 1或2或3或4或5 | 不經常用,但分別表示‘單用戶模式,只root用戶進行維護’ ‘多用戶模式,不能使用NFS(Net File System)’ ‘完全多用戶模式(標準的運行級別)’ ‘安全模式,一般不可用’ ‘圖形化(即圖形界面)’ 。 | ||
devmem ADDRESS [WIDTH [VALUE]] | 應用層可以使用devmem工具訪問物理地址,得到指定地址(寄存器)的數據;ADDRESS 是地址;WIDTH是結果的寬度,默認爲32位,可以忽略;VALUE可以忽略,一般不使用。 | 如:devmem 0x44e07134 32[busybox devmen表示查看devmen配置] | Linux-017 |
du | |||
- Linux 基礎學習2、linux中各種文件的顏色表示是什麼意思?、LINUX裏各個顏色文件名代表什麼、LINUX文件名顏色代表意義
- 綠色:代表可執行文件、可執行的程序(.jpg、.png、.c、.exe、.yuv等);紫色或藍色:代表文件夾、目錄;天空藍色/淺藍色:代表鏈接文件,主要是使用ln命令建立的文件,可以直接用cd xxx直接跳轉查看目錄;紅色:代表壓縮文件或者包文件; 白色:普通文件(.ini、.txt、.conf、.wac等)
- 綠色:代表可執行文件、可執行的程序(.jpg、.png、.c、.exe、.yuv等);紫色或藍色:代表文件夾、目錄;天空藍色/淺藍色:代表鏈接文件,主要是使用ln命令建立的文件,可以直接用cd xxx直接跳轉查看目錄;紅色:代表壓縮文件或者包文件; 白色:普通文件(.ini、.txt、.conf、.wac等)
- Linux-001:
home 與 mnt 是同級目錄/文件夾;一個點’.‘表示當前目錄,兩個點’ . .’(中間不可出現空格)表示上級目錄。當cp Test .時,會報提示,表示當前目錄有Test的文件了,不可複製粘貼。
- Linux-002:
cp -r . ./Test /home表示將本目錄的上級目錄下的Test文件複製到home目錄下。
- Linux-003:
查看了udis目錄下無任何文件或文件夾,將mnt目錄下的Test文件的內容複製到udisk目錄下的Test2文件中。
# cd /lib32/dhcpcd/
# ls
dhcpcd-hooks dhcpcd-run-hooks
# cd /lib32/dhcpcd/dhcpcd-hooks/
# ls
01-test 02-dump 20-resolv.conf 30-hostname
# cd .. ------[1]
# ls
dhcpcd-hooks dhcpcd-run-hooks
# cd /lib32/dhcpcd/dhcpcd-hooks/
# cp ../dhcpcd-run-hooks /home/hooks ------[2]
# cd ..
# ls
dhcpcd-hooks dhcpcd-run-hooks
# cd /home
# ls ------[3]
Rear_Center.wav T3QTDlg hooks i2c_axp22_test
#
[1]:查看dhcpcd-hooks的上級目錄dhcpcd
[2]:與dhcpcd-hooks目錄同級的dhcpcd-run-hooks的文件(即上級目錄dhcpcd裏的dhcpcd-run-hooks文件)複製到根目錄下的home目錄,改名爲hooks(無該文件就新建,若有則覆蓋)
[3]:到根目錄下的home目錄,查看文件,發現多了個hooks文件,複製成功!
- Linux-004:
到根目錄的media的mmcblk0p1的DCIM目錄,新建與DCIM同級的my2文件,若進入DCIM上級mmcblk0p1目錄,創建目錄my2,會彈出提示:不能創建目錄my2,因爲文件已存在。
- Linux-005:
到根目錄,查看文件,touch udisk/yuv7:在本目錄的udisk目錄裏創建yuv7文件,進入udisk目錄查看文件,只有touch /udisk/yuv8才能創建文件成功,因爲udisk本目錄沒有udisk文件夾,只有yuv2目錄,udisk是根目錄下的目錄,所以要加上“/”斜槓 。
- Linux-006:
在根目錄下的media的mmcblk0p1目錄時,刪除yuv6與yuv7文件,只有yuv6刪除成功,因爲“/ . . /udisk/yuv6”(最好是//udisk/yuv6,好理解)代表 根目錄的udisk目錄的yuv6文件;若在udisk目錄,輸入指令rm -f /…/udisk/yuv …/udisk/yuv8,兩個文件刪除成功,和 rm yuv7 yuv3 一樣刪除成功。
- Linux-007 :
- Linux-008 :
- Linux-009:
- Linux-010:
圖1:WriteOnlyTest程序在後臺運行,圖2:查看進程,圖三:在進程結果中發現“WriteOnlyTest程序”正在運行,然後使用killall WriteOnlyTest指令關閉WriteOnlyTest程序,然後再用ps指令查看進程,判斷是否關閉成功,圖四:發現進程關閉成功了。
- Linux-011:
- Linux-012:
圖1:查看進程,圖二:在進程結果中發現“WriteOnlyTest程序”正在運行,接着再運行一個WriteOnlyTest,看下是否獨立運行,圖三:發現兩個同名程序獨立且互不干擾的運行着,然後使用kill -9 1549 1555指令關閉兩個程序名爲WriteOnlyTest的進程,然後再用ps指令查看進程,判斷是否關閉成功,圖四:發現進程關閉成功了。
- Linux-013:
- Linux-015:
- Linux-016:
- Linux-017:
參考
- cp命令——複製當前目錄、複製文件夾【使用cp三種方式】
- linux下cp複製文件或目錄指令介紹OrLinux中cp文件或目錄時顯示進度OrLinux命令學習總結:cp命令
- cp 命令兩個高效的用法
- 【Shell】cp -r -f 強制覆蓋拷貝時仍需一一確認問題的處理方法【強制覆蓋,無需提示是否確認覆蓋同名文件】
- cd命令——Linux命令大全
- Linux下查看文件內容的命令OrLinux查看文件內容
- LINUX中,創建文件夾、文件命令及清除命令。
- Linux 刪除文件夾和文件的命令、關於對linux命令rm -rf 的理解
- PS(Linux系統命令)——百度百科
- Linux下ps命令詳解 Linux下ps命令的詳細使用方法
- linux讓命令或程序在終端後臺運行的方法(Ubuntu/Fedora/Centos等一樣適用)
- Linux的後臺運行:&和nohup、Linux任務控制
- Linux 後臺運行程序方法總結【&符表示在後臺運行指定程序】
- Linux——vi命令詳解或Linux vi/vim或vim常用命令總結
- linux 下的init 0,1,2,3,4,5,6知識介紹、linux命令——init 的使用用法、淺談init進程、linux init.d 腳本的解釋、linux中init.d文件夾的說明
- 通過devmem訪問物理地址
- Linux命令之du命令、Linux du命令詳解
Linux其他
- Linux進程通信——信號
- Linux 的進程間通信:消息隊列
- Linux 進程間通信 : 共享內存(上)
- Linux內網滲透
- Linux 命令行下的好東西【一些不常用的命令】
- 小白Linux入門–入門篇:Linux下搭建JavaWeb環境
自定義控件及其他Qt使用例子
- 【代碼似乎都不完整,初學者查看可能有點難度】
- Qt編寫自定義控件及插件的使用【含創建QtDesigner自定義控件工程】
- Qt自定義控件
- Qt組件之模擬電池充電
- 屏幕取色器(Qt實現)(放大鏡,RGB顯示,智能調節)
Qwt儀表盤
同一小編的文章
- (若完全能使用可能存在些許問題,但只是爲了看懂,讓自己有些思路,完成可供參考)
- Qt編寫自定義控件2-進度條標尺
Qt編寫自定義控件43-自繪電池
Qt編寫自定義控件屬性設計器
Qt編寫輸入法V2018超級終結版
Qt自定義控件大全+designer源碼【將自定義控件作爲插件封裝到了designer中,打開designer就從左側控件欄中可以看到自定義控件。自定義控件近期會開放出動態庫及頭文件免費使用,設計師designer完整源碼只能qt4編譯,不支持qt5。】————》 Qt自定義控件大全+UI定製+輸入法、Qt編寫自定義控件插件開放動態庫dll使用(永久免費)、Qt編寫的開源帖子集合(懶人專用)————》GitHub倉庫中下載 Or 碼雲倉庫中下載
QProcess
- QT:關於QProcess中用write()函數調用cmd.exe進程的方法
- Qt輸入輸出之QProcess
- Qt提供了一個QProcess類用於啓動外部程序並與之通信。這個類是異步工作的,而且在後臺執行,這樣用戶界面就可以始終保持響應。
Mplayer
暫停功能
process->write("pause\n");//但是放入項目中,無效,不知道其他人是不是也這樣
- 基於Qt和mplayer的播放器設計【也是利用process的write(“pause”),但是對我項目無效】
- mplayer在終端打開後後臺執行以及關閉
FFmpeg
- 這個播放器與QProcess類無關,但是與Mplayer有關
暫停功能
- 給ffmpeg增加支持暫停和繼續按鍵功能,以實現暫停媒體流的需求
- Android使用FFmpeg(七)–ffmpeg實現暫停、快退快進播放【也許可作參考】
- 編譯ffmpeg源碼,並實現暫停操作
- 論壇:ffmpeg.exe 是否可以控制轉碼過程,暫停 繼續等
獲取CPU序號
參考:
Java,C++,C某些的比較
枚舉
數據類型
- Java與C++的char類型不同。
- c語言基本數據類型(short、int、long、char、float、double)
- java語言中數據類型
C++ 與 Java 數據類型的區別
QTimer QTime QDateTime QDate 對應時間格式
- QDateTime——Qt幫助文檔
- Qt學習筆記:QTimer和QTime
- 0003:Qt常用類 - QDate【常用接口的整理】
- Qt由入門到放棄-QDate、QTime、QDateTime的相關函數
- 《Qt5+QDate和QTime獲取當前系統日期和時間》【講解:Qt學習(5)獲取當前系統時間-實時顯示當前時間。若在Java中:Java時間的處理】或QT 獲取當前系統時間並格式化輸出
- QT入門系列(7):獲取系統時間 日期時間格式
- Qt獲取當前時間(超詳細)【還講到了QCalendarWidget 日曆組件】
其他
C語言的strtoul函數
- strtoul函數的使用,揭開其神祕面紗
- C 庫函數 - strtoul()
- 原型:unsigned long strtoul(const char *nptr,char **endptr,int base )
- 說明:參數一:字符串起始地址,要轉換爲無符號長整數的字符串;參數二:返回字符串有效數字的結束地址(此處體現二級指針的好處),對類型爲 char* 的對象的引用,其值由函數設置爲 str 中數值後的下一個字符;參數三:轉換基數(10:轉成十進制),必須介於 2 和 36(包含)之間,或者是特殊值 0。
const char *axpv1 = "0x34";
int dev_addr = strtoul(axpv1,NULL,0);
C語言的tcgetattr函數
C語言的ioctl函數
Qt Assistant
指針及運算符
- 指針:是存放變量地址的;用來訪問變量地址。
[]運算符
*、&運算符
- c語言的指針和指針運算符(* and &)
- 指針變量區分*p 、p、&p
- &p的&:取出存放變量的地址
- *p的*:取出存儲在地址中的對應值
- *p的p:一個指針變量的名字,表示此指針變量指向的內存地址
酒店,404號房是黑白主題的房間,
p就是404號,表示門牌指向的第四層的4號房(房間地址),
*p就是讓我們得知房間內容——黑白主題的窗簾桌子牀,
&p就是讓我們得知門牌——404號。
a = 3; //將賦值爲3
c = &a; //把a的地址賦值於c
d = *c; //取出c存放a地址中的值,並賦值給d
printf("d = %d",d); //打印d
輸出爲: d = 3
++運算符運算順序
序號 | 指針 | 運算順序 | 備註 |
---|---|---|---|
1 | *p++ | 先返回 *p的值,然後p再++。 | |
2 | (*p)++ | 先返回 *p的值,然後 *p的值再++。 | |
3 | *(p++) | 先返回 *p的值,然後p再++。 | 也就是說它和 *p++的運算順序一樣。 |
4 | ++*p | 先將 *p的值++,然後再返回 *p的值。 | |
5 | ++(*p) | 先將 *p的值++,然後再返回 *p的值 | 它和++ *p是一樣的。 |
6 | *(++p) | 先將p的值++,然後再返回 * p的值 | 它和 *++p是等價的。 |
1~3三組 是先返回 *p的值,區別就在於到底是p++還是 *p的值++。
4~6三組 是最後都是返回 *p的值,不同點在於是 *p先++還是p++。
運算符重載
成員運算符(.)和指針運算符(->)
Human Tom;
Human* p;
p = &Tom;
Tom.BirthDay = "1969“;
Tom.IntroduceSelf();
效果等價於:
p->BirthDay = "1969";
p->IntroduceSelf();
邏輯、移位運算符
- 深入理解C++移位運算符【乾貨】
打包發佈
全志平臺T3
- BT601是SDTV[標準數字電視(standard definition television )]的數據結構
- BT709是HDTV[ 高清晰度電視(high-definition TV)]的數據結構
- 【Codecs系列】視頻格式國際標準:BT601/BT709/BT2020
- BT601 BT656 BT709 BT1120 解析
typedef enum //定義枚舉
{
DISP_BT601 = 0, //用於標清視頻
DISP_BT709 = 1, //用於高清視頻
DISP_YCC = 2, //用於圖片
}disp_color_space;
Qt調度器
Qt看門狗
Qt5串口收發數據(通信)
- QSerialPort4
- QT5實現串口收發數據(上位機與下位機通信)
- Qt 串口通信(QSerialPort)
- QT(2)----QT獲取設備的串口信息
- 基於Qt 5.7 自己寫一個漂亮的串口助手
- Qt編寫串口通信、調試的小工具
- qt實現串口通訊
Qt5版本之前
- Qextserialport
- Qt實現串口通信總結
動態變化的例子
-
有練習才能更好理解各種類的使用【在VMware軟件的Ubuntu虛擬機裏安裝了Qt5.8.0版本的軟件,在裏面載入這些工程,配置一下環境配置,就可以運行啦!!!感覺看看效果吧~】
- 用Qt做一個漂亮的電子時鐘(純代碼)【《Qt5開發及實例(第3版)–陸文周主編》第四章 4.9.3電子時鐘練習:P125-P128(ClockExample項目)】
- 飛舞的蝴蝶(GraphicsView框架)【飛舞的蝴蝶、閃閃的星星、色彩豐富的正方形,使用Graphics View框架,《Qt5開發及實例(第3版)–陸文周主編》第七章 7.1.3 GraphicsView 的座標系統(練習:7.2圖形視圖–7.2.1飛舞的蝴蝶)P211-P216(ButterflyExample工程與build-ButterflyExample-Desktop_Qt_5_8_0_GCC_64bit-Debug[圖片只能放着調試文件夾中,才能使用,但圖片路徑是工程文件夾結尾])】
- QPainter+Qtimer 模仿一下簡單的電池充電【代碼完整,不像上面的“自定義控件”那篇模擬電池充電這麼難琢磨(batteryDisplay工程)】
- Qt中使用QLabel顯示時間的兩種方法【在QLabel顯示時間:方法一:QTimerEvent定時器事件timerEvent()、QObject::startTimer(1000)。方法二:connect(timer, SIGNAL(timeout()),this, SLOT(updateTime()))[updateTime函數裏是timeLabel->setText(某時間格式的當前時間值)]、timer->start(1000);;若在Java中:java實現時間的動態顯示】—》或Qt中使用定時器(可使用QObject::timerEvent定時執行,QTimer::singleShot可只觸發一次)【這篇與上面那篇相似,但又不同,不過代碼不完整】—》或QTimerEvent定時器事件的使用—》或我的QT學習筆記-02-QTimerEvent類定時器—》或基於QTime類和QTimer類實現的計時器—》或Qt學習: QTimerEvent定時器事件的處理程序代碼示例(TimeTest工程)
- QT國際化 一 (lupdate/linguits/lrelease)【《Qt5開發及實例(第3版)–陸文周主編》14.2 第14章 Qt5多國語言國際化 P400-P410】—》或QT下面的中文亂碼問題—ts、qm文件—》QT中的TS文件與QM文件【簡單描述:文件定義、作用與聯繫】或qt中製作添加 .ts 翻譯文件【qt4.7.0版本時】—》Qt跨平臺(window、linux)實現多語言或Qt國際化之一:國際化、幫助系統和Qt插件—》會了之後但忘記主要步驟,可看:關於QT的軟件翻譯QTranslator("多語言國際化練習"的LanguageExample和TestHello工程)或Qt界面–多語言國際化的實現
LanguageExample
TestHello- 開發板上Qt不能顯示中文的問題 或QT4.5編寫程序在arm開發板上無法顯示中文的問題【不知道是不是有用,因爲當時遇到的問題是,Qt Linguist翻譯好的泰語,在Linux虛擬機裏運行正常,但是放入開發板中,泰語都變成了矩形——Qt開發板上無法識別泰語,我覺得就是缺泰語字庫,但是我朋友說,字庫涉及底層原理/底層代碼/底層驅動,我就沒深究,把泰語換成其他語言了】
- (轉載)Qt5.9進度條QProgressBar用法詳解
各個實例的源碼:鏈接:https://pan.baidu.com/s/1GsahBDen2hiq0ub5vGW10w 提取碼:o52y
- [已解決]請教大家有沒有用Qt做過屏保或待機畫面的程序?【待機時的圖片循環的程序——屏保,論壇中的代碼可能不兼容Linux,我的源碼,可以兼容Linux:】
鏈接:https://pan.baidu.com/s/1xlssmqPJXQM73IqRkNsKCg 提取碼:bh1f
- 用Qt做一個漂亮的電子時鐘(純代碼)【《Qt5開發及實例(第3版)–陸文周主編》第四章 4.9.3電子時鐘練習:P125-P128(ClockExample項目)】
挑戰
- 才入學呢應該看不懂,反正我剛入學的小白表示看不懂哦~
- Qt淺談之二十七進程間通信之QtDBus good
隨便看看
- 華爲海思、麒麟處理器是什麼?一文看懂
- 你的加密貨幣有價值嗎?這裏有一個深度學習ICO詐騙鑑別系統
- Qt 6 公佈發佈時間表
- Qt 6.0 發佈首個預覽版本
- 期待要來的qt6.0嗎?年底將重磅來襲
- Qt公司發佈Qt 6.0版本的2020年路線圖、Qt Roadmap for 2020_QT官網
- Qt 6.0 或將於 Qt 5.14 之後發佈,可能依賴 C++17
- 軟件版本號講解:什麼是Alpha,Beta,RC,Release