Qt 搜索框


一、前言

  用戶需要輸入文本時,可使用QLineEdit控件進行編輯輸入,缺點是樣式相對單一。

  在使用百度搜索輸入框時,發覺比較人性化,故采用QLineEdt+QPushButton通過css樣式實現自定義搜索框控件,包含如下功能:

  1、可設置占位符文本

  2、可設置搜索按鈕顯示字符內容、文本顏色

  3、可設置搜索按鈕為圖標形式或文本形式

  4、可設置背景色、邊框顏色、邊框圓角角度

  5、支持回車發送當前文本信號

  6、支持獲取當前編輯文本內容

  7、支持設置當前文本內容

  8、鼠標移入/移出到搜索按鈕上,切換鼠標狀態

二、搜索框實現

  1、運行環境Qt5.5 VS2013

  2、自定義搜索框

  1)繼承QWidget,定義搜索框類SearchLineEdit

  2)采用水平無間距布局

 1 //用於輸入搜索文本,左對齊
 2     m_LineEdit = new QLineEdit;
 3     m_LineEdit->setObjectName("SearchText");
 4     m_LineEdit->setPlaceholderText(" 請輸入搜索字符");
 5     m_LineEdit->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
 6     m_LineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
 7     connect(m_LineEdit, SIGNAL(editingFinished()), this, SLOT(searchSlot()));
 8 
 9     m_Button = new QPushButton;
10     m_Button->setObjectName("SearchButton");
11     m_Button->setText(buttonText);
12     m_Button->setIconSize(QSize(28, 28));
13     m_Button->setFixedWidth(55);
14     m_Button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
15     connect(m_Button, SIGNAL(clicked(bool)), this, SLOT(searchSlot()));
16     m_Button->installEventFilter(this);
17 
18     m_BgFrame = new QFrame;
19     m_BgFrame->setObjectName("frameSearch");
20 
21     //設置樣式
22     setStyle();
23 
24     QVBoxLayout *verticalLayout = new QVBoxLayout(this);
25     verticalLayout->setMargin(0);
26     verticalLayout->setSpacing(0);
27     verticalLayout->addWidget(m_BgFrame);
28 
29     //將控件按照橫向布局排列
30     QHBoxLayout *layout = new QHBoxLayout(m_BgFrame);
31     layout->setMargin(0);
32     layout->setSpacing(0);
33     layout->addWidget(m_LineEdit);
34     layout->addWidget(m_Button);
控件布局

  3)設置QLineEdit與QPushButton的顯示樣式

void SearchLineEdit::setStyle()
{
    QStringList qss;

    qss.append(QString("QFrame#%1{border:none;border-radius:%2px;}")
               .arg(m_BgFrame->objectName()).arg(borderRadius));
    qss.append(QString("QLineEdit{background-color:%1;border:none;}").arg(bgColor));
    qss.append(QString("QLineEdit{border-top-left-radius:%1px;border-bottom-left-radius:%1px;border:2px solid %2;}")
               .arg(borderRadius).arg(borderColor));
    qss.append(QString("QPushButton{background-color:%1;border:none;color:%2;}")
               .arg(borderColor).arg(buttonTextColor));
    qss.append(QString("QPushButton{border-top-right-radius:%1px;border-bottom-right-radius:%1px;}")
               .arg(borderRadius));

    m_BgFrame->setStyleSheet(qss.join(""));
}
樣式設置

  3、控件效果如下

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM