- 浏览: 236260 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wahahachuang8:
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的 ...
服务器推送技术 java -
mahuanjian:
[flash=200,200][/flash]
服务器推送技术 java -
wenjundiandian:
下面有网页编辑器的话还是会被隐藏.
ext中消息框、提示框、确认框显示在最前面的解决方法 -
天塔上的猫:
/**
* JAVA常见的权限控制算法的实现
*
* ...
JAVA常见的权限控制算法的实现
QLineEdit 自动完成
- 博客分类:
- QT
#ifndef COMPLETELINEEDIT_H
#define COMPLETELINEEDIT_H
#include <QtGui/QLineEdit>
#include <QStringList>
class QListView;
class QStringListModel;
class QModelIndex;
class CompleteLineEdit : public QLineEdit {
Q_OBJECT
public:
CompleteLineEdit(QStringList words, QWidget *parent = 0);
public slots:
void setCompleter(const QString &text); // 动态的显示完成列表
void completeText(const QModelIndex &index); // 点击完成列表中的项,使用此项自动完成输入的单词
protected:
virtual void keyPressEvent(QKeyEvent *e);
virtual void focusOutEvent(QFocusEvent *e);
private:
QStringList words; // 整个完成列表的单词
QListView *listView; // 完成列表
QStringListModel *model; // 完成列表的model
};
#endif // COMPLETELINEEDIT_H
#include "CompleteLineEdit.h"
#include <QKeyEvent>
#include <QtGui/QListView>
#include <QtGui/QStringListModel>
#include <QDebug>
CompleteLineEdit::CompleteLineEdit(QStringList words, QWidget *parent)
: QLineEdit(parent), words(words) {
listView = new QListView(this);
model = new QStringListModel(this);
listView->setWindowFlags(Qt::ToolTip);
connect(this, SIGNAL(textChanged(const QString &)), this, SLOT(setCompleter(const QString &)));
connect(listView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(completeText(const QModelIndex &)));
}
void CompleteLineEdit::focusOutEvent(QFocusEvent *e) {
//listView->hide();
}
void CompleteLineEdit::keyPressEvent(QKeyEvent *e) {
if (!listView->isHidden()) {
int key = e->key();
int count = listView->model()->rowCount();
QModelIndex currentIndex = listView->currentIndex();
if (Qt::Key_Down == key) {
// 按向下方向键时,移动光标选中下一个完成列表中的项
int row = currentIndex.row() + 1;
if (row >= count) {
row = 0;
}
QModelIndex index = listView->model()->index(row, 0);
listView->setCurrentIndex(index);
} else if (Qt::Key_Up == key) {
// 按向下方向键时,移动光标选中上一个完成列表中的项
int row = currentIndex.row() - 1;
if (row < 0) {
row = count - 1;
}
QModelIndex index = listView->model()->index(row, 0);
listView->setCurrentIndex(index);
} else if (Qt::Key_Escape == key) {
// 按下Esc键时,隐藏完成列表
listView->hide();
} else if (Qt::Key_Enter == key || Qt::Key_Return == key) {
// 按下回车键时,使用完成列表中选中的项,并隐藏完成列表
if (currentIndex.isValid()) {
QString text = listView->currentIndex().data().toString();
setText(text);
}
listView->hide();
} else {
// 其他情况,隐藏完成列表,并使用QLineEdit的键盘按下事件
listView->hide();
QLineEdit::keyPressEvent(e);
}
} else {
QLineEdit::keyPressEvent(e);
}
}
void CompleteLineEdit::setCompleter(const QString &text) {
if (text.isEmpty()) {
listView->hide();
return;
}
if ((text.length() > 1) && (!listView->isHidden())) {
return;
}
// 如果完整的完成列表中的某个单词包含输入的文本,则加入要显示的完成列表串中
QStringList sl;
foreach(QString word, words) {
if (word.contains(text)) {
sl << word;
}
}
model->setStringList(sl);
listView->setModel(model);
if (model->rowCount() == 0) {
return;
}
// Position the text edit
listView->setMinimumWidth(width());
listView->setMaximumWidth(width());
QPoint p(0, height());
int x = mapToGlobal(p).x();
int y = mapToGlobal(p).y() + 1;
listView->move(x, y);
listView->show();
}
void CompleteLineEdit::completeText(const QModelIndex &index) {
QString text = index.data().toString();
setText(text);
listView->hide();
}
#include <QtGui/QApplication>
#include "CompleteLineEdit.h"
#include <QtGui>
#include <QCompleter>
#include <QStringList>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QStringList sl = QStringList() << "Biao" << "Bin" << "Huang" << "Hua" << "Hello" << "BinBin" << "Hallo";
QWidget widgetw;
CompleteLineEdit * edit= new CompleteLineEdit(sl);
QPushButton *button = new QPushButton("Button");
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(edit);
layout->addWidget(button);
widgetw.setLayout(layout);
widgetw.show();
CompleteLineEdit e(sl);
e.show();
return a.exec();
}
发表评论
-
qtwebkit中js事件的正确写法。
2012-08-15 09:50 971<script language="JavaS ... -
qtwebkit截图
2012-08-13 13:29 800QSize size = m_view->page()- ... -
Qt 中一些常用类的中文说明
2012-02-22 23:39 1072作者:丁冬,华清远见嵌 ... -
输入法
2012-01-04 18:00 0http://civilnet.cn/syszux/syszu ... -
QT启动前有绿屏怎么处理
2012-01-04 09:49 1249笑看人生pual(13290889) 16:32:27QT启动 ... -
QT实现截取屏幕
2012-01-04 09:48 1192本文阐述了一个在Qtopia下截取屏幕的方法,实际上Qtopi ... -
在QT中通过摄像头动态显示图片 .
2012-01-04 09:49 1916Camgui::Camgui(QWidget *parent, ... -
脚本打包大量文件学习
2011-12-19 09:33 773TARGET_DIR=$PWDcd /list=`cat &l ... -
QT 同时支持鼠标和触摸屏
2011-12-17 12:36 1650现在 如果我要使用鼠标导入环境变量export QWS_M ... -
Qt中Qstring,char,int,QByteArray之间到转换
2011-12-17 12:31 1142各种数据类型的相互转换char * 与 const char ... -
QT Creator的style sheet的几种用法(QT Creator)(StyleSheet)(样式)(QT4.7)(用法)
2011-12-10 20:16 1851摘要: QT Create中,对butt ... -
QT学习笔记(QT4.7)(笔记)
2011-12-10 20:16 1884摘要: 由于 ... -
QT 4.7支持中文(QT4.7)(中文)(makeqpf)
2011-12-10 20:16 2030摘要: QT4.7.0在移植到开发板上的 ... -
QImage变暗
2011-12-16 14:50 1078_image = QPixmap::grabWindow ... -
Qt/Embedded动态旋转屏幕
2011-12-10 20:16 1099距离上次发博文已经有 ... -
如何在QT下执行shell或外部程序
2011-12-10 20:17 1987摘要: 通常,我们运行shell程序都是在终端里进行的, ... -
linux嵌入式qt的屏幕旋转与字体大小问题
2011-12-16 14:50 2379【1、与qt程序显示文字大小有关的两项】 export ... -
改变QMessageBox的大小
2011-12-16 14:50 1005创建一个QMessageBox: QMessageBox m ... -
QT坐标变换
2011-12-09 09:18 1039------------------------------ ... -
QT画对话框窗口圆角
2011-12-09 09:16 1544QPainterPath path; QRectF rec ...
相关推荐
完成基本功能后,可以考虑优化用户体验,如增加输入验证的反馈提示、设置输入限制等。 以上就是关于使用QLineEdit创建简单登录界面涉及的主要知识点。通过理解和实践这些概念,你可以构建出更加复杂的用户界面,为...
这样,当用户在软键盘上按下数字键时,对应的数字会自动添加到QLineEdit中。此外,还应考虑添加一个“清除”或“删除”按钮,方便用户纠正输入。 最后,别忘了处理软键盘的关闭。在某些情况下,用户可能希望通过...
3. **获取用户输入**:当用户完成输入后,我们可以使用`text()`方法获取QLineEdit中的文本内容。 ```cpp QString account = accountLineEdit->text(); QString password = passwordLineEdit->text(); ``` **构建...
`QCompleter`是Qt提供的一种用于自动完成文本输入的工具,它可以与`QLineEdit`、`QComboBox`等控件配合使用。自动补全功能通常在用户输入几个字符后,根据已有的数据集提供可能的匹配项,供用户选择,从而减少错误...
它能与任何支持QString类型的输入控件(如QLineEdit、QPlainTextEdit等)配合工作,当用户输入文本时,会根据已输入的部分自动列出匹配的候选词,方便用户选择。QCompleter的核心特性包括: 1. **模型-视图架构**:...
这可以通过`QListWidget::addItem()`和`QListWidget::takeItem()`等方法完成。 4. **性能优化**:当数据源非常大时,实时遍历可能会导致性能问题。可以考虑使用数据结构(如字典或哈希表)来存储预处理过的关键词,...
在构建搜索框时,我们通常会基于QLineEdit进行扩展,添加额外的功能,如自动完成、实时搜索过滤或清除按钮。这可以通过继承QLineEdit类并重写其关键方法来实现。 例如,我们可以创建一个新的CSearchLineEdit类,...
8. **输入完成**:`QCompleter`类可以与`QLineEdit`配合,提供自动补全功能,提高用户体验。 9. **预设文本**:通过`setPlaceholderText()`方法可以设置提示文本,当`QLineEdit`为空时显示。 10. **可读性设置**:...
总的来说,Qt 5.12.7中的QCompleter为QLineEdit提供了强大的自动补全功能,通过设置合适的模型和完成模式,可以在多种场景下提高用户的输入体验。结合提供的描述和标签,我们可以构建一个高效且用户友好的界面,使...
这个压缩包“文本框回车自动跳转.zip”显然包含了使用Qt框架编写的一个特定功能的示例项目,即当用户在文本框(QLineEdit)中按下回车键时,程序能自动进行下一步操作。下面我们将详细探讨Qt框架、QLineEdit类以及...
在编程领域,特别是使用Qt库进行开发时,`QCompleter`是一个非常重要的工具类,它为用户界面提供了自动完成的功能。这个`completer.zip`文件可能包含了一个关于如何在Qt应用程序中实现自动完成填充提示的示例或教程...
在Qt编程中,QCompleter是一个非常实用的类,它为用户提供了一种自动补全功能,常见于QLineEdit和QComboBox等控件中。这个"QCompleter_test.zip"文件包含了一个小型的示例项目,演示了如何使用QCompleter来实现文本...
这可以通过监听QLineEdit的`completer`属性来完成,它可以提供自动补全功能。创建一个`QCompleter`对象并设置其数据源,然后将其设置为QLineEdit的completer,即可实现这一功能。 ```cpp QCompleter *completer = ...
"Scribe-Text-Editor" 还支持"大括号自动完成"功能。当用户输入一对大括号的开始部分时,编辑器会自动插入结束部分,提高编码效率。这一特性可以通过监听键盘事件,结合文本光标位置和当前输入内容实现。在 Qt 中,...
`QLineEdit`是Qt中用于输入文本的控件,而`QCompleter`则用于自动完成或补全功能,常用于搜索框中提供用户友好的输入体验。 首先,我们需要创建一个`QLineEdit`实例作为搜索框的基础。通过设置`QLineEdit`的属性,...
打开Designer,创建一个新的窗体,然后从工具箱中拖动一个QPushButton(按钮)和一个QLineEdit(文本框)到窗口上。为按钮设置一个合适的文本,例如"点击我",并为其分配一个信号(如`clicked()`)。 在Qt Designer...
2. **格式化显示**:为了使IP地址更易读,我们可以在输入完成后自动将文本格式化为标准的IP格式。这可以通过重写`textChanged`信号的槽函数来完成,当输入发生变化时,自动调整文本格式。 3. **错误提示**:如果...
然后,你可以连接QLineEdit的`editingFinished()`信号到日历的`show()`槽,这样当用户完成编辑后,日历会自动弹出: ```cpp connect(lineEdit, &QLineEdit::editingFinished, calendarWidget, &QCalendarWidget::...