未收到QT信号槽

时间:2015-05-23 11:32:19

标签: c++ qt signals-slots

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

我的代码包含一个Mainwindow,用作带有Start,stop,On,off按钮的SCADA。在第二个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();
}
}

由于

1 个答案:

答案 0 :(得分:1)

代码中的信号槽部分工作正常。 (经过一些小修改后编译和测试) 进入&#34; on&#34; (不是如所写的那样) Terminal_::newline()名为turnonPLC_terminal()的广告位被解雇,最后被解雇 void MainWindow::turnon_terminal()被称为。{/ p>

但是,有一些小细节,头文件名为terminal_.h,而不是Terminal.h turnonPLC未定义。终端是通过不显示创建的(没有show-call)。

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