如何连接两个不同的对象
How to connect two different objects
我有两个对象,一个对象将持有图,另一个按钮。如何使用(连接(,以便按下按钮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(。
- 如何返回一个类的两个对象相加的结果
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何在Qt中连接来自不同窗口的两个对象?
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- C++两个对象,其中包含指向同一数组不同部分的指针
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 绘制一个对象,比较模具缓冲区的两个不同值
- C++控制台应用,其中有两个冲突的对象不工作
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 当两个 std::map 对象相同时
- C++:在另外两个对象之间共享一个对象
- 为什么这两个卡片对象不等同?