설명서에 따르면 신호 구조에서 제대로 작동 할 수 있도록 사용자 지정 구조를 Q_DECLARE_METATYPE해야합니다.Qt : 언제 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);
}
신호 슬롯은 아무 문제없이 작동하지만, 다음과 같은 경우 :
struct SoundType
{
enum Type
{
Bip = 0,
LowBatt,
LowSat,
FarAway,
LostLink
};
};
Q_DECLARE_METATYPE(SoundType::Type)
내가
SoundType :: 유형을 사용하는 inorder를 선언 전화를해야 할 것 같습니다
신호 슬롯.
어떤 경우 신호 슬롯을 사용하려면 Q_DECLARE_METATYPE을 사용해야합니까?
docs 상태 : [* Q_DECLARE_METATYPE()로 새로운 유형을 선언하여 QVariant 및 기타 템플릿 기반 기능 *] (http://doc.qt.io/qt-5/qmetatype.html#details)에서 사용할 수 있도록합니다.). 내가 궁금한 점은 신호/슬롯에서 맞춤 구조를 사용할 때 문서를 사용해야한다는 점 이었습니까? – thuga
여기 : doc.qt.io/qt-4.8/custom-types.html 또는 Qt5에서 더 이상이 작업을 수행 할 필요가 없습니다. 아니면 그냥 대기열에 신호입니까? – Nyaruko
Q_DECLARE_METATYPE없이 직접 신호 슬롯 호출에서 사용자 정의 유형을 사용하는 것은 내가 기억할 수있는 한 계속 작동했습니다. 나는 문서의 그 부분이 무엇을 말하려고하는지 잘 모르겠습니다. – thuga