c++ - 使用两个不同的类在 qt 中连接

标签 c++ qt qt5

我想连接来自两个不同类的信号和插槽,其中一个正在使用另一个类,如下例所示:

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/

相关文章:

c++ - 包装类的静态初始化列表

c++ - 库链接错误 : undefined reference to _imp__

linux - Qt5:Xcb Xau 符号未解析

c++ - 如何使用 QWebEngineUrlRequestInterceptor

ios - 如何使用qt5.2在iPhone上写入文件

c++ - Qt Custom Widget外观在设置样式表后没有改变

c++ - Big 3 - 赋值运算符

c++ - 将 2D Char 数组保存到 C++ 文件中

c++ - QT C++ 如何正确创建以对象为参数的函数

c++ - 如何从文件夹中获取文件名并将它们作为 qt 中的子项添加到树小部件中