文档说我需要 Q_DECLARE_METATYPE 一个自定义结构,这样它才能在信号槽中正常工作。
但我已经尝试了以下似乎工作正常的代码?
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
struct MyStruct
{
int a;
int b;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
signals:
void test(MyStruct);
public slots:
void tested(MyStruct);
private slots:
void on_pushButton_clicked();
};
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
//------------------------CPP-------------------------------
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this, SIGNAL(test(MyStruct)),this,SLOT(tested(MyStruct)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::tested(MyStruct t)
{
qDebug()<<t.a<<t.b;
}
void MainWindow::on_pushButton_clicked()
{
MyStruct t;
t.a=1;
t.b=2;
emit test(t);
}
Run Code Online (Sandbox Code Playgroud)
信号槽工作没有任何问题,但在以下情况下:
struct SoundType
{
enum Type
{
Bip = 0,
LowBatt,
LowSat,
FarAway,
LostLink
};
};
Q_DECLARE_METATYPE(SoundType::Type)
Run Code Online (Sandbox Code Playgroud)
看来我必须调用声明才能使用
声音类型::类型
在信号槽中。
那么在什么情况下我必须使用 Q_DECLARE_METATYPE 才能使用信号槽?
我什么时候应该使用 Q_DECLARE_METATYPE?
总是当该类型与信号/插槽或QVariant.
您的测试用例不完整:只要您将一个连接的对象移动到不同的线程,它就会中断。
您可能还需要qRegisterMetatype<YourType>()例如在main.
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |