qt實現 標籤控件

qt實現 標籤控件

咱先別說啥了,直接上圖:
這裏寫圖片描述

對照圖大體介紹一哈:

  • 右邊是個輸入框,在右邊輸入內容後直接回車,就可以以標籤的形式加到前邊,每個標籤並且有自己的刪除按鈕。(對!對!對!就是這個效果!!!

實現原理:

  • 首先分析控件,將這個控件可以劃分爲以下幾個部分:①標籤控件;②輸入框;③外面的佈局窗口

①:其實就是一個窗口設置一個橫向佈局器,左邊一個label,右邊一個button
②:輸入框只要是監視回車事件
③:外面窗體佈局是重點,需要動態去更新佈局,動態有兩種:一種是將佈局銷燬,重新去new,適合修改複雜佈局的窗體;第二種就是動態的去插入(insertWidget)和刪除(removeWidget)佈局中的窗體,適合窗體佈局簡單的窗體。咱們這個控件就是一個簡單的橫向佈局,所以就動態去插入和刪除窗體。
④:其次就是使用信號和槽,將輸入框的回車和添加槽函數,標籤自身的關閉和刪除槽函數連接即可。

重點代碼

輸入框的回車處理:

if (event->type() == QEvent::KeyPress)
{
    QKeyEvent *pEvent = dynamic_cast<QKeyEvent*>(event);
    if (pEvent->key() == Qt::Key_Enter || pEvent->key() == Qt::Key_Return)
    {
        if (!m_pInputEdit->text().isEmpty())
        {
        //添加新標籤
            addLabel(new LabelClose(this, m_pInputEdit->text()));
            m_pInputEdit->setText("");
        }
    }
}

添加新標籤:

m_oLabelList.append(p);
m_pMainLayout->insertWidget(m_oLabelList.size() - 1, p);
connect(p, SIGNAL(closeWidget(QWidget*)), this, SLOT(childClose(QWidget*)));

刪除新標籤:

m_pMainLayout->removeWidget(self);
m_oLabelList.removeAll((LabelClose*)self);

其他也就剩一些佈局和樣式的問題了,在這就不多說了。

源碼下載

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