Qt时隙方法(这是另一类)在发射信号时不触发
Qt slot method (which is another class) not firing when emiting the signal
我知道这个问题问了很多次,但仍然很困惑,找不到解决方案。
我有一个主窗口和一个类。
在我的类中,我有一个信号,我在方法调用中发出该信号。
问题:插槽方法未触发。
这是我的代码。
BWorker.h
#pragma once
#include <QObject>
class BWorker : public QObject
{
Q_OBJECT
public:
BWorker(QObject *parent);
~BWorker();
void doSomething();
signals:
void signalSomething();
};
沃克.cpp
#include "BWorker.h"
BWorker::BWorker(QObject *parent)
: QObject(parent)
{
}
BWorker::~BWorker()
{
}
void BWorker::doSomething()
{
emit signalSomething();
}
QtGui申请1.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtGuiApplication1.h"
class QtGuiApplication1 : public QMainWindow
{
Q_OBJECT
public:
QtGuiApplication1(QWidget *parent = Q_NULLPTR);
public slots:
void workDone();
private:
Ui::QtGuiApplication1Class ui;
};
QtGui应用程序1.cpp
#include "QtGuiApplication1.h"
#include "BWorker.h"
QtGuiApplication1::QtGuiApplication1(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
BWorker bworker(this);
connect(&bworker, SIGNAL(bworker.signalSomething), this, SLOT(workDone()));
bworker.doSomething();
}
void QtGuiApplication1::workDone() {
}
你的问题在这里:
SIGNAL(bworker.signalSomething)
这是无效的,您应该在终端中看到一条消息,指出没有这样的信号。适合您的情况的正确语法是:
SIGNAL(signalSomething())
请通过复制粘贴来发布您的代码。请勿编辑代码:问题可能出在您编辑的位置。
我的代码工作正常。
主窗口.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void workDone();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
主窗口.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include "worker.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Worker worker(this);
connect(&worker, SIGNAL(signalSomething()), this, SLOT(workDone()));
//connect(&worker, &Worker::signalSomething, this, &MainWindow::workDone);
worker.doSomething();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::workDone()
{
qDebug() << "Done.";
}
工人.h:
#ifndef WORKER_H
#define WORKER_H
#include <QObject>
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = 0);
void doSomething();
signals:
void signalSomething();
public slots:
};
#endif // WORKER_H
工人.cpp:
#include "worker.h"
Worker::Worker(QObject *parent) : QObject(parent)
{
}
void Worker::doSomething()
{
emit signalSomething();
}
应用程序输出:
Debugging starts
Done.
Debugging has finished
打印出"完成"表示代码正在工作。
相关文章:
- QT-悬停Qlabel时发射信号
- QThread信号发射不连接
- QTimer超时信号在每个超时事件中多次发射
- QT:使用Qeventloop等待信号,如果信号发射得太早该怎么办
- 无法从Qt C++捕获发射到QML的信号
- Qt时隙方法(这是另一类)在发射信号时不触发
- QT条件信号发射效率
- QT 5:从非QT线程发射信号
- 复合属性对象,当所有子对象都更改时,它禁止多个信号发射
- 呼叫函数直接与发射信号(QT-信号和插槽)
- 从QThread循环中发射信号
- Qt信号是发射器,但信号似乎没有被触发
- QFuture信号在错误的时间发射
- 未检测到发射信号
- 在Qt信号中发射QVector参考会导致复制
- Qt发射信号未接收到
- Qt信号发射和QThread执行流程
- 如何在Qt创建者中捕获同类中的发射信号
- 从类发射信号,如果 QStateMachine 中的转换成功
- 发射信号和插槽 (Qt) 的信息和控制