Qt实现QComboBox的鼠标点击信号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_36521655/article/details/79171742

因为项目需求,需要实现点击QComboBox时就发送信号,但是Qt自带的QComboBox类,只提供了以下几种信号:

void activated(int index)
void activated(const QString & text)
void currentIndexChanged(int index)
void currentIndexChanged(const QString & text)
void currentTextChanged(const QString & text)
void editTextChanged(const QString & text)
void highlighted(int index)
void highlighted(const QString & text)


以及继承自QWidget的信号:

void customContextMenuRequested(const QPoint & pos)
void windowIconChanged(const QIcon & icon)
void windowIconTextChanged(const QString & iconText)
void windowTitleChanged(const QString & title)


和继承自QObject的信号:

void destroyed(QObject * obj = 0)
void objectNameChanged(const QString & objectName)

并没有点击事件的信号。故采用继承QComboBox的方式,重载QMouseEvent方法,实现点击事件。代码如下


声明头文件newcombobox.h:

#ifndef NEWCOMBOBOX_H
#define NEWCOMBOBOX_H

#include <QWidget>
#include <QComboBox>
#include <QMouseEvent>

class NewComboBox : public QComboBox
{
    Q_OBJECT
public:
    NewComboBox(QWidget*parent=0);
    void mousePressEvent(QMouseEvent *event);

signals:
    void clicked(bool);
};

#endif // NEWCOMBOBOX_H


定义源文件newcombobox.cpp:

#include "newcombobox.h"

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

}

void NewComboBox::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        emit clicked(true);
    }
    QComboBox::mousePressEvent(event);
}

有两种实例化方式。

第一种:

NewCombox* newComboBox = new NewComboBox();

没有绑定父组件,可以在父组件中通过addWidget的方式,添加这个combobox;

第二种:

NewCombox* newComboBox = new NewComboBox(*parentWidget);

绑定父组件,然后通过布局进行位置、大小等调整。


技术有限,难免存在疏漏,如有错误,还请谅解。

如果有需求,只需修改代码,实现相应功能。


展开阅读全文

没有更多推荐了,返回首页