国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解 Qt 自動完成LineEdit

移動開發
本文介紹的是 Qt 自動完成LineEdit,一個錄入界面上有一個lineEdit,用來錄入代碼進行檢索。先來看內容。

Qt 自動完成LineEdit是本文要介紹的內容,內容雖少,取其精華。簡單的代碼實現出很好的效果,先來看內容。

詳解 Qt 自動完成LineEdit

CompleteLineEdit.h

  1. #ifndef COMPLETELINEEDIT_H  
  2. #define COMPLETELINEEDIT_H  
  3. #include <QtGui/QLineEdit> 
  4. #include <QStringList> 
  5. class QListView;  
  6. class QStringListModel;  
  7. class QModelIndex;  
  8. class CompleteLineEdit : public QLineEdit {  
  9.     Q_OBJECT  
  10. public:  
  11.     CompleteLineEdit(QStringList words, QWidget *parent = 0);  
  12. public slots:  
  13.     void setCompleter(const QString &text); // 動態的顯示完成列表  
  14.     void completeText(const QModelIndex &index); // 點擊完成列表中的項,使用此項自動完成輸入的單詞  
  15. protected:  
  16.     virtual void keyPressEvent(QKeyEvent *e);  
  17.     virtual void focusOutEvent(QFocusEvent *e);  
  18. private:  
  19.     QStringList words; // 整個完成列表的單詞  
  20.     QListView *listView; // 完成列表  
  21.     QStringListModel *model; // 完成列表的model  
  22. };  
  23. #endif // COMPLETELINEEDIT_H  
  24.  
  25. CompleteLineEdit.cpp  
  26.  
  27. #include "CompleteLineEdit.h"  
  28. #include <QKeyEvent> 
  29. #include <QtGui/QListView> 
  30. #include <QtGui/QStringListModel> 
  31. #include <QDebug> 
  32. CompleteLineEdit::CompleteLineEdit(QStringList words, QWidget *parent)  
  33.     : QLineEdit(parent), words(words) {  
  34.     listView = new QListView(this);  
  35.     model = new QStringListModel(this);  
  36.     listView->setWindowFlags(Qt::ToolTip);  
  37.     connect(this, SIGNAL(textChanged(const QString &)), this, SLOT(setCompleter(const QString &)));  
  38.     connect(listView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(completeText(const QModelIndex &)));  
  39. }  
  40.  
  41. void CompleteLineEdit::focusOutEvent(QFocusEvent *e) {  
  42.     //listView->hide();  
  43. }  
  44.  
  45. void CompleteLineEdit::keyPressEvent(QKeyEvent *e) {  
  46.     if (!listView->isHidden()) {  
  47.         int key = e->key();  
  48.         int count = listView->model()->rowCount();  
  49.         QModelIndex currentIndex = listView->currentIndex();  
  50.         if (Qt::Key_Down == key) {  
  51.             // 按向下方向鍵時,移動光標選中下一個完成列表中的項  
  52.             int row = currentIndex.row() + 1;  
  53.             if (row >= count) {  
  54.                 row = 0;  
  55.             }  
  56.             QModelIndex index = listView->model()->index(row, 0);  
  57.             listView->setCurrentIndex(index);  
  58.         } else if (Qt::Key_Up == key) {  
  59.             // 按向下方向鍵時,移動光標選中上一個完成列表中的項  
  60.             int row = currentIndex.row() - 1;  
  61.             if (row < 0) {  
  62.                 row = count - 1;  
  63.             }  
  64.             QModelIndex index = listView->model()->index(row, 0);  
  65.             listView->setCurrentIndex(index);  
  66.         } else if (Qt::Key_Escape == key) {  
  67.             // 按下Esc鍵時,隱藏完成列表  
  68.             listView->hide();  
  69.         } else if (Qt::Key_Enter == key || Qt::Key_Return == key) {  
  70.             // 按下回車鍵時,使用完成列表中選中的項,并隱藏完成列表  
  71.             if (currentIndex.isValid()) {  
  72.                 QString text = listView->currentIndex().data().toString();  
  73.                 setText(text);  
  74.             }  
  75.             listView->hide();  
  76.         } else {  
  77.            // 其他情況,隱藏完成列表,并使用QLineEdit的鍵盤按下事件  
  78.             listView->hide();  
  79.             QLineEdit::keyPressEvent(e);  
  80.         }  
  81.     } else {  
  82.         QLineEdit::keyPressEvent(e);  
  83.     }  
  84. }  
  85.  
  86. void CompleteLineEdit::setCompleter(const QString &text) {  
  87.     if (text.isEmpty()) {  
  88.         listView->hide();  
  89.         return;  
  90.     }  
  91.     if ((text.length() > 1) && (!listView->isHidden())) {  
  92.         return;  
  93.     }  
  94.     // 如果完整的完成列表中的某個單詞包含輸入的文本,則加入要顯示的完成列表串中  
  95.     QStringList sl;  
  96.     foreach(QString word, words) {  
  97.         if (word.contains(text)) {  
  98.             sl << word;  
  99.         }  
  100.     }  
  101.     model->setStringList(sl);  
  102.     listView->setModel(model);  
  103.     if (model->rowCount() == 0) {  
  104.         return;  
  105.     }  
  106.     // Position the text edit  
  107.     listView->setMinimumWidth(width());  
  108.     listView->setMaximumWidth(width());  
  109.     QPoint p(0, height());  
  110.     int x = mapToGlobal(p).x();  
  111.     int y = mapToGlobal(p).y() + 1;  
  112.     listView->move(x, y);  
  113.     listView->show();  
  114. }  
  115.  
  116. void CompleteLineEdit::completeText(const QModelIndex &index) {  
  117.     QString text = index.data().toString();  
  118.     setText(text);  
  119.     listView->hide();  
  120. }  
  121.  
  122.  
  123. main.cpp  
  124.  
  125. #include <QtGui/QApplication> 
  126. #include "CompleteLineEdit.h"  
  127. #include <QtGui> 
  128. #include <QCompleter> 
  129. #include <QStringList> 
  130. int main(int argc, char *argv[]) {  
  131.     QApplication a(argc, argv);  
  132.     QStringList sl = QStringList() << "Biao" << "Bin" << "Huang" << "Hua" << "Hello" << "BinBin" << "Hallo";  
  133.     QWidget widgetw;  
  134.     CompleteLineEdit * editnew CompleteLineEdit(sl);  
  135.     QPushButton *button = new QPushButton("Button");  
  136.     QHBoxLayout *layout = new QHBoxLayout();  
  137.     layout->addWidget(edit);  
  138.     layout->addWidget(button);  
  139.     widgetw.setLayout(layout);  
  140.     widgetw.show();  
  141.     CompleteLineEdit e(sl);  
  142.     e.show();  
  143.     return a.exec();  

小結:Qt 自動完成LineEdit的內容介紹介紹完了,效果是不是很滿意,希望本文對你有所幫助。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-24 10:05:51

QT 對象 父對象

2011-06-28 15:01:01

Qt PIMPL

2011-06-20 17:33:58

Qt MeegoTouch Maemo

2011-06-23 14:05:32

Qt 事件機制

2021-06-22 09:07:30

QtApple Silic iOS端口

2011-06-24 14:34:17

Qt 小票 打印

2011-06-20 14:27:57

Qt Embedded

2011-06-14 11:48:38

Webkit QT

2011-04-02 09:17:38

2011-06-30 14:34:17

QT Tablewidge QTableWidg

2011-06-24 15:30:22

QT 皮膚 QSS

2011-07-04 16:12:00

QT QWidget

2011-06-24 10:54:34

Qt Mysql

2011-07-04 17:18:23

Qt SQLite 數據庫

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-28 16:18:24

Qt QObject

2011-06-17 09:58:26

Qt Chapter QObject

2009-07-16 09:09:36

ibatis自動代碼

2012-04-27 10:00:43

jQuery插件

2011-06-30 09:46:01

QT 顯示視頻 linux
點贊
收藏

51CTO技術棧公眾號

91久久一区二区| 亚州成人av在线| 欧美三级资源在线| 午夜在线成人av| 亚洲女人****多毛耸耸8| 国产午夜精品在线观看| www.欧美.com| 懂色av一区二区夜夜嗨| 久久丁香综合五月国产三级网站| 免费在线观看成人av| 欧洲亚洲精品| 亚洲香肠在线观看| 久久你懂得1024| 色综合久久久| 色婷婷综合久久久中字幕精品久久 | 2021av在线| 免费人成在线观看网站| 最新在线你懂的| 中文av在线播放| 在线激情av| 青青免费在线视频| 黄色片在线免费观看| 精品亚洲综合| 1pondo在线播放免费| 成人毛片高清视频观看| 久久电影网站中文字幕 | 精品一区二区三| 美女亚洲一区| 国产成人1区| 国产精品三级| 99久久夜色精品国产亚洲96| 中文字幕av亚洲精品一部二部| 中文字幕亚洲精品乱码| 欧美午夜不卡| 国产精品视区| 蜜桃一区二区三区在线观看| 狠狠色狠狠色合久久伊人| 国产福利视频一区二区三区| 99久久国产免费看| 久久无码av三级| 国产精品成人免费精品自在线观看| 中文字幕亚洲不卡| 午夜精品福利视频网站| 欧美伊人精品成人久久综合97| 日韩欧美一二区| 亚洲午夜av久久乱码| 美日韩丰满少妇在线观看| 欧美一区二区三区四区在线| 91免费国产视频| 欧美 日韩 国产在线| 中文字幕av日韩精品| 草草久久久无码国产专区| wwwav91| 日本成人一区| 97caopron在线视频| 色天使综合视频| 你懂的在线观看一区二区| 亚洲国产成人精品女人| 亚久久调教视频| 成人国产精品免费观看视频| 亚洲欧洲成人av每日更新| 在线一区二区视频| 亚洲精品国产精品乱码不99按摩 | 在线播放成人| 国产精品欧美在线观看| 狠狠入ady亚洲精品经典电影| 日韩电影免费一区| 99精品久久久久久| 一区二区三区欧美激情| 7777精品伊人久久久大香线蕉| 精品一区二区电影| 欧美黑人xxxx| 亚洲xxxxx性| 吴梦梦av在线| 成人三级av| 九色porny丨首页在线| 韩国美女久久| 台湾佬综合网| 国产美女诱惑一区二区| 成人免费三级在线| 亚洲国产成人va在线观看天堂| 日韩欧美一二三四区| 欧美老少配视频| av一区二区三区免费| 国产激情片在线观看| 免费一级淫片| 在线观看av免费| 北条麻妃一区二区三区在线观看| 欧美1级日本1级| 粉嫩av一区二区三区| 香蕉影视欧美成人| 亚洲欧美一区二区三区久久| 欧美一级大片在线观看| 欧美一卡2卡3卡4卡无卡免费观看水多多| 国产日韩av网站| 欧美中文在线| 偷拍自拍在线看| 成人羞羞网站入口| 国产尤物一区二区在线| 亚洲观看高清完整版在线观看| 日韩精品欧美国产精品忘忧草| 日本久久久久久| 在线观看成人av电影| 日日躁夜夜躁人人揉av五月天| а√天堂8资源中文在线| 首页亚洲中字| 久久97超碰色| 午夜精品福利一区二区蜜股av| 亚洲性日韩精品一区二区| 91精品免费看| 日本一道本久久| 在线观看a视频| 美日韩黄色大片| 韩国欧美国产一区| 黑人极品videos精品欧美裸| 精品国产拍在线观看| 精品国产乱码久久久久久88av| 成人www视频网站免费观看| 91豆花视频在线播放| 欧美丰满日韩| 91麻豆精品秘密| 91精品国产91久久久久久最新毛片 | av网址在线看| 狠狠色狠狠色综合婷婷tag| 国产精品一区在线观看你懂的| 欧美日韩精品在线观看| 日韩一区二区欧美| 精品毛片久久久久久| wwwcom羞羞网站| 欧美性xxx| 影音国产精品| 亚洲激情男女视频| 在线看福利67194| 精品网站在线看| 日本中文视频| 成人黄色91| 老司机午夜精品| 日本韩国欧美在线| 国内精品小视频在线观看| 中文精品一区二区三区| 国产小视频在线| 神马日本精品| 不卡av电影在线播放| 精品捆绑美女sm三区| 亚洲中国色老太| 99视频入口| 国产在线视频欧美一区| 男男视频亚洲欧美| 欧美主播一区二区三区美女| 欧美专区第一页| 国产又黄又大又粗视频| 在线看片福利| 久久激情中文| 欧美中文字幕一区二区三区| 国产精品夫妻激情| 99视频在线免费| 999国产精品亚洲77777| 久久精品国产一区二区三 | 国产一区二区在线观| 精品一区二区三区香蕉蜜桃| 欧美撒尿777hd撒尿| 国产精品偷伦视频免费观看国产| 日韩精品一区二区三区色欲av| 在线观看欧美日韩电影| 久久国产高清| 欧美日本视频在线| caoporen国产精品| 免费观看v片在线观看| 香蕉久久精品| 国产欧美一区二区精品性色超碰| 最近的2019中文字幕免费一页| 欧美日韩一级在线| 爱看av在线入口| 狂野欧美性猛交xxxx巴西| 欧美日韩久久久久久| 亚洲综合中文字幕68页| 在线国产视频| 日本欧美肥老太交大片| 1000精品久久久久久久久| 久久免费视频网| 亚洲xxxx2d动漫1| 日韩精品视频中文字幕| 91丨九色丨尤物| 操人视频在线观看欧美| 国产乱子伦农村叉叉叉| 国产成人毛片| 99在线精品免费| 在线视频国产日韩| 久久久久久久久久久99| 欧美jizz18| 97久久精品人人做人人爽| 久久国内精品一国内精品| 欧美一级欧美一级| 成人免费黄色| 99精品热视频| 欧美激情一级二级| 激情亚洲综合网| 精品理论电影| 精品国产91久久久久久| 5g国产欧美日韩视频|