Я программирую приложение с пользовательским интерфейсом. Этот интерфейс имеет пару объектов LideEdit и проверяемый GroupBox, все они содержатся в классе MainWindow. Когда пользователь изменяет состояние проверяемого GroupBox, он излучает сигнал с именем system_toogled(int, int, std::string)
.
. Поэтому класс MainWindow имеет следующее определение:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_groupBox_toggled(bool arg1);
signals:
void system_toogled(int, int, std::string);
private:
Ui::MainWindow *ui;
};
. Сигнал system_toogled(int, int, std::string)
излучается. в on_groupBox_toggled(bool arg1)
, который имеет следующее определение:
void MainWindow::on_groupBox_toggled(bool arg1)
{
emit system_toggled(ui->lineEdit->text().toInt(),
ui->lineEdit_2->text().toInt(),
ui->lineEdit_3->text().toStdString())
}
У меня также есть класс myProgramThread, производный от класса QThread. Он имеет следующее определение:
class myProgramThread : public QThread
{
Q_OBJECT
public:
myProgramThread(MainWindow* mainWindow);
public slots:
void on_system_toggled(int, int, std::string);
protected:
void run();
};
Публичный c слот под названием: on_system_toogled(int, int, std::string)
управляет этими переменными. Я попытался соединить сигнал и слот publi c с функцией: connect()
внутри конструктора класса myProgramThread
, который имеет следующее определение:
myProgramThread::myProgramThread(MainWindow* mainWindow)
{
connect(mainWindow, SIGNAL(system_toggled(int, int, std::string)), this, SLOT(on_system_toggled(int, int, std::string)));
}
Не работает. Я продолжаю получать следующий вывод приложения во время отладки:
QMetaObject :: connectSlotsByName: нет соответствующего сигнала для on_system_toogled (int, int, std :: string)
Так что мой вопрос: как я могу подключить сигнал от класса MainWindow к слоту другого потока?