未接收到QT信号槽

QT signal-slot not received

本文关键字:信号 QT      更新时间:2023-10-16

我正在尝试将第二个QMainWindow的信号连接到主窗口。当程序启动时,它没有说明任何关于连接问题的信息,但它不起作用。我对C++和Qt不是很熟悉,所以可能很简单。

我的代码包含在一个主窗口上,该窗口用作带有启动、停止、打开、关闭按钮的SCADA。在第二个qmainwindow中,我创建了一个终端,您可以在其中键入、启动、停止。。。在那里,我想向我的MainWindow发出一个信号,它负责控制多个线程和窗口。问题是我无法连接到我的插槽。我在这里简要介绍了这两段代码。

终端。h

#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

主窗口.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

主窗口.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;
}

终端.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();
}
}

感谢

代码中的信号槽部分工作得很好。(经过一些小的修改后进行了编译和测试(在输入"on"(不是问题中所写的on(之后调用了Terminal_::newline()插槽,turnonPLC_terminal()被激发,最后调用CCD_ 3。

然而,有一些小细节,头文件被称为terminal_.h,而不是terminal.h。没有定义turnonPLC。终端是通过不显示(无显示呼叫(创建的。

我想,只是有一些小的逻辑错误。尝试使用调试器或使用qDebug跟踪预期调用链。