如何连接两个不同的对象

How to connect two different objects

本文关键字:对象 两个 何连接 连接      更新时间:2023-10-16

我有两个对象,一个对象将持有图,另一个按钮。如何使用(连接(,以便按下按钮1时,铭文显示在Debag中或时间表中充满了新的?

例如,我按Class BTNBox创建的按钮,并显示我的图形。如何使用连接((?

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QThread>
#include "btnbox.h"
#include "plot.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    BtnBox *panel = new BtnBox(&a);
    Plot *plot = new Plot();
    QObject::connect(panel, SIGNAL(clickedBtn1()), plot, SLOT(slotPrinter()));
//    panel->show();
    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addWidget(plot);
    mainLayout->addWidget(panel);
    QWidget window;
    window.setLayout(mainLayout);
    window.show();
    return a.exec();
}

也许您可以使用QPushButton::clicked信号并写下这样的东西:

connect(ui->pushButtonObj, &QPushButton::clicked, plot, &Plot::slotPrinter);

但是,如果您想要使用类BTNBox的自定义行为,则可以在btnbox的标题文件中创建信号。

signals:
    void clickedBtn1();

使用:emit clickedBtn1();每当您想发射它时,您的连接都应起作用。

无需实现信号,您只需要发出它即可。

发射关键字不是真正必要的,如果您愿意,可以简单地使用clickedBtn();

好吧,我假设您有class BtnBox,并且它在类定义中已经有一个(通常在.h文件中(:

signals:
    void clickedBtn1();

qt moc 将生成该方法的实现,您无需在此处为此做更多的事情。但是您确实需要发出该信号。在许多情况下,您会在正确的位置添加emit clickedBtn1();,但是在这种情况下,您可能想在BtnBox::BtnBox构造函数中进行类似的操作:

connect(ui->button1, SIGNAL(clicked()), this, SIGNAL(clickedBtn1()));

将信号连接到信号只会简单地进行信号转发。用正确的指针替换ui->button1,无论您在代码中所含的内容如何。


请注意如何不是做到这一点,只是为了提供一些思考的食物:替代方法是从班级中揭露按钮1,所以您的main()您可以做类似的事情:QObject::connect(panel->getButton1(), SIGNAL(clickedBtn1()), plot, SLOT(slotPrinter()));。但这通常被认为有点脏,像这样揭示了BtnBox类的内部。最好暴露信号,然后使用类的代码不需要关心它的发射方式(例如,从BtnBox的几个不同部分(或BtnBox的内部实现可能会更改(例如将其转换为QML(。

相关文章: