Я пытаюсь подключить сигнал от второго QMainWindow к главному окну. Он не говорит ничего о проблемном соединении при запуске программы, но он не работает. Я не очень хорошо знаком с C++ и Qt, поэтому, возможно, это просто.Сигнальный слот QT не принимается
Мой код состоит из Mainwindow, используемого как SCADA, с кнопками Start, Stop, On, off. Во втором qmainwindow я создал терминал, в котором вы можете вводить, запускать, останавливать ... Там я хотел бы передать сигнал на мой MainWindow, который отвечает за управление несколькими потоками и окнами. Проблема в том, что я не могу подключиться к своему слоту. Я представляю здесь простой обзор этих двух частей кода.
Терминал. ч
#ifndef TERMINAL__H
#define TERMINAL__H
#include <QMainWindow>
#include <QTextEdit>
#include <QLineEdit>
#include <QObject>
namespace Ui {
class Terminal_;
}
class Terminal_ : public QMainWindow
{
Q_OBJECT
public:
explicit Terminal_(QWidget *parent = 0);
~Terminal_();
signals:
void turnonPLC_terminal();
public slots:
void newline();
private:
Ui::Terminal_ *ui;
QTextEdit* mTerminal;
QLineEdit* mInput;
};
#endif // TERMINAL__H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "terminal_.h"
#include "terminal_help.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Terminal_ *terminal;
public slots:
void turnon_terminal();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "terminal_.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
terminal = new Terminal_(this);
connect(terminal, SIGNAL(turnonPLC_terminal()), this, SLOT(turnon_terminal()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::turnon_terminal(){
turnonPLC=1;
}
terminal_.cpp
#include "terminal_.h"
#include "ui_terminal_.h"
#include <QDockWidget>
#include <QWidget>
#include <QLineEdit>
QString on=("on");
Terminal_::Terminal_(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Terminal_)
{
ui->setupUi(this);
mTerminal = new QTextEdit();
setCentralWidget(mTerminal);
mInput = new QLineEdit();
QDockWidget* qdw = new QDockWidget;
qdw->setWidget(mInput);
addDockWidget(Qt::BottomDockWidgetArea, qdw);
connect (mInput, SIGNAL(returnPressed()),
this, SLOT(newline()));
}
Terminal_::~Terminal_()
{
delete ui;
}
void Terminal_::newline(){
QString command = mInput->text();
if (command==on){
emit turnonPLC_terminal();
}
}
Благодаря
Является ли ваша переменная 'command == on' равной' on'? Хм, что же значит «на»? Уверен, что этот сигнал просто не испускается. Вы пытались отладить ваше приложение? –
В связи с тем, что @VictorPolevoy сказал: вы берете 'QString' из элемента управления' QLineEdit', поэтому оператор 'if' не должен' if (command == "on") '? – Carlton
Также вы подключаете сигнал от члена класса к слоту в том же классе; это звучало так, будто вы хотели подключить сигнал от одного класса к слоту в другом классе. – Carlton