需求
原来有个软件是用mfc做的,其中的comboBox有个功能:在dropndown(点击下拉列表)时通过tcp发送请求并获取消息,然后设置items,最后才popup下拉列表。
后来转到qt,想用QComboBox实现同样的响应dropdown消息的功能,但发现其根本没有dropdown的信号。
解决方法
#pragma once
#include <QComboBox>
#include <QDebug>
class MyComboBox : public QComboBox
{
Q_OBJECT
public:
MyComboBox(QWidget* parent = nullptr) : QComboBox(parent)
{
};
std::function<void()>* dropDown;
protected:
void showPopup() override
{
// 模拟下拉列表框展开事件
qDebug() << "Drop-down event triggered!";
if (dropDown != nullptr) (*dropDown)();
QComboBox::showPopup();
}
void hidePopup() override
{
// 模拟下拉列表框关闭事件
QComboBox::hidePopup();
}
};
以上头文件“MyComboBox.h”定义了类MyComboBox,使用时只需将QComboBox控件提升为MyComboBox控件,并为其回调函数dropDown绑定具体的实现即可。
ui.comboBoxColName->dropDown = new std::function<void()>([&]() {
comboBoxDropDown();
});