QAxBase Class

QAxBase 클래스는 COM 개체를 초기화하고 액세스하는 API를 제공하는 추상 클래스입니다. 더 보기...

Header: #include <QAxBase>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxContainer)
target_link_libraries(mytarget PRIVATE Qt6::AxContainer)
qmake: QT += axcontainer
상속됨:

QAxObjectQAxWidget

공용 타입

공용 함수

virtual ~QAxBase()
QVariant asVariant() const
ulong classContext() const
void clear()
QString control() const
void disableClassInfo()
void disableEventSink()
void disableMetaObject()
QVariant dynamicCall(const char *function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())
QVariant dynamicCall(const char *function, QList<QVariant> &vars)
QString generateDocumentation()
bool isNull() const
QAxBase::PropertyBag propertyBag() const
virtual bool propertyWritable(const char *prop) const
long queryInterface(const QUuid &uuid, void **iface) const
QAxObject *querySubObject(const char *name, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())
QAxObject *querySubObject(const char *name, QList<QVariant> &vars)
void setClassContext(ulong classContext)
void setPropertyBag(const QAxBase::PropertyBag &bag)
virtual void setPropertyWritable(const char *prop, bool ok)
QStringList verbs() const

보호된 함수

QAxBase()
virtual bool initialize(IUnknown **ptr)
bool initializeActive(IUnknown **ptr)
bool initializeFromFile(IUnknown **ptr)
bool initializeLicensed(IUnknown **ptr)
bool initializeRemote(IUnknown **ptr)

상세 설명

QAxBase는 직접 사용할 수 없는 추상 클래스이며, 하위 클래스 QAxObjectQAxWidget 를 통해 인스턴스화됩니다. 이 클래스는 IUnknown 구현을 통해 COM 객체에 직접 액세스하는 API를 제공합니다. COM 객체가 IDispatch 인터페이스를 구현하면 해당 객체의 프로퍼티와 메서드를 Qt 프로퍼티와 슬롯으로 사용할 수 있게 됩니다.

connect(buttonBack, SIGNAL(clicked()), webBrowser, SLOT(GoBack()));

객체의 IDispatch 구현에 의해 노출된 프로퍼티는 Qt 객체 모델에서 제공하는 프로퍼티 시스템을 통해 읽고 쓸 수 있습니다(두 서브클래스 모두 QObjects이므로 QObject::setProperty() 및 QObject::property() 를 사용할 수 있습니다). 여러 매개 변수가 있는 프로퍼티는 지원되지 않습니다.

activeX->setProperty("text", "some text");
int value = activeX->property("value");

프로퍼티의 쓰기 함수와 객체의 IDispatch 구현에 의해 노출된 다른 메서드는 dynamicCall()를 사용하여 직접 호출하거나 신호에 연결된 슬롯으로 간접적으로 호출할 수 있습니다.

webBrowser->dynamicCall("GoHome()");

COM 객체가 지원하는 발신 이벤트는 표준 Qt 신호로 방출됩니다.

connect(webBrowser, SIGNAL(TitleChanged(QString)),
        this, SLOT(setCaption(QString)));

QAxBase는 COM 데이터 유형과 그에 상응하는 Qt 데이터 유형 간에 투명하게 변환합니다. 일부 COM 유형에는 동등한 Qt 데이터 구조가 없습니다.

지원되는 COM 데이터 유형은 다음 표의 첫 번째 열에 나열되어 있습니다. 두 번째 열은 QObject 속성 함수와 함께 사용할 수 있는 Qt 유형입니다. 세 번째 열은 생성된 신호의 프로토타입과 인-파라미터용 슬롯에 사용되는 Qt 유형이며, 마지막 열은 신호의 프로토타입과 아웃-파라미터용 슬롯에 사용되는 Qt 유형입니다.

COM 유형Qt 속성인-파라미터out-parameter
VARIANT_BOOLboolboolbool&
BSTRQStringconst QString&QString&
char, short, int, longintintint&
uchar, ushort, uint, ulonguintuintuint&
float, doubledoubledoubledouble&
DATEQDateTimeconst QDateTime&QDateTime&
CYqlonglongqlonglongqlonglong&
OLE_COLORQColorconst QColor&QColor&
safearray(variant)QList<QVariant>const QList<QVariant>&QList<QVariant>&
SAFEARRAY(int), SAFEARRAY(double), SAFEARRAY(Date)QList<QVariant>const QList<QVariant>&QList<QVariant>&
safearray(바이트)QByteArrayconst QByteArray&QByteArray&
safearray(bstr)QStringListconst QStringList&QStringList&
VARIANT유형 의존적const QVariant&QVariant&
IFontDisp*QFontconst QFont&QFont&
IPictureDisp*QPixmapconst QPixmap&QPixmap&
IDispatch*QAxObject*QAxBase::asVariant()QAxObject* (반환값)
IUnknown*QAxObject*QAxBase::asVariant()QAxObject* (반환 값)
코드, 십진수지원되지 않음지원되지 않음지원되지 않음
VARIANT* (Qt 4.5부터)지원되지 않음QVariant&QVariant&

열거형과 지원되는 형에 대한 typedef도 지원됩니다.

다음 IDL에 설명된 COM 인터페이스의 메서드를 호출하려면

dispinterface IControl
{
properties:
    [id(1)] BSTR text;
    [id(2)] IFontDisp *font;

methods:
    [id(6)] void showColumn([in] int i);
    [id(3)] bool addColumn([in] BSTR t);
    [id(4)] int fillList([in, out] SAFEARRAY(VARIANT) *list);
    [id(5)] IDispatch *item([in] int i);
};

에 설명된 COM 인터페이스의 메서드를 호출하려면 다음과 같이 QAxBase API를 사용합니다:

QAxObject object("<CLSID>");

QString text = object.property("text").toString();
object.setProperty("font", QFont("Times New Roman", 12));

connect(this, SIGNAL(clicked(int)), &object, SLOT(showColumn(int)));
bool ok = object.dynamicCall("addColumn(const QString&)", "Column 1").toBool();

QList<QVariant> varlist;
QList<QVariant> parameters;
parameters << QVariant(varlist);
int n = object.dynamicCall("fillList(QList<QVariant>&)", parameters).toInt();

QAxObject *item = object.querySubItem("item(int)", 5);

객체가 채워야 하는 QListQVariant의 매개변수 목록에 요소로 제공되어야 합니다.

지원되지 않는 데이터 유형의 속성에 액세스하거나 매개 변수를 전달해야 하는 경우 IDispatch 구현 또는 기타 인터페이스를 통해 COM 개체에 직접 액세스해야 합니다. 이러한 인터페이스는 queryInterface()를 통해 검색할 수 있습니다.

IUnknown *iface = 0;
activeX->queryInterface(IID_IUnknown, (void**)&iface);
if (iface) {
    // use the interface
    iface->Release();
}

COM 인터페이스의 정의를 얻으려면 사용하려는 컴포넌트와 함께 제공된 헤더 파일을 사용해야 합니다. 일부 컴파일러는 #import 컴파일러 지시문을 사용하여 유형 라이브러리를 가져올 수도 있습니다. 컴포넌트 설명서를 참조하여 어떤 타입 라이브러리를 가져와야 하는지, 어떻게 사용하는지 알아보세요.

지원되지 않는 데이터 타입의 매개변수를 전달하는 이벤트에 반응해야 하는 경우 COM 이벤트에서 제공하는 대로 이벤트 데이터를 전달하는 일반 신호를 사용할 수 있습니다.

QAxObject, QAxWidget, QAxScript, ActiveQt 프레임워크도참조하세요 .

멤버 유형 문서

[alias] QAxBase::PropertyBag

프로퍼티를 이름:값 쌍으로 저장할 수 있는 QMap<QString,QVariant>입니다.

멤버 함수 문서

[protected] QAxBase::QAxBase()

QAxBase 객체를 생성합니다.

[virtual noexcept] QAxBase::~QAxBase()

COM 개체를 종료하고 QAxBase 개체를 삭제합니다.

clear()도 참조하세요 .

QVariant QAxBase::asVariant() const

COM 객체를 래핑하는 QVariant 을 반환합니다. 그런 다음 이 변형을 dynamicCall()에서 매개 변수로 사용할 수 있습니다.

ulong QAxBase::classContext() const

ActiveX 컨트롤이 실행될 컨텍스트를 반환합니다(기본값은 CLSCTX_SERVER).

setClassContext()도 참조하세요 .

void QAxBase::clear()

COM 객체의 연결을 끊고 파기합니다.

이 함수를 다시 구현하는 경우 clear()를 호출하는 소멸자도 다시 구현하고 clear() 함수가 끝날 때 이 구현을 호출해야 합니다.

QString QAxBase::control() const

ActiveX 컨트롤을 반환합니다.

void QAxBase::disableClassInfo()

이 ActiveX 컨테이너에 대한 클래스 정보 생성을 비활성화합니다. ActiveX 컨트롤에 대한 클래스 정보가 필요하지 않은 경우 이 함수를 사용하여 메타 객체 생성 속도를 높일 수 있습니다.

이 함수는 객체를 생성한 직후에 호출해야 합니다.

void QAxBase::disableEventSink()

이 ActiveX 컨테이너에 대한 이벤트 싱크 구현을 비활성화합니다. ActiveX 컨트롤의 이벤트를 수신하지 않으려면 이 함수를 사용하여 메타 객체 생성 속도를 높이세요.

일부 ActiveX 컨트롤은 이벤트 싱크에 연결될 때 불안정할 수 있습니다. OLE 이벤트를 받으려면 표준 COM 메서드를 사용하여 자체 이벤트 싱크를 등록해야 합니다. queryInterface ()를 사용하여 원시 COM 개체에 액세스합니다.

이 함수는 객체를 생성한 직후에 호출해야 합니다.

void QAxBase::disableMetaObject()

이 ActiveX 컨테이너에 대한 메타 객체 생성을 비활성화합니다. 이벤트 싱크 및 클래스 정보 생성도 비활성화합니다. Qt 메타 객체 구현을 사용하지 않으려면 이 함수를 호출하여 컨트롤의 인스턴스화 속도를 높이십시오. dynamicCall ()를 통해 개체를 계속 호출할 수 있지만 신호, 슬롯 및 프로퍼티는 QObject API로 사용할 수 없습니다.

일부 ActiveX 컨트롤은 OLE 자동화와 함께 사용할 때 불안정할 수 있습니다. queryInterface ()에서 제공하는 COM 인터페이스를 통해 이러한 컨트롤을 사용하려면 표준 COM 메서드를 사용하세요.

이 함수는 객체를 구성한 직후에 호출해야 합니다.

QVariant QAxBase::dynamicCall(const char *function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())

COM 객체의 메서드 function 를 호출하여 var1, var1, var2, var3, var4, var5, var6, var7var8 매개 변수를 전달하고 메서드가 반환하는 값을 반환하거나 메서드가 값을 반환하지 않거나 함수 호출이 실패한 경우 잘못된 QVariant 을 반환합니다.

function 이 객체의 메서드인 경우 QObject::connect() 호출에서 작성되는 것과 같이 문자열을 전체 프로토타입으로 제공해야 합니다.

activeX->dynamicCall("Navigate(const QString&)", "www.qt-project.org");

또는 문자열에 포함된 매개변수를 전달하여 함수를 호출할 수도 있습니다(예: 위의 함수는 다음을 사용하여 호출할 수도 있습니다).

activeX->dynamicCall("Navigate(\"www.qt-project.org\")");

모든 매개변수는 문자열로 전달되며, 올바르게 해석되는지 여부는 제어에 따라 다르며 올바르게 입력된 매개변수가 있는 프로토타입을 사용하는 것보다 느립니다.

function 이 프로퍼티인 경우 문자열은 프로퍼티의 이름이어야 합니다. var1 가 유효한 QVariant 인 경우 속성 설정자가 호출되고, 그렇지 않은 경우 게터가 호출됩니다.

activeX->dynamicCall("Value", 5);
QString text = activeX->dynamicCall("Text").toString();

QObject::property() 및 QObject::setProperty()을 사용하여 속성을 가져오고 설정하는 것이 더 빠릅니다.

dynamicCall()은 disabled metaobject 래퍼를 사용하여 객체를 호출하는 데에도 사용할 수 있으며, 특히 자동화 프로세스 중에 다양한 유형의 여러 객체를 호출할 때 성능을 크게 향상시킬 수 있습니다. 그러나 ActiveQt는 매개변수의 유효성을 검사하지 않습니다.

QVariant 에서 지원하는 데이터 타입의 매개변수나 반환값이 있는 함수만 dynamicCall()을 통해 호출할 수 있습니다. 지원되는 데이터 타입과 지원되지 않는 데이터 타입 목록은 QAxBase 클래스 설명서를 참조하세요. 매개 변수 목록에 지원되지 않는 데이터 유형이 있는 함수를 호출하려면 queryInterface()를 사용하여 적절한 COM 인터페이스를 검색한 다음 해당 함수를 직접 사용하세요.

IWebBrowser2 *webBrowser = 0;
activeX->queryInterface(IID_IWebBrowser2, (void **)&webBrowser);
if (webBrowser) {
    webBrowser->Navigate2(pvarURL);
    webBrowser->Release();
}

이 방법도 더 효율적입니다.

QVariant QAxBase::dynamicCall(const char *function, QList<QVariant> &vars)

이 함수는 오버로드된 함수입니다.

COM 객체의 메서드 function 를 호출하여 vars 에 매개 변수를 전달하고 메서드에서 반환된 값을 반환합니다. 메서드가 값을 반환하지 않거나 함수 호출이 실패하면 이 함수는 잘못된 QVariant 객체를 반환합니다.

varsQVariant 객체는 메서드에 아웃 파라미터가 있을 때 업데이트됩니다.

QString QAxBase::generateDocumentation()

래핑된 COM 객체에 대한 설명이 포함된 서식 있는 텍스트 문자열을 반환합니다. 문자열을 HTML 파일에 덤프하거나 QTextBrowser 위젯 등에 사용합니다.

[virtual protected] bool QAxBase::initialize(IUnknown **ptr)

이 가상 함수는 setControl()에 의해 호출되며 요청된 COM 개체를 생성합니다. ptr 은 개체의 IUnknown 구현으로 설정됩니다. 이 함수는 객체 초기화에 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

기본 구현은 control()가 반환한 문자열을 해석하여 해당 문자열이 각 패턴과 일치하는 경우 initializeRemote(), initializeLicensed() 또는 initializeActive()를 호출합니다. control ()가 기존 파일의 이름인 경우 initializeFromFile()가 호출됩니다. 일치하는 패턴이 없거나 원격 또는 라이선스 초기화에 실패하면 CoCreateInstance가 직접 개체를 만드는 데 사용됩니다.

지원되는 패턴에 대한 자세한 내용은 QAxBaseWidget::control 속성 설명서를 참조하세요.

ptr 에서 반환된 인터페이스는 이 함수가 반환될 때 정확히 한 번만 참조되어야 합니다. 예를 들어 CoCreateInstance에서 제공하는 인터페이스는 이미 참조되었으므로 다시 참조할 필요가 없습니다.

[protected] bool QAxBase::initializeActive(IUnknown **ptr)

현재 컴퓨터에서 실행 중인 활성 인스턴스에 연결하고 ptr 에서 실행 중인 객체에 대한 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

이 함수는 제어 문자열에 "}&" 하위 문자열이 포함된 경우 initialize()에 의해 호출됩니다.

initialize()도 참조하세요 .

[protected] bool QAxBase::initializeFromFile(IUnknown **ptr)

제어 속성에서 파일 이름을 처리하는 COM 개체를 만들고 ptr 에 있는 개체에 대한 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

이 함수는 제어 문자열이 기존 파일의 이름인 경우 initialize()에 의해 호출됩니다.

initialize()도 참조하세요 .

[protected] bool QAxBase::initializeLicensed(IUnknown **ptr)

라이선스가 부여된 컨트롤의 인스턴스를 생성하고 ptr 의 개체에 대한 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

이 함수는 제어 문자열에 "}:"라는 부분 문자열이 포함된 경우 initialize()에 의해 호출됩니다. 라이선스 키는 이 하위 문자열 뒤에 와야 합니다.

initialize()도 참조하세요 .

[protected] bool QAxBase::initializeRemote(IUnknown **ptr)

원격 서버에 인스턴스를 생성하고 ptr 에 있는 객체에 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

이 함수는 제어 문자열에 "/{" 하위 문자열이 포함된 경우 initialize()에 의해 호출됩니다. 원격 컴퓨터에 대한 정보는 하위 문자열 앞에 제공해야 합니다.

initialize()도 참조하세요 .

bool QAxBase::isNull() const

이 래퍼에 의해 로드된 COM 객체가 없으면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

control()도 참조하세요 .

QAxBase::PropertyBag QAxBase::propertyBag() const

COM 개체에 의해 노출된 모든 속성의 이름:값 맵을 반환합니다.

COM 개체가 속성 가방을 지원하는 경우 여러 속성을 개별적으로 가져오는 것보다 더 효율적입니다.

경고: COM 개체의 속성 백 구현이 모든 속성을 반환하거나 반환된 속성이 IDispatch 인터페이스를 통해 사용할 수 있는 속성과 동일하다는 보장은 없습니다.

setPropertyBag()도 참조하세요 .

[virtual] bool QAxBase::propertyWritable(const char *prop) const

prop 속성이 쓰기 가능하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다. 기본적으로 모든 속성은 쓰기 가능합니다.

경고: 컨트롤 구현에 따라 일부 속성에서는 이 설정이 무시될 수 있습니다.

setPropertyWritable(), QAxBaseWidget::propertyChanged() 및 QAxBaseObject::propertyChanged()도 참조하세요 .

long QAxBase::queryInterface(const QUuid &uuid, void **iface) const

COM 객체에서 uuid 인터페이스를 요청하고 iface 값을 제공된 인터페이스로 설정하거나 요청된 인터페이스를 제공할 수 없는 경우 0으로 설정합니다.

COM 객체의 QueryInterface 구현 결과를 반환합니다.

control()도 참조하세요 .

QAxObject *QAxBase::querySubObject(const char *name, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())

메서드 또는 속성 name 이 제공한 COM 객체를 감싸고 var1, var1, var2, var3, var4, var5, var6, var7var8 매개 변수를 전달하는 QAxObject 에 대한 포인터를 반환합니다.

name 이 메서드에서 제공된 경우 문자열에는 전체 함수 프로토타입이 포함되어야 합니다.

name 이 프로퍼티인 경우 문자열은 프로퍼티 이름이어야 하며 var1, ... var8 은 무시됩니다.

반환된 QAxObject 은 이 객체( QAxObject 또는 QAxWidget 유형 중 하나)의 자식이며, 이 객체가 삭제되면 삭제됩니다. 그러나 반환된 객체를 직접 삭제하는 것이 안전하며, 하위 객체 목록을 반복할 때는 그렇게 해야 합니다.

COM 지원 애플리케이션에는 일반적으로 애플리케이션의 특정 요소를 디스패치 인터페이스로 게시하는 객체 모델이 있습니다. 이 메서드를 사용하여 객체 모델의 계층 구조를 탐색할 수 있습니다(예

QAxWidget outlook("Outlook.Application");
QAxObject *session = outlook.querySubObject("Session");
if (session) {
    QAxObject *defFolder = session->querySubObject(
                            "GetDefaultFolder(OlDefaultFolders)",
                            "olFolderContacts");
    //...
}

QAxObject *QAxBase::querySubObject(const char *name, QList<QVariant> &vars)

이 함수는 오버로드된 함수입니다.

varsQVariant 객체는 메서드에 아웃 파라미터가 있을 때 업데이트됩니다.

void QAxBase::setClassContext(ulong classContext)

ActiveX 컨트롤이 실행될 컨텍스트를 설정합니다. classContext

CoCreateInstance를 호출할 때 "dwClsContext" 인수에 영향을 줍니다. 이는 두 가지 대안을 모두 지원하는 컨트롤의 인-프로크 시작과 아웃-오브-프로크 시작을 제어하는 데 사용할 수 있습니다. 또한 CLSCTX_ENABLE_CLOAKING 및 가장 토큰과 함께 사용할 경우 제어 권한을 수정/축소하는 데 사용할 수 있습니다.

이 함수는 setControl() 전에 호출해야 효과를 볼 수 있습니다.

classContext()도 참조하세요 .

void QAxBase::setPropertyBag(const QAxBase::PropertyBag &bag)

COM 개체의 속성을 bag 에 있는 해당 값으로 설정합니다.

경고: COM 개체의 속성 가방 구현이 IDispatch 인터페이스를 통해 사용할 수 있는 것과 동일한 속성을 지원한다고 보장할 수 없으므로 propertyBag 함수에서 반환된 속성 가방만 설정해야 합니다.

propertyBag()도 참조하세요 .

[virtual] void QAxBase::setPropertyWritable(const char *prop, bool ok)

ok 이 참이면 prop 속성을 쓰기 가능으로 설정하고, 그렇지 않으면 prop 을 읽기 전용으로 설정합니다. 기본적으로 모든 속성은 쓰기 가능합니다.

경고: 컨트롤 구현에 따라 일부 속성에 대해서는 이 설정이 무시될 수 있습니다.

propertyWritable(), QAxBaseWidget::propertyChanged() 및 QAxBaseObject::propertyChanged()도 참조하세요 .

QStringList QAxBase::verbs() const

COM 객체가 실행할 수 있는 동사 목록을 반환합니다. 객체가 IOleObject를 구현하지 않거나 동사를 지원하지 않는 경우 이 함수는 빈 문자열 목록을 반환합니다.

OLE 기본 동사(OLEIVERB_SHOW 등)는 목록에 포함되지 않는다는 점에 유의하세요.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.