QT comboBox鼠标点击事件

在QT中的ui界面添加QComboBox控件,需求是实现控件的点击事件,查了资料,发现这个控件类的本身是没有点击信号可以使用的,提供的信号为

voidactivated(int index)
voidactivated(const QString & text)
voidcurrentIndexChanged(int index)
voidcurrentIndexChanged(const QString & text)
voideditTextChanged(const QString & text)
voidhighlighted(int index)
void

highlighted(const QString & text)

具体可以参考官方说明:QComboBox Class | Qt 4.8

但是QT是基于C++的面向对象,有了这个特点,我们就可以继承原来的类,然后重写里面的方法来实现基类中没有的方法,比如 clicked 事件。在QComboBox 中添加鼠标点击事件的步骤为首先新建一个类(MyComboBox),继承QComboBox类,然后在新建的类里面添加mousePressEvent事件,mousePressEvent是QT里面的鼠标点击事件,直接就能用,接着在这个mousePressEvent事件函数里面触发自定义的 mouseSingleClickd信号,这样就实现在 QComboBox 里面实现鼠标点击的事件。

代码:

新建一个MyComboBox类。

1、mycombobox.h

#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H

#include <QComboBox>
#include <QMouseEvent>
#include "mainwindow.h"


class MyComboBox : public QComboBox
{
    Q_OBJECT    //只有加入Q_OBJECT,才能使用信号signal和槽slot的机制
public:
    explicit MyComboBox(QWidget *parent = 0);
    ~MyComboBox();
protected:
    virtual void mousePressEvent(QMouseEvent *e);  //添加鼠标点击事件

signals:
    void mouseSingleClickd();  //自定义点击信号,在mousePressEvent事件发生时触发
};

#endif // MYCOMBOBOX_H

2、mycombobox.cpp

#include "mycombobox.h"

using namespace Ui;

MyComboBox::MyComboBox(QWidget *parent):QComboBox(parent)
{

}

MyComboBox::~MyComboBox()
{

}

void MyComboBox::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        emit mouseSingleClickd();  //触发clicked信号
    }

    QComboBox::mousePressEvent(event);  //将该事件传给父类处理,这句话很重要,如果没有,父类无法处理本来的点击事件
}

这样对 QComboBox 的重写就完成了,我们就可以使用具有鼠标点击响应的 MyComboBox 这个类了。在这里解释一下 emit,emit 是QT里面的一个关键字,意思是触发一个信号,这里的话是触发我们在 mycombobox.h 这个头文件中自定义的 mouseSingleClickd 信号。

那这个新建的 MyComboBox 应该怎么用呢?

方法1> 如果是想要在代码中直接新建的话,就是通过平时的类的实例化就行。

例如:

MyComboBox* myComboBox = new MyComboBox();

这样实例化是没有绑定父组件的,可以在父组件中通过addWidget的方式,添加这个新建的组件。

也可以在实例化的时候绑定父组件,然后进行布局、位置、大小进行设置。

方法2> 如果是直接在ui界面上面添加的话,我们可以先在ui界面添加一个原来的控件ComboBox,然后把这个控件提升为 MyComboBox 就可以使用了。

具体步骤为:打开ui界面----->>选中QComboBox控件,右击----->>选择“提升为”----->>在“提升的类名称里面”填入新建的类“MyComboBox”名称----->>点击“添加”按钮----->>再点击“提升”按钮。具体图解如下:

1、输入提升的类的名称

 2、点击“添加”按钮,可以看到窗口的上面已经添加进入。

 3、点击“提升”即可(添加提升时要注意mycombobox.h的名称要和实际的mycombobox.h文件名称要一致,大小写也要一致。还要在右键“改变信号/槽”-“信号”里添加一个 mouseSingleClickd 信号事件)。

4、在mouseSingleClickd事件函数中添加自己需要处理的工作内容即可。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值