说起下拉框,想必大家都比较熟悉,在我们注册一些网站的时候,会出现大量的地区数据供我们选择,这个时候出现的就是下拉框列表,再比如字体选择的时候也是使用的下拉框,如图1所示。下拉框到处可见,作为一个图形库,qt也提供了QtComboBox类来供我们使用,但是有些时候简单的下拉列表已经满足不了我们的需求,如图2所示,是一个下拉表格,这个时候就需要我们自己定制一下QComboBox。
图1
图2
上边说了我们需求的变化,接下来我就讲述一下关于QComboBox定制的一些内容,本片文章我就只讲述两种常用的下拉选项控制,分别是列表和表格
一、列表的实现
首先我上一张qq的登录框,如图3所示,下拉列表里不仅仅是一个文字描述或者复选框,而是含有图片文字和关闭按钮的复杂窗口,那么这个时候简单的QComboBox是完成不了这项功能的,要做到像qq这样美观的功能是需要我们自己做一定的处理
图3
列表窗口定制步骤如下:
1、首先我们需要自定义一个窗口,上边有我们需要操作的内容,这个窗口讲会是QComboBox下拉框中的一项,我自己定义的类名为CActionContentWidget,头文件如下:
1 class CActionContentWidget : publicQWidget2 {3 Q_OBJECT4 signals:5 voidIconClicked();6 void showText(const QString &);7
8 public:9 CActionContentWidget(const QString & text, QWidget * parent =nullptr);10 ~CActionContentWidget();11
12 public:13 void SetContentText(const QString & text);//设置显示文字
14 void SetItemIcon(const QString & icon, const QString & hover);//设置图标
15
16 public:17 void SetBackgroundRole(boolhover);18
19 protected:20 virtual void enterEvent(QEvent *) Q_DECL_OVERRIDE;//暂时没用
21 virtual void leaveEvent(QEvent *) Q_DECL_OVERRIDE;//暂时没用
22 virtual bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;23 virtual void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;24
25
26 virtual void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;27
28 private:29 voidInitializeUI();30
31 private:32 bool m_Mouse_press = false;33 QWidget * m_ContentWidget =nullptr;34 QPushButton * m_ActIcon =nullpt