c++ - 无法使用自定义信号连接两个帧
问题描述
我正在尝试使用自定义信号连接两个帧,但我并没有真正得到它。
这段代码只是我试图在我的程序中做的一个例子,我的目标是在帧之间传输数据。
文件:
(发件人)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
signals:
void send();
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void on_pushButton_clicked();
};
#endif // MAINWINDOW_H
在“mainwindow.cpp”上,我有 void on_pushButton_clicked() 发出信号并显示新帧:
私人插槽无效:
void MainWindow::on_pushButton_clicked()
{
emit send();
Dialog sw;
sw.setModal(true);
sw.exec();
}
(接收者):
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QDebug>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void receive();
private:
Ui::Dialog *ui;
int a;
};
#endif // DIALOG_H
和.cpp:
#include "dialog.h"
#include "ui_dialog.h"
#include "mainwindow.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
a=0;
MainWindow w;
connect(&w, SIGNAL(send()), this, SLOT(receive()));
qDebug() << a;
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::receive(){
qDebug() << "ola";
a++;
}
结论:所以基本上函数 Dialog 不会打印 qDebug(),并且 'a' 仍然是 0,所以我得出结论,连接没有设置/执行。
谢谢大家,最好的问候,迪伦洛佩斯。
编辑:在帖子末尾写了一个结论。
解决方案
信号与槽的连接并不意味着信号功能会被触发。
您仍然需要发出信号以便a
更新。
创建一个空插槽也不起作用,因为插槽是信号的接收点。在这种情况下,on_pushButton_clicked()
当他按下按钮时被触发。这不会触发send
,除非您调用EMIT(send())
(IIRC,您使用 EMIT 发出信号,仍然如此吗?)。
推荐阅读
- c# - Q# AggregateException 找不到
- r - R:防止字符串(类似日期)转换为数字
- lambda - 如何在 lambda 中使用无效的最终变量
- database-connection - Zabbix前端连接数据库出错
- graphics - 用粗细计算线的边界框
- marklogic - 在 MarkLogic 中删除不同事务中的三元组
- tensorflow - 从 TF 中的矩阵(实际上是张量)中选择列并散射回零?
- javascript - Javascript this 上下文绑定
- python - 如何在Python中使用将双反斜杠替换为单个字节字符串
- android - 处理点击自定义通知按钮并显示 Facebook ShareDialog