QComboBox和QPlainTextEdit的講解和使用

簡介: 下拉列表框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】


開心分享:

因爲有着許許多多的熱心網友的無私分享,從他們的博客中學習成長,學會很多,故也不辭辛苦也將自己的項目或經驗整理成博客的形式,也提供給一起大家學習探討與交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章