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: QSliderQObject 的后代,所以Q_OBJECT 是正确的选择,而不是Q_GADGET

以上是关于Qt 自定义插槽的主要内容,如果未能解决你的问题,请参考以下文章

Qt 将信号与自定义插槽匹配

将剪切、复制、粘贴快捷方式更改为 Qt 5 中的自定义插槽

Qt4中的信号和插槽 - 不工作

Qt Designer 中的自定义菜单操作

QT 插槽和信号参数

Qt Pushbutton无法连接插槽