日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt之QLineEdit详解(附源码)

發(fā)布時(shí)間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt之QLineEdit详解(附源码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原博客地址:http://blog.csdn.net/liang19890820/article/details/52044639,感謝原作者總結(jié)和分享。

簡述

QLineEdit是一個(gè)單行文本輸入框。

QLineEdit允許用戶輸入和編輯單行純文本,提供了很多有用的編輯功能,包括:撤消和重做、剪切和粘貼、以及拖放(見setDragEnabled())。

通過改變輸入框的echoMode(),同時(shí)也可以設(shè)置為一個(gè)“只寫”字段,用于輸入密碼等。

文本的長度可以被限制為maxLength(),可以使用一個(gè)validator()或inputMask()來任意限制文本。當(dāng)在同一個(gè)輸入框中切換驗(yàn)證器和輸入掩碼的時(shí)候,最好是清除驗(yàn)證器或輸入掩碼,防止不確定的行為。

  • 簡述
  • 內(nèi)容
    • 詳細(xì)介紹
    • 共有類型
    • 常用接口
    • 信號(hào)
    • 共有槽
  • 示例
    • QLineEditEchoMode效果
      • 效果
      • 源碼
    • 自定義搜索框
      • 效果
      • 源碼
    • 驗(yàn)證器
      • 效果
      • 源碼
    • 輸入掩碼
      • 效果
      • 源碼
  • 更多參考

內(nèi)容

詳細(xì)介紹

與其相關(guān)的一個(gè)類是QTextEdit - 允許多行、富文本編輯。

可以使用setText()或insert()來改變文本,通過text()來獲取文本;顯示的文本(可能不同,詳見:EchoMode)通過displayText()來獲取。文本可以使用setSelection()或selectAll()來選中,選中的文本可以被cut()、copy()和paste(),使用setAlignment()來設(shè)置文本的對(duì)齊方式。

當(dāng)文本改變時(shí),會(huì)發(fā)射textChanged()信號(hào)。當(dāng)使用setText()改變文本時(shí),textEdited()信號(hào)也會(huì)發(fā)射。光標(biāo)位置發(fā)生變化時(shí),會(huì)發(fā)射cursorPositionChanged()信號(hào),當(dāng)Return或Enter鍵被按下時(shí),發(fā)射returnPressed()信號(hào)。

當(dāng)編輯完成,或者是因?yàn)檩斎肟蚴ソ裹c(diǎn),或Return/Enter鍵被按下時(shí),發(fā)出的editingFinished()信號(hào)。

注意:如果輸入框有一個(gè)驗(yàn)證器,returnPressed()/editingFinished()信號(hào)只有在驗(yàn)證期返回QValidator::Acceptable的時(shí)候才會(huì)被發(fā)射。

默認(rèn)情況下,QLineEdit具有由平臺(tái)風(fēng)格指南規(guī)定的邊框,可以通過setFrame(false)將其關(guān)閉。

默認(rèn)鍵被綁定描述如下。輸入框還提供了一些編輯選項(xiàng)的上下文菜單(通常通過單擊鼠標(biāo)右鍵調(diào)用)。

按鍵動(dòng)作
Left Arrow光標(biāo)左移一個(gè)字符
Shift+Left Arrow光標(biāo)左移并選擇一個(gè)字符
Right Arrow光標(biāo)右移一個(gè)字符
Shift+Right Arrow光標(biāo)右移并選擇一個(gè)字符
Home將光標(biāo)移動(dòng)到行的開頭
End將光標(biāo)移動(dòng)到行的末尾
Backspace刪除光標(biāo)左側(cè)字符
Ctrl+Backspace刪除光標(biāo)左側(cè)的單詞
Delete刪除光標(biāo)右側(cè)字符
Ctrl+Delete刪除光標(biāo)右側(cè)的單詞
Ctrl+A全選
Ctrl+C復(fù)制選中的文本復(fù)制到剪貼板
Ctrl+Insert復(fù)制選中的文本復(fù)制到剪貼板
Ctrl+K刪除此處至末尾所有內(nèi)容
Ctrl+V粘貼剪貼板的文本到輸入框中
Shift+Insert粘貼剪貼板的文本到輸入框中
Ctrl+X剪切選中的文本到剪貼板
Shift+Delete剪切選中的文本到剪貼板
Ctrl+Z撤銷上一次操作
Ctrl+Y重做上一次操作

共有類型

  • 枚舉:QLineEdit::ActionPosition

    描述如何顯示加入到輸入框中的action部件。

常量值描述
QLineEdit::LeadingPosition0當(dāng)使用布局方向Qt::LeftToRight時(shí),部件顯示在文本左側(cè);使用Qt::RightToLeft時(shí),則顯示在右側(cè)。
QLineEdit::TrailingPosition1當(dāng)使用布局方向Qt::LeftToRight時(shí),部件顯示在文本右側(cè);使用Qt::RightToLeft時(shí),則顯示在左側(cè)。


  • 枚舉:QLineEdit::EchoMode

    描述輸入框如何顯示其內(nèi)容。

常量值描述
QLineEdit::Normal0正常顯示輸入的字符,默認(rèn)選項(xiàng)。
QLineEdit::NoEcho1不顯示任何輸入,常用于密碼類型,其密碼長度都需要保密的時(shí)候。
QLineEdit::Password2顯示平臺(tái)相關(guān)的密碼掩碼字符,而不是實(shí)際的字符輸入。
QLineEdit::PasswordEchoOnEdit3在編輯的時(shí)候顯示字符,負(fù)責(zé)顯示密碼類型。

常用接口

這里列舉了一些常用接口,但并非全部的,要獲得更多信息請(qǐng)參考助手。

  • QString text() const?
    返回輸入框的當(dāng)前文本。

  • void addAction(QAction * action, ActionPosition position)

  • QAction * addAction(const QIcon & icon, ActionPosition position)?
    添加action至指定位置。

  • Qt::Alignment alignment() const

  • void setAlignment(Qt::Alignment flag)

    alignment : Qt::Alignment?
    屬性保存了輸入框的對(duì)齊方式(水平和垂直方向)。Qt::AlignJustify映射到Qt::AlignLeft。?
    默認(rèn)情況下,該屬性包含Qt::AlignLeft和Qt::AlignVCenter。

  • QCompleter* completer() const

  • void setCompleter(QCompleter * c)?
    QCompleter后面詳細(xì)講解。

  • void deselect()?
    取消選中任何已選中的文本。

  • QString displayText() const?
    返回顯示的文本。默認(rèn)值為一個(gè)空字符串。?
    如果echoMode是Normal,和text()返回的一樣;如果EchoMode是Password或PasswordEchoOnEdit,會(huì)返回平臺(tái)相關(guān)的密碼掩碼字符,長度為text().length(),例如:"******";如果EchoMode是NoEcho,返回一個(gè)空字符串""。

  • QString selectedText() const?
    返回選中的的文本。如果沒有選中,返回一個(gè)空字符串。默認(rèn)為一個(gè)空字符串。

  • int cursorPosition() const

  • void setCursorPosition(int)

    cursorPosition : int?
    屬性包含輸入框當(dāng)前光標(biāo)的位置。設(shè)置光標(biāo)位置時(shí),會(huì)導(dǎo)致應(yīng)有的重繪。默認(rèn)情況下,屬性值為0。

  • EchoMode echoMode() const

  • void setEchoMode(EchoMode)

    echoMode : EchoMode?
    屬性保存了輸入框的顯示模式。顯示模式?jīng)Q定了輸入框?qū)τ脩舻奈谋撅@示。默認(rèn)值為Normal?
    最常用的設(shè)置是Normal,用戶輸入文本被逐字顯示;還包含其它模糊輸入,例如:NoEcho、Password和PasswordEchoOnEdit。?
    部件的顯示、復(fù)制或拖動(dòng)文本的行為受此設(shè)置的影響。

  • int maxLength() const

  • void setMaxLength(int)

    maxLength : int?
    此屬性包含文本的最大允許長度。如果文本太長,將從限制的位置截?cái)唷DJ(rèn)值為32767。?
    如果發(fā)生截?cái)嗳魏芜x中的文本將取消選中,光標(biāo)位置設(shè)置為0,并且顯示字符串的第一部分。?
    如果輸入框有一個(gè)輸入掩碼,那么,掩碼定義字符串的最大長度。

  • QString placeholderText() const

  • void setPlaceholderText(const QString &)

    placeholderText : QString?
    當(dāng)輸入框?yàn)榭諘r(shí),輸入框顯示一個(gè)灰色的占位符文本。默認(rèn)值為一個(gè)空字符串。?
    通常,一個(gè)空的輸入框顯示占位符文本,即使它有焦點(diǎn)。然而,如果內(nèi)容水平居中,當(dāng)輸入框有焦點(diǎn)時(shí),占位符文本不顯示在光標(biāo)下。

  • bool isReadOnly() const

  • void setReadOnly(bool)

    readOnly : bool?
    此屬性保存輸入框是否為只讀。?
    在只讀模式下,用戶仍然可以將文本復(fù)制到剪貼板,或拖放文本(如果echoMode()是Normal),但不能編輯它。?
    只讀模式下,QLineEdit也不顯示光標(biāo)。

  • void setSelection(int start, int length)?
    從位置start選擇文本為length個(gè)字符,允許負(fù)長度。

  • void setValidator(const QValidator * v)?
    設(shè)置輸入框的驗(yàn)證器,將限制任意可能輸入的文本。如果v == 0,將會(huì)清除當(dāng)前的輸入驗(yàn)證器?
    如果v = = 0,setValidator()刪除當(dāng)前的輸入驗(yàn)證器。初始設(shè)置是沒有輸入驗(yàn)證器(即:接受任何輸入到maxLength())。

  • const QValidator * validator() const?
    返回一個(gè)當(dāng)前輸入的驗(yàn)證器指針,如果沒有設(shè)置驗(yàn)證器,返回0。

  • QString inputMask() const

  • void setInputMask(const QString & inputMask)

    inputMask : QString?
    此屬性保存驗(yàn)證器的輸入掩碼。如果沒設(shè)置研發(fā),inputMask() 或返回一個(gè)空字符串。傳遞一個(gè)空字符串可以取消驗(yàn)碼并返回一個(gè)正常QLineEdit。

下表列出了可在一個(gè)輸入掩碼中使用的字符。空格字符,是一個(gè)空白的缺省字符,當(dāng)一個(gè)字符是允許的,但不是必須的請(qǐng)胯下。

字符含義
AASCII字母字符是必須的,A-Z、a-z。
aASCII字母字符是允許的,但不是必須的。
NASCII字母字符是必須的,A-Z、a-z、0-9。
nASCII字母字符是允許的,但不是必須的。
X任何字符都是必須要的。
x任何字符都是允許的,但不是必須要的。
9ASCII數(shù)字是必須要的,0-9。
0ASCII數(shù)字是允許的,但不是必須要的。
DASCII數(shù)字是必須要的,1-9。
dASCII數(shù)字是允許的,但不是必須要的 (1-9)。
#ASCII數(shù)字或加/減符號(hào)是允許的,但不是必須要的。
H十六進(jìn)制數(shù)據(jù)字符是必須要的,A-F、a-f、0-9。
h十六進(jìn)制數(shù)據(jù)字符是允許的,但不是必須要的。
B二進(jìn)制數(shù)據(jù)字符是必須要的,0-1。
b二進(jìn)制數(shù)據(jù)字符是允許的,但不是必須要的。
>所有的字符字母都大寫
<所有的字符字母都小寫
!關(guān)閉大小寫轉(zhuǎn)換
\使用 \ 去轉(zhuǎn)義上述列出的字符。


掩碼由掩碼字符和分隔符字符串組成,后面可以跟一個(gè)分號(hào)和用于空白的字符,空白字符在編輯后總是從文本中刪除。

示例:

掩碼注意事項(xiàng)
000.000.000.000;_IP地址,空白是_。
HH:HH:HH:HH:HH:HH;_MAC地址。
0000-00-00ISO日期,空白是空格。
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#License號(hào),空白是-和所有(字母)字符轉(zhuǎn)換為大寫。

信號(hào)

  • void selectionChanged()?
    只要選擇改變這個(gè)信號(hào)就會(huì)被發(fā)射。

  • void cursorPositionChanged(int old, int new)?
    只要光標(biāo)移動(dòng),這個(gè)信號(hào)就會(huì)發(fā)射。前面的位置old,新的位置是new。

  • void editingFinished()

  • void returnPressed()
  • void textChanged(const QString & text)
  • void textEdited(const QString & text)?
    參考:“詳細(xì)描述”

共有槽

  • void clear()?
    清除輸入框內(nèi)容

  • void copy() const?
    如果echoMode()是Normal,將選中的文本復(fù)制到剪貼板。

  • void cut()?
    如果echoMode()是Normal,將所選文本復(fù)制到剪貼板并刪除它。?
    如果當(dāng)前的驗(yàn)證不允許刪除選定的文本,cut()將復(fù)制而不刪除。

  • void paste()?
    如果輸入框不是只讀的,插入剪貼板中的文本到光標(biāo)所在位置,刪除任何選定的文本。?
    如果最終的結(jié)果不被當(dāng)前的驗(yàn)證器接受,將沒有任何反應(yīng)。

  • void redo()?
    重做上次操作,如果redo可用(isRedoAvailable() )。

  • void selectAll()?
    選中所有文本(即:高亮),并將光標(biāo)移動(dòng)到末尾。當(dāng)一個(gè)默認(rèn)值被插入時(shí),這非常有用,因?yàn)槿绻脩粼邳c(diǎn)擊部件之前就輸入,選中的文本將被刪除。

  • void setText(const QString &)?
    設(shè)置輸入框顯示的文本。

  • void undo()?
    撤消上次操作,如果撤消可用( isUndoAvailable())。取消任何當(dāng)前的選中,并更新選中到當(dāng)前光標(biāo)位置。

示例

QLineEdit::EchoMode效果

首先,來演示QLineEdit::EchoMode的效果。

效果


源碼

[cpp]?view plaincopy
  • <strong>????QLineEdit?*pNormalLineEdit?=?new?QLineEdit(this);??
  • ????QLineEdit?*pNoEchoLineEdit?=?new?QLineEdit(this);??
  • ????QLineEdit?*pPasswordLineEdit?=?new?QLineEdit(this);??
  • ????QLineEdit?*pPasswordEchoOnEditLineEdit?=?new?QLineEdit(this);??
  • ??
  • ????pNormalLineEdit->setPlaceholderText("Normal");??
  • ????pNoEchoLineEdit->setPlaceholderText("NoEcho");??
  • ????pPasswordLineEdit->setPlaceholderText("Password");??
  • ????pPasswordEchoOnEditLineEdit->setPlaceholderText("PasswordEchoOnEditLineEdit");??
  • ??
  • ????//?設(shè)置顯示效果??
  • ????pNormalLineEdit->setEchoMode(QLineEdit::Normal);??
  • ????pNoEchoLineEdit->setEchoMode(QLineEdit::NoEcho);??
  • ????pPasswordLineEdit->setEchoMode(QLineEdit::Password);??
  • ????pPasswordEchoOnEditLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);??
  • ??
  • ????QVBoxLayout?*gLayout?=?new?QVBoxLayout(this);??
  • ????gLayout->addWidget(pNormalLineEdit,0,0);??
  • ????gLayout->addWidget(pNoEchoLineEdit,1,0);??
  • ????gLayout->addWidget(pPasswordLineEdit,2,0);??
  • ????gLayout->addWidget(pPasswordEchoOnEditLineEdit,3,0);??
  • ??
  • ????this->setLayout(gLayout);</strong>??

  • 自定義搜索框

    關(guān)于搜索框,我們經(jīng)常接觸。例如:瀏覽器搜索、Windows資源管理器搜索等。

    效果


    源碼

    通過QLineEdit的addAction()函數(shù)來加入action,這里我們使用了重載函數(shù)。

    [cpp]?view plaincopy
  • m_pLineEdit?=?new?QLineEdit(this);??
  • m_pLabel?=?new?QLabel(this);??
  • ??
  • m_pLineEdit->setPlaceholderText(QString::fromLocal8Bit("請(qǐng)輸入搜索內(nèi)容"));??
  • m_pLabel->setText(QString::fromLocal8Bit("輸入內(nèi)容為:"));??
  • ??
  • QAction?*pLeadingAction?=?new?QAction(this);??
  • pLeadingAction->setIcon(QIcon("D:/qt/LineEdit/2.png"));??
  • m_pLineEdit->addAction(pLeadingAction,?QLineEdit::LeadingPosition);??
  • ??
  • QAction?*pTrailingAction?=?new?QAction(this);??
  • pTrailingAction->setIcon(QIcon("D:/qt/LineEdit/1.ico"));??
  • m_pLineEdit->addAction(pTrailingAction,?QLineEdit::TrailingPosition);??
  • ??
  • //?連接信號(hào)和槽??
  • connect(pTrailingAction,?SIGNAL(triggered(bool)),?this,?SLOT(onSearch(bool)));??


  • 槽函數(shù),用于獲取輸入框中的內(nèi)容,然后處理。

    [cpp]?view plaincopy
  • void?Widget::onSearch(bool?checked)??
  • {??
  • ????QString?strText?=?m_pLineEdit->text();??
  • ????m_pLabel->setText(QString::fromLocal8Bit("輸入內(nèi)容為:%1").arg(strText));??
  • }??

  • 驗(yàn)證器

    通常情況下,我們會(huì)對(duì)用戶的輸入做一些限制,可以通過驗(yàn)證起來設(shè)置,常見的有:整形、浮點(diǎn)型及其它自定義驗(yàn)證器。

    效果


    源碼

    [cpp]?view plaincopy
  • QLineEdit?*pIntLineEdit?=?new?QLineEdit(this);??
  • QLineEdit?*pDoubleLineEdit?=?new?QLineEdit(this);??
  • QLineEdit?*pValidatorLineEdit?=?new?QLineEdit(this);??
  • ??
  • pIntLineEdit->setPlaceholderText(QString::fromLocal8Bit("整形"));??
  • pDoubleLineEdit->setPlaceholderText(QString::fromLocal8Bit("浮點(diǎn)型"));??
  • pValidatorLineEdit->setPlaceholderText(QString::fromLocal8Bit("字母和數(shù)字"));??
  • ??
  • //?整形?范圍:[1,?99]??
  • QIntValidator?*pIntValidator?=?new?QIntValidator(this);??
  • pIntValidator->setRange(1,?99);??
  • ??
  • //?浮點(diǎn)型?范圍:[-360,?360]?精度:小數(shù)點(diǎn)后2位??
  • QDoubleValidator?*pDoubleValidator?=?new?QDoubleValidator(this);??
  • pDoubleValidator->setRange(-360,?360);??
  • pDoubleValidator->setNotation(QDoubleValidator::StandardNotation);??
  • pDoubleValidator->setDecimals(2);??
  • ??
  • //?字符和數(shù)字??
  • QRegExp?reg("[a-zA-Z0-9]+$");??
  • QRegExpValidator?*pValidator?=?new?QRegExpValidator(this);??
  • pValidator->setRegExp(reg);??
  • ??
  • pIntLineEdit->setValidator(pIntValidator);??
  • pDoubleLineEdit->setValidator(pDoubleValidator);??
  • pValidatorLineEdit->setValidator(pValidator);??


  • 輸入掩碼

    要限制用戶輸入,除了驗(yàn)證器,還可以使用輸入掩碼,常見的有IP、MAC地址、日期、License號(hào)等。

    效果


    源碼

    [cpp]?view plaincopy
  • QLineEdit?*pIPLineEdit?=?new?QLineEdit(this);??
  • QLineEdit?*pMACLineEdit?=?new?QLineEdit(this);??
  • QLineEdit?*pDateLineEdit?=?new?QLineEdit(this);??
  • QLineEdit?*pLicenseLineEdit?=?new?QLineEdit(this);??
  • ??
  • pIPLineEdit->setInputMask("000.000.000.000;_");??
  • pMACLineEdit->setInputMask("HH:HH:HH:HH:HH:HH;_");??
  • pDateLineEdit->setInputMask("0000-00-00");??
  • pLicenseLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");??

  • 源碼下載地址:http://download.csdn.net/detail/rl529014/9596939

    總結(jié)

    以上是生活随笔為你收集整理的Qt之QLineEdit详解(附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。