【问题标题】:How can I connect signals and slots of different objects in Qt?如何在 Qt 中连接不同对象的信号和插槽?
【发布时间】:2011-05-10 16:16:00
【问题描述】:

我对 QT c++ 有疑问

假设这是main.cpp

#include "head.h"
#include "tail.h"

int main()
{
  head *head_obj = new head();
  tail *tail_obj = new tail();
  //some code
}

这里是head.h

class head:public QWidget
{
  Q_OBJECT

  /* some code */

  public slots:
  void change_number();
};

这是tail.h

class tail:public QWidget
{
Q_OBJECT

  /* some code */
  /* some code */
  QPushButton *mytailbutton = new QPushButton("clickme");

  //this is where i need help
  connect(button,SIGNAL(clicked()),?,?);

};

现在我如何将 mytailbutton 的信号 clicked() 连接到头类插槽 change_number? 我只是觉得这不可能。

感谢您的帮助!

【问题讨论】:

  • 你是手动删除分配的内存吗?如果没有,那就有问题了。对于 QObject 派生的类,您可以在构造函数中添加一个父对象,它会在销毁时释放其子对象(例如,您要添加 QPushButtonQWidget 实例)。

标签: c++ qt object slot


【解决方案1】:

你连接实例的信号和槽,而不是类。

您需要接收器和发射器对象的地址才能将它们连接在一起。

connect(button, SIGNAL(clicked()),
        pointer_to_instance_of_head, SLOT(change_number()));

(假设“按钮”是一个指针)。

获取该指针是另一个问题,但除非您没有充分的理由这样做,否则我建议在您正在派生的QWidget 的构造函数中构造头对象。

【讨论】:

    【解决方案2】:

    好吧,假设一切都像你展示的那样简单,你的真正缩略的代码应该很简单

    connect( aTailInstance->tailButon, SIGNAL( clicked() ), aHeadInstance, SLOT( change_number() ) );
    

    但是,使用您在此处显示的代码,无法确定您所追求的功能类型,也不清楚您在问什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多