Qt--自定义搜索控件,QLineEdit带前缀图标

2023-11-11

写在前面

这里自定义一个搜索控件,通过自定义LineEdit的textChange信号,搜索指定内容,并以QCheckBox的方式显示在QListWidget中。

开发版本

Qt: 5.15.2
Qt: Creator10.0.2

编译环境:msvc2019_64bit release

效果

1

代码

自定义LineEdit,带前缀图标。

//MLineEdit.h
#ifndef MLINEEDIT_H
#define MLINEEDIT_H

#include <QLineEdit>
#include <QHBoxLayout>

class MLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    explicit MLineEdit(QWidget *parent = nullptr);

signals:

private:
    QHBoxLayout* layout;

};

#endif // MLINEEDIT_H

//MLineEdit.cpp
#include "mlineedit.h"
#include <QLabel>
#include <QDebug>

MLineEdit::MLineEdit(QWidget *parent)
    : QLineEdit{parent}
{
    layout = new QHBoxLayout(this);

    QLabel* prefixIcon = new QLabel(this);
    QPixmap pix(":/icons/search.svg");
    prefixIcon->setPixmap(pix);
    prefixIcon->setFixedSize(pix.size());

    layout->addWidget(prefixIcon);
    layout->setContentsMargins(1, 1, 1, 1);
    layout->addStretch();
    layout->setDirection(QBoxLayout::LeftToRight);

    qDebug() << font();

    setFont(QFont("SimSun", 15));

    setTextMargins(prefixIcon->width(), 1, 1, 1);

    QString qss = QString("QLineEdit{border:1px solid gray;border-radius:10px;}");
    setStyleSheet(qss);
}

应用实现:

//MyWidgets.h
#ifndef MYWIDGETS_H
#define MYWIDGETS_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWidgets; }
QT_END_NAMESPACE

class MyWidgets : public QWidget
{
    Q_OBJECT

public:
    MyWidgets(QWidget *parent = nullptr);
    ~MyWidgets();

public slots:
    void textChangeSlot(const QString& text);

private:
    Ui::MyWidgets *ui;

    QStringList qlCheck;
};
#endif // MYWIDGETS_H

//MyWidgets.cpp
#include "mywidgets.h"
#include "ui_mywidgets.h"

#include <QPushButton>
#include <QIcon>
#include <QCheckBox>
#include <QDebug>
#include <QListWidgetItem>
#include "mlineedit.h"

MyWidgets::MyWidgets(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidgets)
{
    ui->setupUi(this);
    
    qlCheck << tr("whatsApp") << tr("weChat") << tr("QQ") << tr("Telegram") << tr("twitter");
    connect(ui->lineEdit, &QLineEdit::textChanged, this, &MyWidgets::textChangeSlot);
}

MyWidgets::~MyWidgets()
{
    delete ui;
}

void MyWidgets::textChangeSlot(const QString& text)
{
    QString qsInput = ui->lineEdit->text();

    qDebug() << qsInput;

    ui->listWidget->clear();

    if (qsInput.isEmpty())
    {
        return;
    }

    for (QString qs : qlCheck)
    {
        if (qs.contains(qsInput, Qt::CaseInsensitive))
        {
            QCheckBox* checkBox = new QCheckBox(this);
            checkBox->setText(qs);

            QListWidgetItem* listItem = new QListWidgetItem();
            ui->listWidget->addItem(listItem);
            ui->listWidget->setItemWidget(listItem, checkBox);
        }
    }
}

ui布局及完整代码可见github仓库:https://github.com/SNAKEpg12138/SearchWidget

总结

使用样式表实现带前缀图标的LineEdit,并通过一个简单的搜索控件应用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt--自定义搜索控件,QLineEdit带前缀图标 的相关文章

  • 右键单击 QPushButton 上的 contextMenu

    对于我的应用程序 我在 Qt Designer 中创建了一个 GUI 并将其转换为 python 2 6 代码 关于一些QPushButton 与设计器创建 我想添加右键单击上下文菜单 菜单选项取决于应用程序状态 如何实现这样的上下文菜单
  • 通过CMake实现Qt项目

    我正在尝试通过 Cmake 构建并运行非常简单且基本的 Qt 示例 删除 pro 文件 以下是Qt项目的代码 自动生成的Qt项目的目录结构为 Cmake my project name headers mainwindow h source
  • 我应该使用 QCoreApplication::processEvents() 还是 QApplication::processEvents()?

    我有一个从两者调用的方法QThreads和主线程 这个方法有时可能需要很长时间才能在循环中进行计算 所以我把QCoreApplication processEvents 这可以防止 GUI 冻结 在某个时刻我已经改变了QCoreApplic
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • Qt 人工鼠标点击无法正常工作

    小玩具应用程序可以在这里找到 http gist github com 517445 http gist github com 517445 我正在尝试将人工鼠标事件发送到小部件 我使用QApplication sendEvent为此 接下
  • Qt qDebug() 在 Windows shell 中不起作用

    我正在使用一个qDebug Qt 框架的printf屏幕上有东西 当我从 Qt Creator 运行应用程序时它工作得很好 但是当我尝试从 Windows 执行它时cmd它什么也没显示 为什么会发生这种情况 你必须添加 CONFIG con
  • 在 QtCreator 中使用 .pro 和 .pri 正确(树)显示 Qt 项目

    是否可以使用项目包含文件 pri 显示不止一个额外级别 例如如果 pro文件包括 pri文件包含两个 pri files pro pri pri pri 在 QtCreator 项目 中显示具有误导性 pro pri pri pri 它根本
  • new 运算符(以及 malloc)无法分配约 450 MB 的内存 [重复]

    这个问题在这里已经有答案了 我正在开发一个程序 该程序在内存中存储大约 2 2 亿个短值的数组 该数据块的分配方式如下 short arrayName new short SIZE OF ARRAY 然后将文件的内容读入内存 在团队中的另一
  • QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停其操作?

    从多个线程调用以下附加函数 我不希望数据重写附加 因为计数器尚未增加 除了当前使用 Append 的线程之外 这是否会挂起所有进入的线程 或者其他线程会继续运行而不追加数据吗 互斥锁是否需要是 静态 的 或者每个实例都知道要暂停操作吗 如果
  • 如何让小部件在上下文菜单出现时接收鼠标释放事件

    在Ubuntu20 04上 当上下文菜单出现时 我无法让小部件接收鼠标释放事件 而Windows可以接收 我的pyqt版本是5 15 2 我考虑过手动发送鼠标释放事件 但我不知道当上下文菜单出现时哪些系统会收到鼠标释放事件 这样做可能会导致
  • 获取 QListView 中所有可见项目的简单方法

    我正在尝试使用 Qt Framework 开发一个图像库应用程序 应用程序从所选文件夹加载所有图像 并使用 QListView 控件显示这些图像 但现在我想通过仅加载用户可见的图像来减少内存消耗 由于没有直接函数来获取视图中的所有可见项目
  • 清除pyqt中布局中的所有小部件

    有没有办法清除 删除 布局中的所有小部件 self plot layout QtGui QGridLayout self plot layout setGeometry QtCore QRect 200 200 200 200 self r
  • 如何在Qt 5中的paintEvent上使用mouseMoveEvent?

    我是 Qt 和 c 的新手 所以我遇到了一些困难 我正在尝试创建一个小部件 它可以获取 mouseMoveEvent 位置并在鼠标位置的像素图上绘制椭圆 下面你可以看到代码 include myimage h include
  • 如何去除QWizard中的水平线?

    我正在研究一个样式表QWizard我想删除按钮上方的水平线 我尝试递归浏览所有小部件并将其边框设置为无 但似乎没有任何小部件具有此边框 这是我的代码 可以找到完整的可构建示例here https gist github com ardeid
  • Mac OS X 上的 Qt 字体系列和样式

    我有一个基于 Qt PyQt 的 GUI 应用程序 在 Mac OS X 和其他平台 上运行 它允许用户选择字体并具有粗体和斜体选项的复选框 在更新到新的基于 Cocoa 的 Qt 时 用户发现QFontComboBox不再显示不同的字体样
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • 是否有 Qt 小部件可以浏览应用程序中小部件的层次结构(类似于 Spy++)?

    我们有一个具有复杂的小部件层次结构的应用程序 我希望能够以与 Spy 类似的方式浏览此层次结构 查看和编辑属性 例如大小 如果有一个小部件可以显示此信息 则它不需要在外部应用程序中运行 那么问题来了 这样的神兽存在吗 您可以使用Gammar
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我

随机推荐

  • apt-get update不成功的解决方法

    1 apt get update的时候不成功 如下图所示 解决方法 修改DNS 文件是 etc resolve conf 添加nameserver 8 8 8 8 2 添加后再次运行又显示错误 和锁相关 如下图所示 解决方法 将apt ge
  • npm -v 报错:Error: EPERM: operation not permitted, mkdir 'C:\soft\nodejs'

    npm v 报错 Error EPERM operation not permitted mkdir C soft nodejs 起因 原本安装node在C盘soft文件夹下 按nodejs安装和配置安装后 因为公司电脑的各种权限问题 无法
  • SpringBoot开发日记(六)——如何部署SpringBoot项目

    一 jar包方式启动 使用spring boot内置的tomcat运行 不需要外置tomcat 1 打jar包 打包完成后 在Building jar后面就是打包完成后jar存放的位置 然后jar包所在的位置进入cmd 或者把jar放到自己
  • java.sql.SQLException: Connection is read-only 问题产生的原因及解决办法

    org springframework dao TransientDataAccessResourceException Error updating database Cause java sql SQLException Connect
  • 搞懂 Spark 系列之深入理解Spark内存管理

    Spark 内存概述 众所周知 Spark是比Hadoop快近百倍 理想条件下 如下图所示 的大数据计算引擎 而这其中最主要突出的地方就是Spark是基于内存的计算引擎 相比于Hadoop来说 减少了MR过程中的磁盘IO 通过将map端计算
  • 黑马程序员mysql高级_[杭州校区][技术笔记] MySql高级查询

    本帖最后由 小江哥 于 2019 12 24 15 16 编辑 高级查询 高级查询的格式 select 聚合函数 from 表名 where group by having order by limit order by 给查询结果排序 语
  • 【@FeignClient】

    FeignClient 在做springcloud分布式开发过程中会有需要访问其他服务的情况 每一个服务之间都是以接口的方式访问的 那么就需要使用到 FeignClient 来访问其他服务的接口 FeignClient 实现的是声明式的 模
  • 抽3分钟检验一下,自动化测试重运行,我会了么?

    测试失败时会发生什么 如果有人手动运行测试 那么他们会暂停并了解更多信息 但是 当自动测试失败时 其余部分可能会继续运行 在套件完成之前 你是没有办法看到测试报告的 并且自动化程序不会在故障时执行任何额外的操作尝试找出问题 当剩下的用例全部
  • toLua学习笔记十——lua调用C#的类

    toLua访问C 的类 固定套路 命名空间 类名 比如GameObject 在lua中调用就是UnityEngine GameObject 1 通过C 实例化一个对象 因为lua中没有new 所以我们直接使用类名 来实例化对象 local
  • (附源码)基于Android的订餐app 毕业设计 190711

    摘 要 随着现在网络的快速发展 网络的应用在各行各业当中它很快融入到了许多学校的眼球之中 他们利用网络来做这个职位推荐的网站 随之就产生了 订餐app 这样就让用户订餐app更加方便简单 对于本订餐app的设计来说 它主要是采用后台采用ja
  • python经典数据结构与算法之双指针 碰撞指针 快慢指针

    双指针之碰撞指针 也就是两个指针 分别指向头和尾 向中间靠拢 直到碰到一起 程序终止 移动过程中按照一定的规则进行移动 python中一般用List或字符串做数据 比如以下程序 来源Github 地址最下 用来解决 Leetcode 167
  • PTA 6-1 简单输出整数

    6 1 简单输出整数 10 分 本题要求实现一个函数 对给定的正整数N 打印从1到N的全部正整数 函数接口定义 void PrintN int N 其中N是用户传入的参数 该函数必须将从1到N的全部正整数顺序打印出来 每个数字占1行 裁判测
  • LeetCode260.只出现一次的数字 III(位运算)

    LeetCode260 只出现一次的数字 III 位运算 题目传送门 一 题目解析 给定一个整数数组 nums 其中恰好有两个元素只出现一次 其余所有元素均出现两次 找出只出现一次的那两个元素 你可以按 任意顺序 返回答案 进阶 你的算法应
  • C中的Flout和0的比较

    很清楚记得大学里的某一天 老师让我们写出float x与 零值 比较的if语句 我兴冲冲地2分钟写完上去演示 结果不知道这是个 套 当时只知道不能直接用float类型的值与0进行 或 比较 但不知道该具体怎么写这个if语句 看过答案才知道
  • 遇到Uncaught SyntaxError: missing ) after argument list 解决小思路

    vscode运行前端代码程序没有报错 控制台报错 SyntaxError missing after argument list 意思是有语法错误 仔细检查是es6语法低版本浏览器不支持导致的 升级最新版chrome浏览器 就解决了 这只是
  • 基于C++的水灵VTK8学习笔记3(VTK图形处理)

    VTK资料分享 张晓东的 VTK图形图像开发进阶 全套资料 包含书籍电子版 配套每章节所有源码 实现效果图和工程配置文件 水灵VTK学习全套资料 包含全部视频 PPT 源码和每个项目对应的工程配置文件CmakeLists txt 水灵VT视
  • Element中el-select下拉框无法回显

    使用elementUI时 在页面编辑时 下拉框回显数据有问题 这里主题类型默认选中类型为1的主题 并显示主题类型
  • 将一个有序的链表转化为一个二叉搜索树

    题目 Given a singly linked list where elements are sorted in ascending order convert it to a height balanced BST 解题思路 解决这道
  • 解决SpringBoot jar包中的文件读取问题

    前言 SpringBoot微服务已成为业界主流 从开发到部署都非常省时省力 但是最近小明开发时遇到一个问题 在代码中读取资源文件 比如word文档 导出模版等 本地开发时可以正常读取 但是 当我们打成jar包发布到服务器后 再次执行程序时就
  • Qt--自定义搜索控件,QLineEdit带前缀图标

    写在前面 这里自定义一个搜索控件 通过自定义LineEdit的textChange信号 搜索指定内容 并以QCheckBox的方式显示在QListWidget中 开发版本 Qt 5 15 2 Qt Creator10 0 2 编译环境 ms