简述
许多人在使用Qt的时候,特别是在准备做一个像登录框一样的界面的时候。在账号栏我们多见到像下图一样的情况。
本文就重点关于账号栏是实现进行讨论。大家一般第一印象就感觉应该用QComBoBox实现。但仅仅只使用QComBoBox是无法达到下图的效果的。
实现
在考虑如何实现的时候,我们要自定义一个组件来代替下拉框中的QComBoBox原生组件
下面看一下我们的例子,在这个例子我们会实现一个QLabel和一个QPushButton的横向布局并重新实现一些事件。
#ifndef LOGINWINDOWACCOUNTITEM_H
#define LOGINWINDOWACCOUNTITEM_H
//这是一个用于自定义QComboBox的代理控件
//主要会包含一个QLabel和一个QPushButton
#include <QWidget>
#include <QMouseEvent>
class QLabel;
class QPushButton;
class LoginWindowAccountItem : public QWidget
{
Q_OBJECT
public:
LoginWindowAccountItem(QWidget *parent=0);
~LoginWindowAccountItem();
//set - get accountName
QString getAccountName() const;
void setAccountName(const QString&);
signals:
void sgn_removeAccount(QString);//移除这个账户,QString为当前accountName的值
void sgn_showAccount(QString);//展示我们刚才所选的这个Item
public slots:
void slt_removeAccountItem();//删除账户槽
protected:
//重写鼠标按下与释放,以此来实现点击item进行当前item的替换
void mousePressEvent(QMouseEvent *);
void mouseReleaseEven