我有两个对象,一个对象将保存图形,另一个对象有几个按钮。如何使用(连接),以便在您按下按钮1时,会在书包中显示题词或在日程表中填充新的题词?
例如,我按下由BtnBox类创建的按钮,并显示我的图形。如何使用connect()?
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();
}
答案 0 :(得分:0)
好吧,我假设您有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)。
答案 1 :(得分:0)
也许您可以使用QPushButton::clicked
信号并编写如下内容:
connect(ui->pushButtonObj, &QPushButton::clicked, plot, &Plot::slotPrinter);
但是,如果您希望对类BtnBox进行自定义行为,则可以在BtnBox的头文件中创建一个信号。
signals:
void clickedBtn1();
并使用:emit clickedBtn1();
每当您要发出它时,您的连接都应该起作用。
无需执行信号,您只需发射它即可。
不必真正使用发射关键字,如果您愿意,可以只使用clickedBtn();