刚学Qt的时候,初步经历的第一个学习项目基本上都是LANQQ,初识时,不懂QSS,不懂布局,绘制界面最简单的方式成了使用designer拉满整个界面的控件,或者使用代码写了一些很蹩脚的布局。也是很羡慕别人哪些精致的界面,印象很深的是QQ登陆界面的下来列表,下面,我们简单的来介绍下怎样做到和QQ登陆界面一样的下拉列表。
先看一下效果:

没有做qss的美化,简单的实现了下功能,如果需要在显示名称的部分也需要显示头像的话,也是可以,这个在下一节自定义控件的时候再看。

简单的改造了一下上次的ListTemplate类,作为我们显示在QComboBox下拉框的载体,并自定义了msgItem。如下:

class MsgItem : public QWidget
{    Q_OBJECT//可按照下面的方法自己添加需要的功能Q_PROPERTY(QString name READ name WRITE setName DESIGNABLE true)public:explicit MsgItem(QWidget *parent = 0);~MsgItem();QString name() const;void setName(const QString& name);protected:void mousePressEvent(QMouseEvent* event) override;private slots:void on_btnDeleteClicked();signals:void signal_selected(const QString& text);void signal_delete(QWidget*);private:Ui::MsgItem *ui;};

自定义的Item中有两个信号,一个是删除,一个是选中的时候通知上层目前选中的item的字符。
这边使用了mouseEvent。选择使用这个的原因是,相对于我们使用QListWidgetItem类获取其Widget要简单很多。鼠标点击的时候直接将其需要在上层显示的数据发给上层就好。实现如下:

void MsgItem::mousePressEvent(QMouseEvent *event)
{emit signal_selected(ui->lbName->text());}

载体就显得比较简单,只有一个方法和一个信号,方法用来测试,新增一个Item,信号是item发上来选中信号时,通知上层。

class ListWidget : public QListWidget
{Q_OBJECTpublic:explicit ListWidget(QWidget *parent = 0);~ListWidget();private:void AddWidgetMsgItem();signals:void signal_selected(const QString& text);
};

新增的方法如下,这边有一个需要注意的点。QComboBox如果选择可编辑的时候,会多一个QLineEdit控件,如果我们不选择可编辑,那么只能通过setCurrentText方法来设置它需要显示的数据,但是,前提条件是:

设置的数据要在它下面的item中能够找到,否则是不会显示的

因此,当我们自定一的时候,一定要通过一写方法来设置它的itemText。

void ListWidget::AddWidgetMsgItem()
{auto pMsgItem = new MsgItem();QListWidgetItem *item = new QListWidgetItem;item->setSizeHint( QSize(360, 60));item->setText(pMsgItem->name());    //不加的会,则不会显示在界面上this->addItem(item);this->setItemWidget(item, pMsgItem);connect(pMsgItem, &MsgItem::signal_selected, this, &ListWidget::signal_selected);
//    connect(pMsgItem, &MsgItem::signal_delete, this, &ListWidget::slot_delete);
}

说了这么多,其实上面的所有东西我们以前已经使用过了,而下面的内容才是今天的重点。

首先我们自定义类ComboBox 继承自 QComboBox,(如果嫌麻烦也可以不同自定义类)然后定义一个槽函数来接收底层的List发上来的数据。要将我们上面实现的自定义的ListWidget来设置到ComboBox的下拉框中,其实是很简单的,如下:

auto list = new ListWidget;
bool br = connect(list, &ListWidget::signal_selected, this, &ComboBox::slot_seleted);
this->setModel(list->model());
this->setView(list);

是的,只有几行代码,就能够实现,由这些看来,自定义一些控件的时候并不是很难,难的是一想到要自定义控件,已经产生的哪种恐惧。。。

测试代码链接:https://gitee.com/Gqian_com/customcomponent/tree/master/combobox

QComboBox自定义(一)--类似QQ登陆界面的下拉框相关推荐

  1. 下拉框_jQuery 美化界面的下拉框

    插件简介 之前我们介绍过一款基于jQuery多级联动美化版Select下拉框,很多朋友都非常喜欢,可见经过美化过的下拉框的确可以让你的网页更为精妙.今天我们要介绍的这款美化界面下拉框也是基于jQuer ...

  2. 类似QQ登陆界面保存密码和账号下拉选择框

    本界面的效果 需要的知识 PopupWindon ListView的内部响应事件 分析 步骤 ListView PopupWindow 点击事件 用户信息存储 GSON 的用法 实施方案 情况一 情况 ...

  3. QComboBox下拉框文字如何在字体变大之后自适应高度

    一.简述 一般我们给QComboBox设置完字体之后,在显示上并没有什么问题如下图. a.正常状态 由于程序在最大化的时候,因为主窗口尺寸变大,需要整体改变所有控件的尺寸,文字的大小,所以在窗口最大化 ...

  4. 【博主推荐】html下拉框树形(附好看的登录界面)

    文章目录 [博主推荐]html下拉框树形(附好看的登录界面) 下拉框示例 下拉框代码 登录1示例 登录1代码 登录2示例 登录2代码 资源下载 [博主推荐]html下拉框树形(附好看的登录界面) [博 ...

  5. android spinner 自定义下拉,android Spinner自定义下拉框

    Spinner下拉框在android中有2种绑定方式 1.通过在string.xml中配置 array 的item 去实现(缺点:下拉框中的内容是写死的) 北京 上海 广州 深圳 在布局文件中引用后可 ...

  6. Qt 之 模仿 QQ登陆界面——功能篇(一)

    一.简述 今天是2017年第一篇技术文章,12月末事情太多,一直没来得及更新博客.今天继 Qt 之 模仿 QQ登陆界面--样式篇 这一篇 来简单地看一下对登录界面做的一些功能,主要是登录用户下拉列表和 ...

  7. Qt(三)--- 实现QQ登陆界面头像状态栏的功能

    对于QQ登陆界面,可以通过下拉菜单,实现状态的选择,在QQ的头像状态栏需要显示的信息包括:用户的头像以及登陆的状态.这里主要涉及和利用的只是是QMenu以及QAction,同时继承QLabel的类: ...

  8. java山寨qq_java图形界面之 山寨QQ登陆界面

    要山寨出QQ登陆界面,首先要对java的图形界面有一定的了解.在jdk1.4之前,图形界面所用到的所有类和接口都在javax.awt之下,在其之后就都在javax.swing里了. 关于图形界面的开发 ...

  9. C语言实现类似QQ聊天界面抖动功能

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104991863 实 ...

最新文章

  1. 自监督学习新思路!基于蒸馏损失的自监督学习算法 | CVPR 2021
  2. 2556. [NOIP2016]玩具谜题
  3. 什么是死锁?死锁如何解决
  4. WPF的ProgressBar进度条
  5. VTK:绘图之ChartMatrix
  6. 新代系统cnc怎样连接电脑_你真的了解3C产线上的运控系统吗?
  7. 安卓案例:注册用户免启动时的广告页面
  8. jmeter 配置 slave 代理压测机
  9. IDEA使用Build Artifacts进行项目打包时,发现没有可供打包的项目
  10. 计算机组装已维护的学术报告,计算机硬件组装维护的策略研究
  11. 「代码随想录」70. 爬楼梯【动态规划】详解!
  12. 系统架构图怎么画_产品架构图到底是怎么“画”出来的?
  13. C++预编译头文件 – stdafx.h
  14. nyoj 779 兰州烧饼
  15. SQL基础知识归纳总结
  16. 前端在登录时如何将用户密码加密
  17. 百度之星du熊学斐波那契I-C++实现
  18. Win10家庭版 误删winsock和winsock2注册表的解决方案
  19. 2014年6月5日 百度马上有钱邀请码 百度邀请码 邀请码
  20. Shell脚本不会写?100个经典脚本范例,拿走即用真的太绝了

热门文章

  1. conda配置python混合开发环境一站式入门【全平台】
  2. Python卸载时发生严重错误
  3. 熊猫烧香病毒技术分析及应急解决方案
  4. 【.Net码农】【淘宝API】淘宝API开发系列---阿里.聚石塔.开放平台的使用
  5. Just to myself
  6. 30家最赚钱移动互联网公司出炉
  7. 日复一日的重复性工作,想跳槽 ?
  8. Java 指令与字节码
  9. 道一时间转换工具发布
  10. pet store宠物商店数据库设计