Qt 常用控件 - 7

Text Edit(多行輸入框)

QTextEdit?表示多行輸入框,也是一個富文本 & markdown 編輯器,能在內容超出范圍時自動提供滾動條。

QTextEdit:不僅僅能表示純文本,還可以表示 htnl 和 markdown

QPlainTextEdit:只能表示純文本

核心屬性
屬性說明
markdown支持 Markdown 格式并自動渲染為 HTML。
html支持大部分 HTML 標簽(如?imgtable)。
placeHolderText輸入框為空時的提示文本。
readOnly是否只讀。
undoRedoEnable啟用撤銷/重做(Ctrl+Z?撤銷,Ctrl+Y?重做)。
autoFormatting開啟自動格式化。
tabStopWidth縮進占用的空格數。
overwriteMode是否開啟覆蓋寫模式。(光標接下來是否插入或者覆蓋?)
acceptRichText是否接收富文本內容 --- html 標簽。
verticalScrollBarPolicy垂直滾動條策略:
??Qt::ScrollBarAsNeeded(默認)根據內容自動決定是否需要滾動條
??Qt::ScrollBarAlwaysOff 總是關閉滾動條
??Qt::ScrollBarAlwaysOn 總是顯示滾動條
horizontalScrollBarPolicy水平滾動條策略:
??Qt::ScrollBarAsNeeded(默認)根據內容自動決定是否需要滾動條
??Qt::ScrollBarAlwaysOff?總是關閉滾動條
??Qt::ScrollBarAlwaysOn?總是顯示滾動條
核心信號
  • textChanged():文本內容改變時觸發。

  • selectionChanged():選中范圍改變時觸發。

  • cursorPositionChanged():光標移動時觸發。

  • undoAvailable(bool):可撤銷時觸發。

  • redoAvailable(bool):可重做時觸發。

  • copyAvailable(bool):文本選中/取消選中時觸發。

代碼示例:獲取輸入框內容

1.界面:創建一個多行輸入框和一個?label

2.槽函數給多?輸?框添加 slot 函數. 處理 textChanged 信號

  • 通過 toPlainText ?法獲取到內部的?本。 ?
  • 類似的,QTextEdit 還提供了 toMarkdown 和 toHtml。根據需要我們調整不同的獲取?式。
void Widget::on_textEdit_textChanged()
{// 獲取到多行輸入框中的內容const QString& text = ui->textEdit->toPlainText();// 和之前的Text()不太一樣!ui->label->setText(text);
}

3.效果:輸入框內容變化時,label?同步更新。

代碼示例:驗證信號

1.創建多行輸入框

2.給輸入框添加以下幾個 slot 函數

QTextEdit 中包含了一個 QTextCursor 對象,通過這個對象可以獲取到當前光標位置和選中的內容

void Widget::on_textEdit_textChanged()
{qDebug()<<"textChanged: "<<ui->textEdit->toPlainText();
}void Widget::on_textEdit_selectionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug()<<"selectionChanged: "<<cursor.selectedText();
}void Widget::on_textEdit_cursorPositionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug()<<"cursorPositionChanged: "<<cursor.position();
}void Widget::on_textEdit_undoAvailable(bool b)
{qDebug()<<"undoAvailable: "<<b;
}void Widget::on_textEdit_redoAvailable(bool b)
{qDebug()<<"redoAvailable: "<<b;
}void Widget::on_textEdit_copyAvailable(bool b)
{qDebug()<<"copyAvailable: "<<b;
}

3.執行程序,觀察結果

可以看到:

  1. 編寫內容時,textChanged?和?cursorPositionChanged?會觸發

  2. 選中一段文本時,cursorPositionChangedselectionChangedcopyAvailable?會觸發

  3. 按下?Ctrl + Z?時,textChangedundoAvailableredoAvailablecursorPositionChanged?會觸發

  4. 按下?Ctrl + Y?時,textChangedundoAvailableredoAvailablecursorPositionChanged?會觸發


Combo Box(組合框/下拉框)

QComboBox?表示下拉框。

核心屬性
屬性說明
currentText當前選中文本。
currentIndex當前選中下標(從 0 開始,未選中時為 -1)。
editable是否允許編輯(設為?true?時行為類似?QLineEdit)。
iconSize下拉圖標大小。(下拉點擊的圖標(倒三角))
maxCount最大條目數。
核心方法
方法說明
addlitem(const QString&)添加一個條目
currentindex()獲取當前條目的下標,從0開始計算;如果當前沒有條目被選中,值為-1
currentText()獲取當前條目的文本內容
核心信號
  • activated(int):用戶選擇選項時觸發(這時候相當于用戶點開下拉框,并且鼠標滑過某個選項,此時還沒有確認做出選擇)。

  • currentIndexChanged(int)/currentIndexChanged(const QString& text):選項改變時觸發(此時用戶已經明確的選擇一個選項,用戶操作或者通過程序操作都會出發這個信號)。

  • editTextChanged(const QString&):可編輯時文本變化觸發(editable 為 true 時有效)。

代碼示例:麥當勞點餐
  1. 界面:三個下拉框(漢堡、小食、飲料)和一個按鈕。

  2. 初始化

    Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
    {ui->setupUi(this);ui->comboBox->addItem("麥辣雞腿堡");ui->comboBox->addItem("巨無霸");ui->comboBox->addItem("培根蔬菜雙層牛堡");ui->comboBox_2->addItem("中薯條");ui->comboBox_2->addItem("麥樂雞塊");ui->comboBox_2->addItem("麥辣雞翅");ui->comboBox_3->addItem("可樂");ui->comboBox_3->addItem("雪碧");
    }
  3. 按鈕槽函數

    void Widget::on_pushButton_clicked()
    {qDebug()<<ui->comboBox->currentText()<<", "<<ui->comboBox_2->currentText()<<", "<<ui->comboBox_3->currentText();
    }
  4. 執?程序, 可以看到, 在點擊確定按鈕時, 就能獲取到當前下拉框中選中的內容:

我們也可以通過ui界面進行編輯:

代碼示例:從文件加載下拉框的選項

很多時候下拉框的選項并非是固定的,而是通過讀取文件/讀取網絡獲取得到的!(選課的時候,加載出所可選的選項!每年都不同)

1.在界面上創建一個下拉框

2.創建文件?d:/for_test/config.txt,編寫選項,每個選項占一行

火靈兒 - 出自《完美世界》。
李慕婉 - 出自《仙逆》。
陸雪琪 - 出自《誅仙》。
焰靈姬 - 出自《天行九歌》。
赤練 - 出自《秦時明月》。
少司命 - 出自《秦時明月》。
仙清兒 - 出自動漫《牧神記》。
靈毓秀 - 出自《牧神記》動畫。
云霄 - 出自動漫《師兄啊師兄》。
唐雅 - 出自動漫《斗羅大陸2絕世唐門》。

3.修改 widget.cpp,讀取文件

  • 使? ifstream 打開?件
  • 使? getline 讀取每??
  • 使? QString::fromStdString 把 std::string 轉成 QString
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 需要讀取文件內容,把文件中的每一行讀取出來,作為一個 Combobox 的選項// 讀寫IO --- I: 讀(輸入) --- 參考點是CPU!!!std::ifstream file("D:/for_test/config.txt");if(!file.is_open()){qDebug()<<"文件打開失敗";return;}// 按行讀取文本內容 --- getline 函數來完成!!!std::string line;while(std::getline(file, line)){// 取到每一行內容, 設置到下拉框中ui->comboBox->addItem(QString::fromStdString(line));}file.close();;// 關閉文件是很關鍵的,否則會造成文件資源泄漏!
}

4.執?程序, 可以看到?件內容已經被加載到下拉框中:


🎉 Qt 中也提供了 QFile 實現讀寫?件的功能。當然使? C++ 標準庫的 std::fstream 也是完全可以的。之所以存在兩套,是因為 Qt 誕?較早 (1991 年左右),此時 C++ 還沒有完成 "標準化" 的工作,C++ 標準庫這樣的概念?然也沒有誕?。因此 Qt 就??打造了?套庫,實現了字符串,容器,?件操作,多線程,?絡操作,定時器,正則表達式等內容。

(由于 C++ 標準委員會的不作為, ?今仍然有些 Qt 提供的功能, 是標準庫不具備的)

Spin Box(微調框)

使用 QSpinBox 或者 QDoubleSpinBox 來創建“微調框”,它是帶有按鈕的輸入框,可以用來輸入整數/浮點數。通過點擊按鈕來修改數值大小。 由于 SpinBox 和 QDoubleSpinBox 用法基本相同,就只介紹 SpinBox 的使用了。

Spin 英文原意為“旋轉”,此處引申成“微調”。 事實上很多術語在翻譯的時候,不一定非要按照原始的翻譯來表示,更追求的是“信達雅”。 舉個例子,地鐵上的 “Priority Seat” 會翻譯成 “愛心專座”,而不是 “優先座位”。

核心屬性
屬性說明
value存儲的數值。
singleStep每次調整的“步長”。按下一次按鈕數據變化多少。
displayInteger數字的進制。例如 displayInteger 設為 10, 則是按照 10 進制表示。設為 2 進制表示。
minimum最小值
maximum最大值
suffix后綴
prefix前綴
wrapping是否允許換行
frame是否帶邊框
alignment文字對齊方式
readOnly是否允許修改
buttonSymbol按鈕上的圖標。
- UpDownArrows 上下箭頭形式
- PlusMinus 加減號形式
- NoButtons 沒有按鈕
accelerated (加速的)按下按鈕時是否為快速調整模式。
correctionMode輸入有誤時如何修正。
- QAbstractSpinBox::CorrectToPreviousValue : 如果用戶輸入了一個無效的值(例如,在只能顯示正整數的SpinBox中輸入了負數),那么SpinBox會恢復為上一個有效值。例如,如果SpinBox的初始值是1,用戶輸入了-1(無效),然后SpinBox會恢復為1。
- QAbstractSpinBox::CorrectToNearestValue : 如果用戶輸入了一個無效的值,SpinBox會恢復為最接近的有效值。例如,如果SpinBox的初始值是1,用戶輸入了-1(無效),那么SpinBox會恢復為0。
keyboardTracking是否開啟鍵盤跟蹤。
設為 true, 每次在輸入框輸入一個數字, 都會觸發 valueChanged() 和 textChanged() 信號。
設為 false, 只有在最終按下 enter 或 者輸入框失去焦點, 才會觸發 valueChanged() 和 textChanged() 信號。
核心信號
信號說明
textChanged(QString)微調框的文本發生改變時會觸發。參數 QString 帶有前綴和后綴。
valueChanged(int)微調框的文本發生改變時會觸發。參數 int, 表示當前的數值。
代碼示例:調整麥當勞購物車中的份數。

在界面上創建下列內容

  • 三個下拉框:objectName 為 comboBox 到 spinBox_3

  • 三個微調框:objectName 為 spinBox 到 spinBox_3

  • 一個按鈕:objectName 為 pushButton

編寫代碼,修改 widget.cpp, 給下拉框設置初始值。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 初始化下拉框菜單ui->comboBox->addItem("麥辣雞腿堡");ui->comboBox->addItem("巨無霸");ui->comboBox->addItem("培根蔬菜雙層牛堡");ui->comboBox_2->addItem("中薯條");ui->comboBox_2->addItem("麥樂雞塊");ui->comboBox_2->addItem("麥辣雞翅");ui->comboBox_3->addItem("可樂");ui->comboBox_3->addItem("雪碧");// 初始化微調框// 默認一份ui->spinBox->setValue(1);// 針對 QSpinBox 的范圍進行約束ui->spinBox->setRange(1, 5);ui->spinBox_2->setValue(1);ui->spinBox_2->setRange(1, 5);ui->spinBox_3->setValue(1);ui->spinBox_3->setRange(1, 5);
}

編寫代碼,給按鈕添加 slot 函數

void Widget::on_pushButton_clicked()
{qDebug() << "當前下單的內容:"<< ui->comboBox->currentText() << ":" << ui->spinBox->value()<< ui->comboBox_2->currentText() << ":" << ui->spinBox_2->value()<< ui->comboBox_3->currentText() << ":" << ui->spinBox_3->value();
}

執行程序, 可以看到當用戶選擇不同的內容時, 點擊按鈕就能獲取到對應的結果. 同時我們也無法輸入一些超出范圍的非法值。

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

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

相關文章

JDK、eclipse的安裝,配置JDK、Tomcat并使用eclipse創建項目

目錄一、JDK的安裝1. 安裝JDK2. 配置環境變量3. 檢查jdk是否已安裝二、eclipse的安裝1. 解壓安裝2. 設置字體大小3. 設置拼寫提示三、tomcat安裝四、創建項目1. 第一次創建一個普通的java項目2. 第一次創建一個java web項目擴展&#xff1a;運行項目報Tomcat端口占用&#xff0…

Iptables 詳細使用指南

目錄 1. 工作原理? 2. 核心架構&#xff08;四表五鏈&#xff09; 2.1 四張表&#xff08;優先級從高到低&#xff09; 2.2 五條內置鏈&#xff08;數據包流向&#xff09; 3. Iptables規則 3.1 規則的匹配條件與目標動作 常見匹配條件&#xff08;用于篩選數據包&…

Vue 服務端渲染(SSR)詳解

Vue SSR是一種在服務端將 Vue 應用渲染成 HTML 字符串&#xff0c;然后直接發送到客戶端的技術。相比傳統的客戶端渲染&#xff0c;Vue SSR 能帶來更好的 SEO 性能和更快的首屏加載時間。下面我們從零到一&#xff0c;結合項目源碼&#xff0c;詳細講解如何實現一個 Vue SSR 項…

機器翻譯:需要了解的數學基礎詳解

文章目錄一、概率論與統計學1.1 基本概念1.2 在機器翻譯中的應用二、線性代數2.1 基本概念2.2 在機器翻譯中的應用三、微積分3.1 基本概念3.2 在機器翻譯中的應用四、信息論4.1 基本概念4.2 在機器翻譯中的應用五、數值優化5.1 優化問題形式化5.2 優化算法5.3 正則化技術六、圖…

藍橋杯手算題和雜題簡易做法

一、巧用Excel Excel在解決某些數學問題時非常高效&#xff0c;特別是涉及表格計算、簡單統計和可視化分析時。 門牌制作 這道題是一道基礎題&#xff0c;只需要判斷每個數字有幾個2&#xff0c;然后在加起來即可&#xff0c;但是還有更簡單的方法&#xff0c;先通過編譯器&…

5. 緩存-Redis

文章目錄前言一、 介紹1. 簡介2. 核心特點二、 應用場景1. 應用場景2. 數據類型作用場景三、 性能特性1. 內存2. 高性能數據結構3. 單線程、多路復用四、 異步持久化機制1. RDB&#xff08;Redis Database&#xff09;2. AOF&#xff08;Append-Only File&#xff09;3. 持久化…

如何理解Tomcat、Servlet、Catanalina的關系

目錄 背景&#xff1a; 結論&#xff1a; 好文-【拓展閱讀】&#xff1a; 象漂亮更新動力&#xff01; 背景&#xff1a; 學習Java的Servlet時&#xff0c;常常說Tomcat是一個容器&#xff0c;我們寫ServletA,ServletB,Tomcat容器在啟動的時候會讀取web.xml或者我們程序中的…

Hive的并行度的優化

對于分布式任務來說&#xff0c;任務執行的并行度十分重要。Hive的底層是MapReduce&#xff0c;所以Hive的并行度優化分為Map端優化和Reduce端優化。(1)、Map端優化Map端的并行度與Map切片數量相關&#xff0c;并行度等于切片數量。一般情況下不用去設置Map端的并行度。以下特殊…

Vue.js 響應接口:深度解析與實踐指南

Vue.js 響應接口&#xff1a;深度解析與實踐指南 引言 隨著前端技術的不斷發展&#xff0c;Vue.js 作為一種流行的前端框架&#xff0c;已經成為了眾多開發者的首選。Vue.js 的響應式系統是其核心特性之一&#xff0c;它允許開發者輕松實現數據的雙向綁定。而響應接口則是Vue.j…

高精度藍牙定位:技術、應用與未來發展

一、高精度藍牙定位概述在當今科技飛速發展的時代&#xff0c;定位技術的精度和可靠性變得越來越重要。高精度藍牙定位作為一種新興的定位技術&#xff0c;正逐漸嶄露頭角。藍牙技術是一種支持設備短距離通信&#xff08;一般10m內&#xff09;的無線電技術&#xff0c;能在包括…

C# 基于halcon的視覺工作流-章29-邊緣提取-亞像素

C# 基于halcon的視覺工作流-章29-邊緣提取-亞像素 本章目標&#xff1a; 一、1edges_sub_pix&#xff1b; 二、threshold_sub_pix&#xff1b;本實例實現過程與章28基本相同&#xff0c;不同處在于提取的邊緣是亞像素&#xff0c;精度較高&#xff0c;本文僅介紹不同之處&#…

如何實現PostgreSQL的高可用性,包括主流的復制方案、負載均衡方法以及故障轉移流程?

前言 實現 PostgreSQL 的高可用性&#xff08;High Availability, HA&#xff09;是一個系統工程&#xff0c;需要結合復制技術、連接路由&#xff08;負載均衡&#xff09;、自動故障轉移&#xff08;Failover&#xff09;以及監控告警。以下是主流方案和關鍵流程的詳細說明&a…

Apache Ignite 生產級的線程池關閉工具方法揭秘

Apache Ignite 中用于 安全、可靠地關閉線程池&#xff08;ExecutorService&#xff09; 的關鍵邏輯。我們來一步步深入理解它的設計思想和實現細節。&#x1f9f1; 一、核心方法&#xff1a;U.shutdownNow(...) public static void shutdownNow(Class<?> owner, Nullab…

Unity:GUI筆記(一)——文本、按鈕、多選框和單選框、輸入框和拖動條、圖片繪制和框繪制

寫在前面&#xff1a;寫本系列(自用)的目的是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解&#xff0c;方便自己以后快速復習&#xff0c;減少遺忘。主要是唐老師的課程。一、重要參數、文本、按鈕GUI相關代碼需要寫在private void OnGUI()中。該函數每幀執行&#x…

wordpress從wp_nav_menu中獲取菜單項

從wp_nav_menu中獲取菜單項&#xff0c;然后檢查這些菜單項是否對應分類(Category)&#xff0c;并輸出這些分類的ID。 以下是完整的代碼實現&#xff1a; <?php // 獲取指定菜單位置的菜單項 $menu_items wp_get_nav_menu_items(wodepress); // wodepress 是菜單位置的名…

第4章 程序段的反復執行2 while語句P128練習題(題及答案)

&#xff08;&#xff08;1&#xff09;閱讀程序#include <bits/stdc.h> using namespace std; //湯永紅 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分別輸入&#xff1a;0 1024 1234567890輸出…

圖解軟件系統組成

這是基于 ??PlantUML?? 繪制的軟件系統組成部分思維導圖&#xff0c;聚焦技術路線與文件類型的對應關系&#xff0c;采用分層架構展示核心模塊&#xff1a;startmindmap * **軟件系統組成部分*** **一、核心技術棧*** 后端技術* 技術路線: Python Web 框架* 文件類型: .py …

【傳奇開心果系列】Flet框架實現的多人訪問web數據表高并發前后端自定義框架模板

Flet框架實現的多人訪問web數據表高并發前后端自定義框架模板一、效果展示截圖二、應用場景介紹1. **多用戶實時協作**2. **產品管理**3. **數據可視化**三、特色說明1. **實時通信**2. **高性能**3. **用戶友好的界面**4. **日志記錄**5. **安全性**四、總結五、源碼下載地址六…

農業智慧大屏系統 - Flask + Vue實現

下面我將實現一個完整的農業智慧大屏系統&#xff0c;使用Flask作為后端框架&#xff0c;前端使用Vue.js結合ECharts進行數據可視化展示。 設計思路 前端部分&#xff1a; 使用Vue.js構建響應式界面 使用ECharts實現各類農業數據可視化 使用CSS Grid布局實現大屏適配 后端…

Linux中Https配置與私有CA部署指南

Linux中Https配置與私有CA部署指南 一、HTTPS 核心概念特性HTTPHTTPS協議明文傳輸HTTP SSL/TLS端口80443加密未加密數據加密二、SSL/TLS 握手流程 Client → Server ClientHello&#xff1a;支持哪些版本、支持哪些加密算法&#xff0c;隨機生成一組32字節數據 random_c Serve…