Как использовать сигналы в элементах управления ActiveX (ActiveQt)

Я пытаюсь изменить пример кода activeQt/wrapper из Qt для получения пакетов Udp. Я хочу, чтобы построить элемент управления ActiveX и положить его в C# frameWindowApplication

#include <QAxFactory>
#include <QCheckBox>
#include <QRadioButton>
#include <QPushButton>
#include <QToolButton>
#include <QPixmap>
#include <QUdpsocket>

// #include "mylabel.h"


//! [0]
class ActiveQtFactory : public QAxFactory
{
    //Q_OBJECT //if this is uncommented I have errors below 
public:
    ActiveQtFactory( const QUuid &lib, const QUuid &app )
    : QAxFactory( lib, app )
    {}
    QStringList featureList() const
    {
    QStringList list;
    list << "QCheckBox";
    list << "QRadioButton";
    list << "QPushButton";
    list << "QLabel";
    return list;
    }
    QObject *createObject(const QString &key)
    {
    if ( key == "QCheckBox" )
        return new QCheckBox(0);
    if ( key == "QRadioButton" )
        return new QRadioButton(0);
    if ( key == "QPushButton" )
        return new QPushButton(0 );
    if ( key == "QLabel" ) {
        QLabel *mainLabel = new QLabel(0);

        mainLabel->setText("mainlab1111");
        mainLabel->setMinimumSize(1000,600);
        mainLabel->setFrameStyle(QFrame::Box);

//        myLabel *interLabel = new myLabel;
//        interLabel->setParent(mainLabel);
//        interLabel->show();

        socket = new QUdpSocket(this);
        socket->bind(QHostAddress::Any,1234);


        labelVideoInfo = new QLabel(mainLabel);
        labelVideoInfo->show();
        labelVideoInfo->setGeometry(QRect(740,10,110,260));
        labelVideoInfo->setText("LOL");

        this->connect(socket,SIGNAL(readyRead()),this,SLOT(reading()));

        return mainLabel;
    }
    return 0;
    }
    const QMetaObject *metaObject( const QString &key ) const
    {
    if ( key == "QCheckBox" )
        return &QCheckBox::staticMetaObject;
    if ( key == "QRadioButton" )
        return &QRadioButton::staticMetaObject;
    if ( key == "QPushButton" )
        return &QPushButton::staticMetaObject;
    if ( key == "QLabel" )
        return &QLabel::staticMetaObject;

    return 0;
    }
    QUuid classID( const QString &key ) const
    {
    if ( key == "QCheckBox" )
        return "{6E795DE9-872D-43CF-A831-496EF9D86C68}";
    if ( key == "QRadioButton" )
        return "{AFCF78C8-446C-409A-93B3-BA2959039189}";
    if ( key == "QPushButton" )
        return "{2B262458-A4B6-468B-B7D4-CF5FEE0A7092}";
    if ( key == "QLabel" )
        return "{7c0ffe7a-60c3-4666-bde2-5cf2b54390a1}";

    return QUuid();
    }
    QUuid interfaceID( const QString &key ) const
    {
    if ( key == "QCheckBox" )
        return "{4FD39DD7-2DE0-43C1-A8C2-27C51A052810}";
    if ( key == "QRadioButton" )
        return "{7CC8AE30-206C-48A3-A009-B0A088026C2F}";
    if ( key == "QPushButton" )
        return "{06831CC9-59B6-436A-9578-6D53E5AD03D3}";
    if ( key == "QLabel" )
        return "{6726080f-d63d-4950-a366-9bf33e5cdf84}";

    return QUuid();
    }
    QUuid eventsID( const QString &key ) const
    {
    if ( key == "QCheckBox" )
        return "{FDB6FFBE-56A3-4E90-8F4D-198488418B3A}";
    if ( key == "QRadioButton" )
        return "{73EE4860-684C-4A66-BF63-9B9EFFA0CBE5}";
    if ( key == "QPushButton" )
        return "{3CC3F17F-EA59-4B58-BBD3-842D467131DD}";
    if ( key == "QLabel" )
        return "{f4d421fd-4ead-4fd9-8a25-440766939639}";

    return QUuid();
    }
private:
    QUdpSocket          *socket;
    QHostAddress        sender;
    quint16             senderPort;

    int                 packetID;
    qint64              size;
    QByteArray          datagram;

    QLabel              *labelVideoInfo;

public slots:
    void reading()
    {
        size=socket->pendingDatagramSize();
        datagram.resize(size);
        socket->readDatagram(datagram.data(),size,&sender,&senderPort);
        labelVideoInfo->setText(QString::number(size));
    }
signals:
    void changelabel(int i)
    {
        labelVideoInfo->setText(QString::number(i));
    }

};
//! [0] //! [1]

QAXFACTORY_EXPORT( ActiveQtFactory,
                   "{3B756301-0075-4E40-8BE8-5A81DE2426B7}",
                   "{AB068077-4924-406a-BBAF-42D91C8727DD}" )
//! [1]

Connect / сигналы не работают, я так думаю, из-за отсутствия макроса Q_OBJECT, но когда я раскомментирую макрос Q_OBJECT, у меня появляются коды ошибок:

main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall ActiveQtFactory::metaObject(void)const " (?metaObject@ActiveQtFactory@@UBEPBUQMetaObject@@XZ)

main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual void * __thiscall ActiveQtFactory::qt_metacast(char const *)" (?qt_metacast@ActiveQtFactory@@UAEPAXPBD@Z)

main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual int __thiscall ActiveQtFactory::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@ActiveQtFactory@@UAEHW4Call@QMetaObject@@HPAPAX@Z)

Может ли кто-нибудь помочь мне, как правильно получить эти пакеты?

0 ответов

Другие вопросы по тегам