【问题标题】:Qt Custom SlotsQt 自定义插槽
【发布时间】: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

标签: c++ qt slider signals-slots qt-signals


【解决方案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' 的引用。
  • @Geore: QSlider 是QObject 的后代,所以Q_OBJECT 是正确的选择,而不是Q_GADGET
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 2010-11-11
  • 2012-11-21
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多