博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt之自定义QLineEdit右键菜单
阅读量:6819 次
发布时间:2019-06-26

本文共 1852 字,大约阅读时间需要 6 分钟。

一、QLineEdit说明

    QLineEdit是单行文本框,不同于QTextEdit,他只能显示一行文本,通常可以用作用户名、密码和搜索框等。它还提供了一些列的信号和槽,方便我们使用,有兴趣的小伙伴可以直接去看帮助文档,我在这里就不多废话了。但是呢,我在这里却要单独的说几个接口,因为他们很容易被人忽略,但是却又是一个很好用、可以经常用到的功能。

  • (QAction *action, ActionPosition position):可以在编辑框的开始或者末尾添加一个action,方便我们操作,一个完美的搜索框顿时出现。
  • (EchoMode):文本显示模式,通过这个接口可以设置成为密码框,其中的参数意思一次为:正常、什么都不显示、密码、刚输入时显示字符紧接着变成密码状态
  • (QCompleter *c):看这个单词的意思:完成。顾名思义这个借口可以设置文编辑框编辑时自动补齐的功能,类似于百度输入框的自动提示功能,如果想要了解细节功能请自行百度,或者移步
  • (int start, int length):设置是否能选中文本
  • (const QValidator *v):内容验证器

图1 addAction使用截图

    如图1所示,是addAction使用截图,右侧按钮图标是我使用style()->standardPixmap(QStyle::SP_TitleBarMinButton)添加的,

二、右键菜单定制

    本文描述的3种右键菜单定制,也同样适用于其他继承自QWidget的类。

首先我们看下图2所示,这是qt帮助文档中的一个枚举,这个枚举对于制作右键菜单有至关重要的作用,相信大多数的小伙伴肯定都见过,也都明白是什么意思。

图2 ContextMenuPolicy枚举

其实qt的命名还是比较合理的,从英文单词上我们大概就能知道这个宏的作用,下面我来一次说下这个几个宏的含义。1、没有右键菜单;2、组织右键菜单弹出,不同于第一个,该宏还阻止事件传递给父窗口;3、缺省的值,右键菜单在窗口类的contextMenuEvent函数中处理;4、使用窗口的action来弹出菜单,这个对于table和tree来说比较方便;5、右键事件在customContextMenuRequested对应的槽函数中实现,当然了槽需要我们自己写。

方法1:

实现customContextMenuRequested信号的接口,并调用setContextMenuPolicy设置Qt::CustomContextMenu参数,使用connect链接,具体示例我就不写了。

方法2:

设置contextMenuPolicy为Qt::DefaultContextMenu,这个也是默认值,然后实现QWidget类的contextMenuEvent接口,示例代码如下:

1   void MyTextEdit::contextMenuEvent(QContextMenuEvent *event)2   {3       QMenu *menu = createStandardContextMenu();//默认的标准右键菜单,如果不需要刻意完全自己实现4       menu->addAction(tr("My Menu Item"));5       //...6       menu->exec(event->globalPos());7       delete menu;8   }

方法3:

重写父类的mousePressEvent函数,处理鼠标右键事件,示例代码类似于:

1 void DragList::mousePressEvent(QMouseEvent *event)2 {3     if (event->button() == Qt::LeftButton)4     {5         startPos = event->pos();6         dragItem = itemAt(event->pos());7     }8     QListWidget::mousePressEvent(event);9 }

上面的代码我只为了说明问题,没有任何意义。

看到这儿了,基本的右键菜单定制我就差不多描述完了,方法1和方法2都是使用传统的方式,方法3有些取巧。

三、相关文章

 

转载于:https://www.cnblogs.com/swarmbees/p/6044361.html

你可能感兴趣的文章
构建静态页面 之 [ 列表 ]
查看>>
函数、函数表达式、作用域、闭包
查看>>
Android 系统开发_技术细节篇 -- 快速点击导致打开两个重复的 Activity
查看>>
三十分钟成为 Contributor | 为 TiKV 添加 built-in 函数
查看>>
webpack4 系列教程: 前言
查看>>
PHP协程
查看>>
区块链技术阅读列表
查看>>
重要通知:7月31日前尽快升级您的Forge应用程序到TLS 1.2
查看>>
【刷算法】翻转单链表的递归和非递归方法
查看>>
阿里云AI如何助攻世界杯?视频集锦背后的技术实践
查看>>
ES6 系列之模拟实现 Symbol 类型
查看>>
小程序弹出菜单的实现
查看>>
领域驱动设计实战案例(六):订单上下文领域逻辑
查看>>
微信小程序开发搜索功能(前端+后端+数据库)
查看>>
装饰器模式(Decorator)
查看>>
网络(一)网络的分层
查看>>
作为一个前端,排序算法你有了解过吗?
查看>>
区块链学习之以太坊(七)
查看>>
vue-quasar-admin 一个包含通用权限控制的后台管理系统
查看>>
JavaScript栈内存和堆内存
查看>>