Qt에서 사용자 정의 MetaType의 별칭 유형 등록

바실리 퍼킨

헤더 파일 XyztReal간단한 사용자 지정 유형 과 별칭이 datamodel.h있습니다.

#ifndef IMUCONTROLLERDATAMODEL_H
#define IMUCONTROLLERDATAMODEL_H

#include <QMetaType>

namespace imu_controller {
namespace data {

// some code

struct __attribute__((__packed__)) XyztReal {
    qreal x ;
    qreal y ;
    qreal z ;
    qreal ts;
};

typedef XyztReal GyrReal;
typedef XyztReal AccReal;
typedef XyztReal MagReal;

void registerTypes();

}
}

Q_DECLARE_METATYPE(imu_controller::data::XyztReal)

#endif // IMUCONTROLLERDATAMODEL_H

소스에 기능 등록 datamodel.cpp:

void registerTypes()
{
    qRegisterMetaType<XyztReal>("XyztReal");   // or qRegisterMetaType<XyztReal>();
    qRegisterMetaType<GyrReal >("GyrReal" );
    qRegisterMetaType<AccReal >("AccReal" );
    qRegisterMetaType<MagReal >("MagReal" );
}

그래서 나는 프로그램의 적절한 위치 에서이 함수를 호출하고 다음 과 같이 다른 스레드에서 일부 객체의 신호 / 슬롯 을 연결하려고 시도합니다 .

Qt::ConnectionType ct = static_cast<Qt::ConnectionType>(Qt::BlockingQueuedConnection | Qt::UniqueConnection);
connect(data_ctrl, &imu_controller::DataController::gyrRealReady, this, &MainWindow::someSlot, ct);

여기서 신호 / 슬롯 에는 각각 imu_controller::data::GyrRealimu_controller::data::XyztReal인수 유형이 있습니다.

Qt::ConnectionType ct = static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection);
connect(data_ctrl, &imu_controller::DataController::gyrRealReady, this, &MainWindow::onImuGyrRealReceived, ct);

여기서 신호 / 슬롯imu_controller::data::GyrReal인수를 모두 입력,하지만이 프로그램은 작동하고 debuger 인쇄하지 않습니다

QObject :: connect : 'imu_controller :: data :: GyrReal'유형의 인수를 큐에 넣을 수 없습니다 ( 'imu_controller :: data :: GyrReal'이 qRegisterMetaType ()을 사용하여 등록되었는지 확인하십시오.)

모든 XyztReal별칭 유형에 대해.

중요 :imu_controller::DataController 클래스 신호 유형이 유형으로 변경 되면 프로그램이 작동합니다 XyztReal!

추신 : 유형 등록 문제라고 생각합니다. qt 문서와 여러 주제를 읽었지만 해결책이나 예를 찾지 못했습니다.

파올로

내가 이해하는 한, 여기 에서의 const char * typeName주장 qRegisterMetaType이 매우 필요합니다. 또한 네임 스페이스 측면에서 일관성이 필요합니다.

DataController수업 에이 신호가 있다고 가정 해 보겠습니다 .

signals:
    void some_signal(data::AccReal);

클래스 imu_controllerdata네임 스페이스에 있기 때문에 인수 클래스 이름 앞에 네임 스페이스를 추가 하기 만하면 됩니다.

이제 registerTypes함수 에서 다음 과 같이 등록해야합니다.

qRegisterMetaType<AccReal >("data::AccReal");

즉, typeName문자열은 거기에 쓰여진 신호 인수의 유형과 정확히 일치해야합니다 .

다른 유형 이름을 지정하여 유형을 두 번 이상 등록 할 수있는 것처럼 보입니다.

qRegisterMetaType<AccReal >("AccReal");
qRegisterMetaType<AccReal >("data::AccReal");
qRegisterMetaType<AccReal >("imu_controller::data::AccReal");

흥미롭게도

using WhatEver = imu_controller::data::AccReal;

어딘가에, 당신은 가질 수 있습니다

signals:
    void some_signal(WhatEver);

당신이 가지고있는 한

 qRegisterMetaType<AccReal >("WhatEver");

요약하자면 레지스터 함수는 다음과 같습니다.

QString aliases[] = {"XyztReal", "GyrReal", "AccReal", "MagReal" };
for(auto a : aliases)
{
    qRegisterMetaType<XyztReal>(a.toLatin1());

    a.prepend("data::");
    qRegisterMetaType<XyztReal>(a.toLatin1());

    a.prepend("imu_controller::");
    qRegisterMetaType<XyztReal>(a.toLatin1());
}

XyztReal, 가능한 모든 네임 스페이스 조합으로 가능한 별칭마다 하나씩 여러 번 등록 할 수 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Elm의 다른 유형 목록에 대한 유형 별칭

분류에서Dev

플라스크에 다른 유형의 사용자 등록

분류에서Dev

별도의 테이블에 사용자 정보 등록

분류에서Dev

C의 헤더에 별칭 유형의 extern 변수 정의

분류에서Dev

유형 별칭을 사용하여 유형 별칭을 정의 할 수 있습니까?

분류에서Dev

Bash의 별칭에 사용자 정의 변수 삽입

분류에서Dev

Bash의 별칭에 사용자 정의 변수 삽입

분류에서Dev

Magnolia에서 사용자 지정 노드 유형 등록 취소

분류에서Dev

등록 양식에 대한 Laravel 사용자 정의 유효성 검사

분류에서Dev

Hibernate, 등록 할 사용자 정의 유형을 가져 오는 방법

분류에서Dev

테이블 별칭을 통해 사용자 지정 유형의 속성을 어떻게 선택합니까?

분류에서Dev

Linux에서 사용자 이름의 별칭을 지정할 수 있습니까?

분류에서Dev

bashrc에서 별칭을 정의 할 때 변수 사용

분류에서Dev

C ++ / Qt에서 변수의 별칭?

분류에서Dev

C ++ / Qt에서 변수의 별칭?

분류에서Dev

등록 양식에서 사용자 정의 필드에 대한 사용자 정의 유효성 검사를 고안하십시오.

분류에서Dev

Mediawiki 사용자 정의 등록 페이지에서 사용자 추가

분류에서Dev

Django에서 사용자 정의 사용자 등록 필드 추가

분류에서Dev

연산자가있는 std :: array의 C ++ 11 유형 별칭

분류에서Dev

Haskell에서 유니 코드 문자를 사용하여 함수의 별칭을 만드는 방법

분류에서Dev

함수의 반환 유형에 별칭을 지정할 수 있습니까?

분류에서Dev

std 유형에 대한 별명에 대한 사용자 정의 지점

분류에서Dev

별칭의 형식 문자열

분류에서Dev

초급 질문 : 사용자 지정 유형의 두 목록의 각 조합에서 함수 사용 문제

분류에서Dev

사용자가 새 계정을 등록 할 때 별도의 테이블에 레코드 생성

분류에서Dev

JavaFX. 사용자 정의 클래스에 eventHandler 등록

분류에서Dev

WordPress에 사용자 정의 로그인 등록

분류에서Dev

Rust에서 함수의 제네릭 유형으로 제네릭 유형 별칭을 사용하는 방법이 있습니까?

분류에서Dev

Spring MockMvc-사용자 정의 유효성 검사기가 Spring Container에 등록 / 호출되지 않음

Related 관련 기사

  1. 1

    Elm의 다른 유형 목록에 대한 유형 별칭

  2. 2

    플라스크에 다른 유형의 사용자 등록

  3. 3

    별도의 테이블에 사용자 정보 등록

  4. 4

    C의 헤더에 별칭 유형의 extern 변수 정의

  5. 5

    유형 별칭을 사용하여 유형 별칭을 정의 할 수 있습니까?

  6. 6

    Bash의 별칭에 사용자 정의 변수 삽입

  7. 7

    Bash의 별칭에 사용자 정의 변수 삽입

  8. 8

    Magnolia에서 사용자 지정 노드 유형 등록 취소

  9. 9

    등록 양식에 대한 Laravel 사용자 정의 유효성 검사

  10. 10

    Hibernate, 등록 할 사용자 정의 유형을 가져 오는 방법

  11. 11

    테이블 별칭을 통해 사용자 지정 유형의 속성을 어떻게 선택합니까?

  12. 12

    Linux에서 사용자 이름의 별칭을 지정할 수 있습니까?

  13. 13

    bashrc에서 별칭을 정의 할 때 변수 사용

  14. 14

    C ++ / Qt에서 변수의 별칭?

  15. 15

    C ++ / Qt에서 변수의 별칭?

  16. 16

    등록 양식에서 사용자 정의 필드에 대한 사용자 정의 유효성 검사를 고안하십시오.

  17. 17

    Mediawiki 사용자 정의 등록 페이지에서 사용자 추가

  18. 18

    Django에서 사용자 정의 사용자 등록 필드 추가

  19. 19

    연산자가있는 std :: array의 C ++ 11 유형 별칭

  20. 20

    Haskell에서 유니 코드 문자를 사용하여 함수의 별칭을 만드는 방법

  21. 21

    함수의 반환 유형에 별칭을 지정할 수 있습니까?

  22. 22

    std 유형에 대한 별명에 대한 사용자 정의 지점

  23. 23

    별칭의 형식 문자열

  24. 24

    초급 질문 : 사용자 지정 유형의 두 목록의 각 조합에서 함수 사용 문제

  25. 25

    사용자가 새 계정을 등록 할 때 별도의 테이블에 레코드 생성

  26. 26

    JavaFX. 사용자 정의 클래스에 eventHandler 등록

  27. 27

    WordPress에 사용자 정의 로그인 등록

  28. 28

    Rust에서 함수의 제네릭 유형으로 제네릭 유형 별칭을 사용하는 방법이 있습니까?

  29. 29

    Spring MockMvc-사용자 정의 유효성 검사기가 Spring Container에 등록 / 호출되지 않음

뜨겁다태그

보관