赞
踩
自定义QCompleter,直接绑定QLineEdit,可默认选中,自动根据内容缩小窗口,能设置最高显示行数,自动停靠。里面的duplicatelist是本人的特殊用途,正常情况下是不需要,也就构造函数最后一个参数其实没什么用处。代码是在VS2019+Qt6.5.0下写的
刚刚学习Qt三个月,不太熟练,代码有很多地方要优化,请大家多多指教
不说废话了,直接上代码
下面这个是头文件
#pragma once
#include <QListView>
#include <QStringListModel>
#include <QLineEdit>
#include <QCompleter>
#include <QEvent>
#include <QKeyEvent>
#include <QApplication>
class QMyCompleterListView : public QListView {
Q_OBJECT
public:
QMyCompleterListView(QLineEdit* ledit, QStringList startstrlist = { }, QStringList duplicate = { });
~QMyCompleterListView();
//设置要过滤的字符串
void setCompleterStringList(QStringList w) { words = w; };
// 设置要从第几个字符开始显示弹窗,默认是第一位开始显示弹窗
void setStartbit(unsigned int val = 1) { startbit = val ? val : 1; };
//返回默认起始位,要从第几个字符开始显示弹窗
int getStartbit() const { return startbit; };
//设置是否默认选中第一项
//************************************
// 方法: QMyCompleterListView::setStartHighlight
// 权限: public
// 返回类型: void
// 参数: bool hightlight
// 修饰:
// 功能:设置是否默认选中第一项
//************************************
void setStartHighlight(bool hightlight = true);
//返回是否默认选中第一项
//************************************
// 方法: QMyCompleterListView::getStartHighlight
// 权限: public
// 返回类型: bool
// 修饰: const
// 功能:返回是否默认选中第一项
//************************************
bool getStartHighlight() const { return ishightlight; };
//设置模式,model = PopupCompletion,只显示相匹配的文本,UnfilteredPopupCompletion,匹配显示在前,不匹配移动最后
//************************************
// 方法: QMyCompleterListView::setCompleterMode
// 权限: public
// 返回类型: void
// 参数: QCompleter::CompletionMode model
// 修饰:
// 功能:设置显示数据的模式,值是PopupCompletion(0)或UnfilteredPopupCompletion(1)
// PopupCompletion:为只显示匹配字符串;UnfilteredPopupCompletion,显示所有,匹配的在前面。
//************************************
void setCompleterMode(QCompleter::CompletionMode model = QCompleter::PopupCompletion);
//************************************
// 方法: QMyCompleterListView::getCompleterMode
// 权限: public
// 返回类型: QCompleter
// 修饰: const
// 功能:返回显示数据的模式,值是PopupCompletion(0)或UnfilteredPopupCompletion(1)
// PopupCompletion:为只显示匹配字符串;UnfilteredPopupCompletion,显示所有,匹配的在前面。
//************************************
QCompleter::CompletionMode getCompleterMode() const { return completermode; };
//************************************
// 方法: QMyCompleterListView::setCaseSensitive
// 权限: public
// 返回类型: void
// 参数: Qt::CaseSensitivity sensitive
// 修饰:
// 功能: 设置是否区分大小写,值Qt::CaseSensitiv
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。