使用 2 类 Qt 之间的信号
use a signal between 2 classes Qt
我有一个 MainWindow class,其中包含一个 QComboBox 和一个来自另一个 class 的小部件。第二个 class 包含一个 QCheckBox 和一个 QComboBox。当我的 MainWindow 的 QComboBox 中显示的字符串已更改时,我想使用信号更改我的 QCheckBox 的 checkState 和我的小部件 class 中显示在我的 QComboBox 中的字符串。
但我不太明白我的信号必须具有哪种形式以及如何在我的小部件中使用它class。
MainWindow.h :
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QComboBox>
#include "devices_left_widget.h"
#define STRING_DEVICE1 "DEVICE1"
#define STRING_DEFAULT ""
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
signals:
public slots:
void carte_OK();
protected:
QComboBox* carte_type_combo_box;
devices_left_widget* left_widget;
};
#endif // MAINWINDOW_H
device_left_widget.h :
#ifndef DEVICE_LEFT_WIDGET_H
#define DEVICE_LEFT_WIDGET_H
#include <QWidget>
#include <QCheckBox>
#include <QComboBox>
#define STRING_DEVICE1 "DEVICE1"
#define STRING_DEFAULT ""
class device_left_widget : public QWidget {
Q_OBJECT
public:
explicit device_left_widget(QWidget* parent = nullptr);
signals:
public slots:
protected:
QGridLayout* main_grid_layout;
QCheckBox* device_checkbox;
QComboBox* device_type_combo_box;
};
#endif // DEVICES_LEFT_WIDGET_H
让我们将您的小部件命名为 container
。我们想把QComboBox的currentTextChanged(const QString &text)
信号连接到widget,所以我们创建一个对应信号的slot,让它是chosenTextChanged(const QString& text)
。我们在 MainWindow
构造函数中连接它们:
connect(ui->comboBox, SIGNAL(currentTextChanged(const QString &)),
ui->container, SLOT(chosenTextChanged(const QString &)));
然后在您的容器 class 内,将插槽定义为 public:
public slots:
void chosenTextChanged(const QString &text) {
//change your QCheckBox's state and
//change your QComboBox's text
}
我有一个 MainWindow class,其中包含一个 QComboBox 和一个来自另一个 class 的小部件。第二个 class 包含一个 QCheckBox 和一个 QComboBox。当我的 MainWindow 的 QComboBox 中显示的字符串已更改时,我想使用信号更改我的 QCheckBox 的 checkState 和我的小部件 class 中显示在我的 QComboBox 中的字符串。
但我不太明白我的信号必须具有哪种形式以及如何在我的小部件中使用它class。
MainWindow.h :
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QComboBox>
#include "devices_left_widget.h"
#define STRING_DEVICE1 "DEVICE1"
#define STRING_DEFAULT ""
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
signals:
public slots:
void carte_OK();
protected:
QComboBox* carte_type_combo_box;
devices_left_widget* left_widget;
};
#endif // MAINWINDOW_H
device_left_widget.h :
#ifndef DEVICE_LEFT_WIDGET_H
#define DEVICE_LEFT_WIDGET_H
#include <QWidget>
#include <QCheckBox>
#include <QComboBox>
#define STRING_DEVICE1 "DEVICE1"
#define STRING_DEFAULT ""
class device_left_widget : public QWidget {
Q_OBJECT
public:
explicit device_left_widget(QWidget* parent = nullptr);
signals:
public slots:
protected:
QGridLayout* main_grid_layout;
QCheckBox* device_checkbox;
QComboBox* device_type_combo_box;
};
#endif // DEVICES_LEFT_WIDGET_H
让我们将您的小部件命名为 container
。我们想把QComboBox的currentTextChanged(const QString &text)
信号连接到widget,所以我们创建一个对应信号的slot,让它是chosenTextChanged(const QString& text)
。我们在 MainWindow
构造函数中连接它们:
connect(ui->comboBox, SIGNAL(currentTextChanged(const QString &)),
ui->container, SLOT(chosenTextChanged(const QString &)));
然后在您的容器 class 内,将插槽定义为 public:
public slots:
void chosenTextChanged(const QString &text) {
//change your QCheckBox's state and
//change your QComboBox's text
}