【问题标题】:Transfer Data Between Two Children Using Qt Signals and Slots (C++)使用 Qt 信号和插槽 (C++) 在两个孩子之间传输数据
【发布时间】:2014-08-14 23:12:04
【问题描述】:

在 Qt C++ 中,我有一个父对象 MainWindow。 MainWindow 有(除其他外)2 个成员对象:vector 和 Serial。

GUI的一些相关成员:

QPushButton pushButton;
int itemNumber;

连载相关成员:

void send(int number)

当单击 GUI 的成员 pushButton 时,我想将 GUI 的成员“pushButton”作为参数传递给函数 Serial::send(int number)。我看到了一种选择,例如

connect(GUI,SIGNAL(clicked()),this,SLOT(customSlot()));

在我的 MainWindow 函数中。但是,然后我不知道它来自向量中的哪个项目,所以我不知道要抓取哪个 itemNumber(它们都是不同的)。

我还想也许我会在 GUI 类中执行此操作,但它无法访问 Serial::send(int number) 方法。我不想在每个 GUI 中都有一个 Serial 对象,因为此时它不会那样工作。

如何将来自子对象 GUI 的信息从信号传递到父对象 MainWindow?

谢谢!

【问题讨论】:

  • 你看过QSignalMapper吗?见qt-project.org/doc/qt-5/qsignalmapper.html
  • 另一种可能的方法:子类 QPushButton,并让子类声明 clicked(int) 信号和 userClickedMe() 槽。让它将它的 clicked() 信号连接到它的 userClickedMe() 插槽,并让 userClickedMe() 执行“发出 clicked(myNumber)”。现在您的主 GUI 代码可以按照您想要的方式将按钮子类的 clicked(int) 连接到它的插槽。
  • @RA。这是一个好方法!感谢您将我指向 QSignalMapper 类,这将非常有用!
  • @JeremyFriesner 我也喜欢这个主意。这将允许我传递更多信息,我认为该项目的其他领域可能需要这些信息。感谢您的提示!

标签: c++ qt user-interface qt-signals


【解决方案1】:

在插槽中使用QObject::sender() 函数来获取发送信号的对象。 当然,你需要一些合适的演员阵容:

void someSlot() {
    QPushButton *sender = qobject_cast<QPushButton *>(sender()); 
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多