簡介: 下拉列表框QComboBox
和富文本編輯器QPlainTextEdit
的介紹和使用
本博文的簡述or解決問題?
詳情: 見簡介
編程環境: win10 x64 專業版 1803
編程軟件: Qt Creator 4.8.2 (Enterprise)
, Qt 5.9.8
同步博文:
運行效果:
先上一個最終的運行效果圖:
QComboBox屬性:
QComboBox
是下拉列表框組件類,它提供一個下拉列表供用戶選擇,也可以直接當作一個QLineEdit
用作輸入。QComboBox
除了顯示可見下拉列表外,每個項(item,或稱列表項)還可以關聯一個QVariant類型的變量,用於存儲一些不可見數據。
QComboBox
存儲的項是一個列表,但是QComboBox
不提供整個列表用於訪問,可以通過索引訪問某個項。訪問項的一些函數主要有以下幾種。其一些基本屬性和常用函數介紹:
常用函數 | 含義 |
---|---|
int currentIndex( ) | 返回當前項的序號,第一個項的序號爲0 |
QString currentText( ) | 返回當前項的文字 |
QVariant currentData(int role=Qt:UserRole) | 返回當前項的關聯數據,數據的缺省角色role=Qt:UserRole |
QString itemText(int index) | 返回指定索引號的項的文字 |
QVariant itemData(int index,int role=Qt::UserRole) | 返回指定索引號的項的關聯數據 |
int count() | 返回項的個數 |
在一個QComboBox組件上選擇項發生變化時,會發射如下兩個信號:
這兩個信號只是傳遞的參數不同,一個傳遞的是當前項的索引號,一個傳遞的當前項的文字。
void currentIndexChanged(int index)
void currentIndexChanged(const QString &text)
QPlain TextEdit屬性:
QPlainTextEdit
是一個多行文本編輯器,用於顯示和編輯多行簡單文本。另外,還有一個QTextEdit
組件,是一個所見即所得的可以編輯帶格式文本的組件,以HTML格式標記符定義文本格式。
QPlainTextEdit
提供**cut( )、copy( )、paste( )、undo( )、redo( )、clear( )、selectAll( )**等標準編輯功
能的槽函數,QPlainTextEdit
還提供一個標準的右鍵快捷菜單。
QPlainTextEdit
的文字內容以QTextDocument類型存儲,函數document()
返回這個文檔對象的
指針。
QTextDocument是內存中的文本對象,以文本塊的方式存儲,一個文本塊就是一個段落,每
個段落以回車符結束。QTextDocument提供一些函數實現對文本內容的存取。
常用函數 | 含義() |
---|---|
appendPlainText() | 向QPlain TextEdit添加一行話 |
int blockCount() | 獲得文本塊個數 |
QTextBlock findBlockByNumber(int blockNumber) | 讀取某一個文本塊,序號從0開始,至blockCount()-1結束。 |
一個document有多個TextBlock,從document中讀取出的一個文本塊類型爲QTextBlock,通過QTextBlock.:text()
函數可以獲取其純文本文字。
核心源碼:
//左上角區域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//初始化簡單的QComboBox控件
void ExQcomboBox::on_btnLeftInit_clicked()
{
QIcon ico;
ico.addFile(":/images/github.ico");
ui->comBoxLeft->clear();
for (int i = 0; i < 13; i++) {
ui->comBoxLeft->addItem(ico, QString("第%1個item項").arg(i)); //帶有ico圖標的項
}
}
//清除簡單的QComboBox控件
void ExQcomboBox::on_btnLeftClear_clicked()
{
ui->comBoxLeft->clear();
}
//勾選QComboBox爲可以編輯狀態
void ExQcomboBox::on_checkBoxOnlyWrite_clicked()
{
if(ui->checkBoxOnlyWrite->isChecked())
ui->comBoxLeft->setEditable(true);
else
ui->comBoxLeft->setEditable(false);
}
//右上角區域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//初始化複雜的QComboBox控件(給每一項都添加一個對應的自定義數據[不顯示])
void ExQcomboBox::on_btnRightInit_clicked()
{
QIcon ico;
ico.addFile(":/images/gril.ico");
QMap<QString, QString> map;
map.insert("張投", "16歲");
map.insert("張我", "17歲");
map.insert("張以", "18歲");
map.insert("張木", "19歲");
map.insert("張李", "20歲");
map.insert("張,", "21歲");
map.insert("張報", "22歲");
map.insert("張之", "23歲");
map.insert("張以", "24歲");
map.insert("張瓊", "25歲");
map.insert("張玖", "26歲");
map.insert("張。", "27歲");
ui->comBoxRight->clear();
foreach(QString str, map.keys()){
ui->comBoxRight->addItem(ico, str, map.value(str)); //因爲有Map,所以QComboBox顯示會按照key排序,而非上面的定義順序,注意不是map.key(str)
}
}
//底部區域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//文本框內容每次讀取一行,添加到ComboBox作爲item項
void ExQcomboBox::on_btnBottomAdd_clicked()
{
QTextDocument* doc = ui->plainTextEdit->document(); //獲取文本對象
int cnt = doc->blockCount(); //回車符是一個block
QIcon ico;
ico.addFile(":/images/github.ico");
ui->comBoxLeft->clear();
ui->comBoxRight->clear();
for (int i = 0; i < cnt; i++) {
QTextBlock text = doc->findBlockByNumber(i); //獲取文本中一段(以換行爲標誌)
ui->comBoxLeft->addItem(ico, text.text());
ui->comBoxRight->addItem(ico, text.text(), QString("附加內容:%1").arg(i));
}
}
//清除可編輯的富文本的編輯器的所有內容
void ExQcomboBox::on_btnBottomClear_clicked()
{
ui->plainTextEdit->clear();
}
//設置富文本的編輯器(plainTextEdit)只可讀
void ExQcomboBox::on_checkBoxOnlyRead_clicked()
{
if(ui->checkBoxOnlyRead->isChecked())
ui->plainTextEdit->setEnabled(false);
else
ui->plainTextEdit->setEnabled(true);
}
//公共的槽函數區域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//顯示當前選中的ComboBox的item項的內容
void ExQcomboBox::onSelectDisplay(QString str)
{
QString strData = ui->comBoxRight->currentData().toString(); // 獲取當前item的關聯數據的內容
ui->labDisplay->setText(str + " " + strData);
ui->plainTextEdit->appendPlainText(str + " " + strData);
}
源碼下載:
https://github.com/touwoyimuli/QtExamples 【QtQlistWidgetEx】
開心分享:
因爲有着許許多多的熱心網友的無私分享,從他們的博客中學習成長,學會很多,故也不辭辛苦也將自己的項目或經驗整理成博客的形式,也提供給一起大家學習探討與交流