自定义QCompleter,直接绑定QLineEdit,可默认选中,自动根据内容行数自动缩小高度

本文介绍了一种自定义的QCompleter实现,它可以直接绑定到QLineEdit,支持默认选中、自动调整高度以适应内容行数,并提供设置最高显示行数、自动停靠等功能。代码适用于VS2019+Qt6.5.0环境,作者分享了头文件和cpp文件的详细代码,并欢迎指教。

自定义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::CaseSensitive或Qt::CaseInsensitive
    //************************************
    void setCaseSensitive(Qt::CaseSensitivity sensitive = Qt::CaseSensitive);

    //************************************
    // 方法:    QMyCompleterListView::getCaseSensitive
    // 权限:    public 
    // 返回类型:   Qt::CaseSensitivity
    // 修饰:     const
    // 功能: 返回是否区分大小写,值Qt::CaseSensitive或Qt::CaseInsensitive
    //************************************
    Qt::CaseSensitivity getCaseSensitive() const {

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值