本文设计到多种Qt的关键操作:
- 继承,自定义Qt类
- 自定义Qt signal
- 在Qt creator使用“提升”来使用自定义Qt组件
背景
利用QComboBox来实现选择串口,想在点击QComboBox的时候刷新串口列表,实现如下效果:
但是Qt5 并没有实现QComboBox的点击事件,在*中,建议自己重载 showPopup
方法。
但是自己重定义的组件怎么在Qt Creator中应用呢?在参考2中给出了方法,利用Qt的提升功能,将QComboBox提升为自定义的QComboBox。下面介绍具体的操作方法和注意事项。
实现自定义QComboBox
首先需要创建一个自定义的QComboBox类并继承于 QComboBox
QComboBoxMoreSignal.h
文件
#pragma once
#include <qcombobox.h>
class QComboBoxMoreSignal : public QComboBox {
Q_OBJECT
signals:
void combo_box_showpopup(QComboBoxMoreSignal* self);
public:
explicit QComboBoxMoreSignal(QWidget* parent = nullptr);
private:
void showPopup() override;
};
在参考3中,提到
自定义信号槽必须要有Q_OBJCT
因为继承的QComboBox中的构造函数用explicit
关键字声明了,因此需要再次实现一次构造方法,并在构造方法中调用父类构造方法。
然后我们重写父类的showPopup
方法,注意后方加上override
关键字。
最后我们定义了showpopup的信号函数,信号函数可以由qt自动生成,因此我们只需要声明不需要自己定义。
QComboBoxMoreSignal.cpp
文件
#include "QComboBoxMoreSignal.h"
QComboBoxMoreSignal::QComboBoxMoreSignal(QWidget* parent /*= nullptr*/):
QComboBox(parent){
}
void QComboBoxMoreSignal::showPopup() {
emit combo_box_showpopup(this);
QComboBox::showPopup();
}
实现文件中,注意构造方法需要调用父类构造方法;
在重载showPopup
也要注意重新调用父类的showPopup
在showPopup
中发射信号。
在Qt creator中使用提升使用自定义控件
创建完自定义的QComboBoxMoreSignal
之后,就需要在Qt creator使用它
在绘制页面的时候,主要还是使用QComboBox来绘制,在绘制之后,右击控件,并选择提升为
首先选择基类为原始控件的类型,QComboBox
之后添加你自定义的类型 QComboBoxMoreSignal
,注意头文件的文件名称。
点击添加后,在上方选中,点击提升,就完成了。
参考
QComboBox click event - *
Qt自定义控件以及控件的提升
QT 手动创建信号函数 与 槽函数
自定义ComboBox——获取串口号
Qt自定义控件以及控件的提升