我想连接来自两个不同类的信号和插槽,其中一个正在使用另一个类,如下例所示:
form.hpp
class Form : public QDialog
{
Q_OBJECT
public:
explicit Form();
public slots:
void onPushButton(void);
};
form.cpp
Form::Form() :
QDialog(parent)
{
ui->setupUi(this);
connect(..., SIGNAL(clicked()),..., SLOT(onPushButton()));
}
void Form::onPushButton(void)
{
ui->pushButton->setText(QString("clicked"));
}
mainwindow.hpp
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private:
Ui::MainWindow *ui;
Form f;
};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
我知道这很容易解决,但我不知道该怎么做。 Form::Form()
中connect
的语法是什么?
如果是这样的话,我会这样做:
connect(&f, SIGNAL(clicked()),this, SLOT(onPushButton()));
最佳答案
连接必须在 MainWindow 构造函数中进行,但您必须使用 lambda 方法,因为信号不会将文本传递给它。
form.h
class Form : public QDialog
{
Q_OBJECT
public:
explicit Form();
public slots:
void processingFunction(const QString & text);
};
表单.cpp
Form::Form() :
QDialog(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
}
void Form::processingFunction(const QString & text)
{
// some processing
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton, &QPushButton::clicked, [this](){
f.processingFunction(ui->lineEdit->text());
});
}
关于c++ - 使用两个不同的类在 qt 中连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51309144/