Qt 自定义插槽
Posted
技术标签:
【中文标题】Qt 自定义插槽【英文标题】:Qt Custom Slots 【发布时间】:2011-10-29 03:40:46 【问题描述】:为什么插槽 Reset() 不起作用?我希望“重置”按钮将边的值重置为零。
class MySlider : public QSlider
public:
MySlider(Qt::Orientation orientation, QWidget *parent = 0) : QSlider(orientation parent)
public slots:
void Reset()
this->setValue(0);
;
//it doesnt work when i try this
MySlider * Slider = new MySlider(Qt::Horizontal, this);
QPushButton *Reset = new QPushButton(tr("Reset"), this);
connect(Reset, SIGNAL(clicked()), Slider, SLOT(Reset()) );
【问题讨论】:
connect 返回什么?如果插槽设置正确,它应该返回 true 【参考方案1】:尝试将Q_OBJECT
添加到课程的私有部分。这将导致moc
创建信号和插槽工作所需的元数据。见http://doc.qt.io/archives/qt-4.7/qobject.html#Q_OBJECT
【讨论】:
我试过 Q_GADGET (因为我需要它成为 QSlider 的子类)但它没有用 哇,我以前没有遇到过 Q_GADGET,我实际上不得不去查一下 :) QSlider 是一个 QObject,你的 QSlider 的子类也是如此,所以使用 Q_OBJECT。 @ArnoldSpence 当我在类的私有部分尝试 QObject 时,我得到了这个错误:未定义的对 'vtable for MySlider' 的引用。 ***.com/questions/4774291/… 修复了这个错误 @Geore:QSlider
是QObject
的后代,所以Q_OBJECT
是正确的选择,而不是Q_GADGET
以上是关于Qt 自定义插槽的主要内容,如果未能解决你的问题,请参考以下文章