QT使用說明

QT環境準備

推薦Ubuntu平臺上使用,配置簡單,坑少。

Ubuntu 20.04

安裝

sudo apt-get install qt5-default -y
sudo apt-get install qtcreator -y
sudo apt-get install -y libclang-common-8-dev

啟動

qtcreator

HelloWorld

  1. 打開 Qt Creator。
  2. 選擇 “New Project”。
  3. 選擇 “Application” > “Qt Widgets Application”。
  4. 輸入項目名稱和位置,然后點擊 “Next”。
  5. 選擇合適的構建工具(例如, 默認的 Qt 版本),然后點擊 “Next”。
  6. 點擊 “Finish” 完成項目創建。
  7. 修改代碼,mainwindow.cpp
  8. 選擇菜單中的 “Build” > “Build Project” 來構建項目。
  9. 然后選擇 “Run” > “Run Project” 來運行程序。
  10. 當你運行程序時,會看到一個窗口,窗口中央顯示 “Hello, World!” 的文本。

文件結構

dd@dd-Virtual-Machine:~/work/workspace/helloworld$ tree
.
├── helloworld.pro     
├── helloworld.pro.user
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
└── mainwindow.ui0 directories, 6 files
  1. helloworld.pro:

    • 這是 Qt 項目的項目文件,使用 Qt 的 qmake 工具進行構建。它包含了項目的配置信息,例如:
      • 項目名稱
      • 需要的 Qt 模塊(如 core, gui, widgets 等)
      • 源文件和頭文件的列表
      • 資源文件的路徑
      • 其他編譯選項
    • 該文件是用純文本格式編寫的,通常可以用任何文本編輯器打開和編輯。

    示例內容:

    TEMPLATE = app
    TARGET = helloworld
    QT += widgetsSOURCES += main.cpp \mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.ui
    
  2. helloworld.pro.user:

    • 這是 Qt Creator 自動生成的用戶配置文件,包含了用戶的本地設置,如打開的文件、窗口位置等。通常不需要手動編輯或關注這個文件,它的內容是特定于用戶的。
  3. main.cpp:

    • 這是應用程序的入口點,包含 main() 函數。在此文件中,通常會創建 QApplication 對象和主窗口,并啟動事件循環。

    示例內容:

    #include <QApplication>
    #include "mainwindow.h"int main(int argc, char *argv[])
    {QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
    }
    
  4. mainwindow.cpp:

    • 這個文件包含 MainWindow 類的實現代碼。它通常會包括構造函數、析構函數以及其他槽函數的實現。

    示例內容:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
    {ui->setupUi(this);
    }MainWindow::~MainWindow()
    {delete ui;
    }
    
  5. mainwindow.h:

    • 這是 MainWindow 類的頭文件,定義了類的接口,包括成員變量、構造函數、析構函數以及槽函數的聲明。

    示例內容:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H#include <QMainWindow>namespace Ui {
    class MainWindow;
    }class MainWindow : public QMainWindow
    {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;
    };#endif // MAINWINDOW_H
    
  6. mainwindow.ui:

    • 這是 Qt Designer 生成的用戶界面文件,采用 XML 格式,定義了應用程序的圖形界面。你可以使用 Qt Designer 來可視化地創建和編輯這個文件。
    • 這個文件描述了窗口中的控件(如按鈕、標簽、文本框等)及其屬性。

    示例內容(部分):

    <ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><widget class="QWidget" name="centralWidget"><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QLabel" name="label"><property name="text"><string>Hello, World!</string></property></widget></item></layout></widget></widget>
    </ui>
    

快捷鍵

格式化代碼:Ctrl+A:全選代碼,Ctrl+i:格式化選中內容,Ctrl+s:保存文件,清除僅空格行

示例工程

helloworld.zip

Windows

安裝

qt-unified-windows-x64-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject

QT基礎知識

在閱讀WT智能柜QT APP過程中,收集APP中使用的QT知識,匯總到本文檔內。

qApp 的含義

qApp 是一個全局指針,指向當前的應用程序對象。它是 QApplicationQGuiApplication 的一個實例。通過 qApp,您可以訪問應用程序的全局狀態和功能。

processEvents() 的功能

processEvents() 方法的主要作用是處理事件隊列中的所有待處理事件。這包括:

  • 用戶輸入(例如,鼠標點擊、鍵盤輸入等)
  • 定時器事件
  • 繪圖事件
  • 系統事件

當您調用 qApp->processEvents(); 時,Qt 會檢查事件隊列,如果有待處理的事件,它會執行這些事件的處理。這可以幫助保持應用程序的響應性。

使用場景,processEvents() 通常用于以下場景:

  • 長時間運行的操作: 在執行耗時的操作(例如,文件處理或網絡請求)時,應用程序可能會變得無響應。通過在長時間運行的操作中定期調用 processEvents(),可以讓應用程序保持響應,處理用戶輸入和更新界面。
  • 進度更新: 在長時間操作的循環中,您可能希望更新進度條或其他 UI 元素。通過調用 processEvents(),可以確保這些更新能夠立即反映在用戶界面上。

QObject 和父子關系

  • QObject 是 Qt 框架中的一個核心類,提供了對象的基本功能,包括信號和槽機制、事件處理等。
  • 在 Qt 中,父子關系用于管理對象的生命周期。當一個對象(子對象)的父對象被銷毀時,所有其子對象也會被自動銷毀。通過設置 parent,可以確保內存管理的方便性和安全性。

示例:

HomeWgt::HomeWgt(QWidget *parent) :QWidget(parent),ui(new Ui::HomeWgt)
{bMange= new boxmange(this);sConfig= new SysConfig(this);
}

QTimer 的用法

QTimer 是 Qt 中非常實用的類,用于處理定時任務。通過調用 start() 方法,您可以啟動或重新啟動定時器,讓它在指定的時間間隔內定期發射 timeout() 信號,并執行相應的槽函數。使用 QTimer 可以幫助您輕松管理時間相關的任務,保持應用程序的響應性。

1. QTimer 的基本使用方式

要使用 QTimer,您通常需要執行以下步驟:

  • 創建一個 QTimer 對象。
  • 連接定時器的 timeout() 信號到一個槽(slot)函數。
  • 調用 start() 方法來啟動定時器。

示例代碼

下面是一個簡單的示例,展示了如何使用 QTimer

cpp#include <QApplication>
#include <QWidget>
#include <QTimer>
#include <QLabel>class MyWidget : public QWidget {Q_OBJECTpublic:MyWidget() {label = new QLabel("0", this);label->setAlignment(Qt::AlignCenter);setFixedSize(200, 100);timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &MyWidget::updateLabel);timer->start(1000); // 每1000毫秒(1秒)觸發一次timeout信號}private slots:void updateLabel() {count++;label->setText(QString::number(count));}private:QTimer *timer;QLabel *label;int count = 0;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyWidget w;w.show();return app.exec();
}#include "main.moc" // 需要包含這個,以支持信號和槽的實現

2. start() 方法的作用

  • 啟動定時器: start(int msec) 方法用于啟動定時器,msec 參數指定了定時器的時間間隔(以毫秒為單位)。當定時器啟動后,timeout() 信號將每隔指定的時間間隔發射一次。
  • 重新啟動定時器: 如果定時器已經在運行,調用 start() 方法會重新啟動定時器,重置計時器的時間間隔。也就是說,定時器會在新的時間間隔開始計時。
  • 定時器的精度: QTimer 的精度通常是毫秒級,但具體的精度可能會受到操作系統和系統負載的影響。

3. 其他相關方法

  • stop(): stop() 方法用于停止定時器。如果您希望在某個條件下停止定時器,可以調用此方法。
  • isActive(): isActive() 方法可以檢查定時器是否正在運行。如果定時器正在運行,返回 true;否則返回 false

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83024.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React 第四十九節 Router中useNavigation的具體使用詳解及注意事項

前言 useNavigation 是 React Router 中一個強大的鉤子&#xff0c;用于獲取當前頁面導航的狀態信息。 它可以幫助開發者根據導航狀態優化用戶體驗&#xff0c;如顯示加載指示器、防止重復提交等。 一、useNavigation核心用途 檢測導航狀態&#xff1a;判斷當前是否正在進行…

列表單獨展開收起同時關閉其余子項的問題優化

如圖所示&#xff0c;當在列表中&#xff0c;需要分別單獨點開子選項時&#xff0c;直接這樣用一個index參數判斷即可&#xff0c;非常簡單方便&#xff0c;只需要滿足點開當前index,然后想同index用null值自動關閉即可

WPF【11_5】WPF實戰-重構與美化(MVVM 實戰)

11-10 【重構】創建視圖模型&#xff0c;顯示客戶列表 正式進入 MVVM 架構的代碼實戰。在之前的課程中&#xff0c; Model 和 View 這部分的代碼重構實際上已經完成了。 Model 就是在 Models 文件夾中看到的兩個文件&#xff0c; Customer 和 Appointment。 而 View 則是所有與…

LangChain-結合魔塔社區modelscope的embeddings實現搜索

首先要安裝modelscope pip install modelscope 安裝完成后測試 from langchain_community.embeddings import ModelScopeEmbeddingsembeddings ModelScopeEmbeddings(model_id"iic/nlp_gte_sentence-embedding_chinese-base")text "這是一個測試句子"…

可定制化貨代管理系統,適應不同業務模式需求!

在全球化貿易的浪潮下&#xff0c;貨運代理行業扮演著至關重要的角色。然而&#xff0c;隨著市場競爭的日益激烈&#xff0c;貨代企業面臨著越來越多的挑戰&#xff1a;客戶需求多樣化、業務流程復雜化、運營成本上升、利潤空間壓縮……這些挑戰迫使貨代企業不斷尋求創新和突破…

Lyra學習筆記2 GFA_AddComponents與ULyraPlayerSpawningManagerComponent

目錄 前言GameFeatureAction_AddComponentsULyraPlayerSpawningManagerComponent緩存所有PlayerStart位置選擇位置 前言 1.以control模式為例 2.比較散&#xff0c;想單獨拿出一篇梳理下Experience的流程 GameFeatureAction_AddComponents 這部分建議看 《InsideUE5》GameFeatu…

進程生命周期

進程生命周期 Linux是多任務操作系統&#xff0c;系統中的每個進程能夠分時復用CPU時間片&#xff0c;通過有效的進程調度策略實現多任務并行執行。進程在被CPU調度運行&#xff0c;等待CPU資源分配以及等待外部事件時會處于不同的狀態。進程狀態如下&#xff1a; 創建狀態&a…

文字轉圖片的字符畫生成工具

軟件介紹 今天要介紹的這款軟件可以將文字轉換成圖片的排列形式&#xff0c;非常適合需要將文字圖形化的場景&#xff0c;建議有需要的朋友收藏。 軟件名稱與用途 這款軟件名為《字符畫大師》&#xff0c;是一款在網吧等場所非常流行的聊天輔助工具&#xff0c;其主要功能就…

歷年南京大學計算機保研上機真題

2025南京大學計算機保研上機真題 2024南京大學計算機保研上機真題 2023南京大學計算機保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/school Count Number of Binary Strings 題目描述 Given a positive integer n n n ( 3 ≤ n ≤ 90 3 \leq n \leq 90 3≤n≤…

王樹森推薦系統公開課 排序06:粗排模型

shared bottom 表示神經網絡被所有特征共享。精排模型主要開銷在神經網絡&#xff0c;神經網絡很大且很復雜。 每做一次推薦&#xff0c;用戶塔只做一次推理。物品塔存放入向量數據庫。 后期融合模型常用于召回&#xff0c;前期融合模型常用于精排。 物品塔短時間內比較穩…

VSCode的下載與安裝(2025親測有效)

目錄 0 前言1 下載2 安裝3 后記 0 前言 丫的&#xff0c;誰懂啊&#xff0c;嘗試了各種辦法不行的話&#xff0c;我就不得不拿出我的最后絕招了&#xff0c;卸載&#xff0c;重新安裝&#xff0c;我經常要重新安裝&#xff0c;所以自己寫了一個博客&#xff0c;給自己&#xf…

端午節互動網站

端午節互動網站 項目介紹 這是一個基于 Vue 3 Vite 開發的端午節主題互動網站&#xff0c;旨在通過有趣的交互方式展示中國傳統端午節文化。網站包含三個主要功能模塊&#xff1a;端午節介紹、互動包粽子游戲和龍舟競賽游戲。 預覽網站&#xff1a;https://duanwujiekuaile…

Python+requests+pytest接口自動化測試框架的搭建(全)

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 框架的設計思路 首先要明確進行接口自動化需要的步驟&#xff0c;如下圖所示&#xff1a; 然后逐步拆解需要完成的工作&#xff1a; 1&#xff09;了解分析需求&…

OpenCV視覺圖片調整:從基礎到實戰的技術指南

引言:數字圖像處理的現代意義與OpenCV深度應用 在人工智能與計算機視覺蓬勃發展的今天,圖像處理技術已成為多個高科技領域的核心支撐。根據市場研究機構Grand View Research的數據,全球計算機視覺市場規模預計將從2022年的125億美元增長到2030年的253億美元,年復合增長率達…

JS手寫代碼篇---手寫節流函數

8、節流函數 什么是節流函數&#xff1f; 指規定一個單位時間&#xff0c;在這個單位時間內&#xff0c;只能有一次觸發事件的回調函數執行&#xff0c;如果在同一個單位時間內某事件被觸發多次&#xff0c;只有一次能生效。 與防抖函數有什么區別&#xff1f; 防抖函數是延…

2025年05月30日Github流行趨勢

項目名稱&#xff1a;agenticSeek 項目地址url&#xff1a;https://github.com/Fosowl/agenticSeek項目語言&#xff1a;Python歷史star數&#xff1a;13040今日star數&#xff1a;1864項目維護者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

node_modules包下載不下來

如果項目里面的package-lock.json有resolved &#xff0c;就指向了包的下載來源&#xff0c;如果這個網址掛了&#xff0c;那npm i 就會一直卡著。而且&#xff0c;在終端去修改 npm的鏡像是沒有用的 解決辦法是:把項目里面的 lock文件 .npmrc都刪了 然后重新下載就可以了

OramaCore 是您 AI 項目、答案引擎、副駕駛和搜索所需的 AI 運行時。它包括一個成熟的全文搜索引擎、矢量數據庫、LLM界面和更多實用程序

一、軟件介紹 文末提供程序和源碼下載 OramaCore 是您的項目、答案引擎、副駕駛和搜索所需的 AI 運行時。 它包括一個成熟的全文搜索引擎、矢量數據庫、LLM具有行動計劃和推理功能的接口、用于根據數據編寫和運行您自己的自定義代理的 JavaScript 運行時&#xff0c;以及更多…

小白成長之路-計算機網絡(四)

文章目錄 前言一、網絡連接查看1.netstat2.ss3.bond綁定3.1準備好這三個文件3.2添加bond配置文件3.3關閉網絡圖形化服務3.4重啟 4.Linux下的抓包工具Wireshark 5、web壓力測試工具6、路由追蹤命令 二、[練習題](https://blog.csdn.net/m0_70730767/article/details/148262716?…

CppCon 2014 學習:Lock-Free Programming

你這段文字講的是“為什么要使用無鎖&#xff08;Lock-Free&#xff09;代碼”&#xff0c;我幫你總結并解釋一下&#xff1a; 為什么選擇無鎖代碼&#xff1f; 并發性和可擴展性&#xff08;Concurrency and scalability&#xff09; 無鎖算法允許多個線程同時操作共享數據&a…