Files
TransPyC/includes/vqt6/_bridge.h
T

161 lines
7.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================
// vqt6/_bridge.h — C 桥接层头文件
//
// 作用: 把 Qt6 C++ API 包装成 extern "C" 函数,供 Viper FFI 调用
// 编译: 作为静态库 libvqt6_bridge.a 或动态库 vqt6_bridge.dll
// ============================================================
#ifndef VQT6_BRIDGE_H
#define VQT6_BRIDGE_H
#include <stddef.h>
#include <stdint.h>
#if defined(_WIN32)
# if defined(VQT6_BRIDGE_STATIC)
# define VQT6_API
# elif defined(VQT6_BRIDGE_BUILD)
# define VQT6_API __declspec(dllexport)
# else
# define VQT6_API __declspec(dllimport)
# endif
#else
# if defined(__GNUC__) && (__GNUC__ >= 4)
# define VQT6_API __attribute__((visibility("default")))
# else
# define VQT6_API
# endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
// ============================================================
// QString
// ============================================================
VQT6_API void* vqt6_qstring_create(const char* utf8);
VQT6_API size_t vqt6_qstring_to_utf8(void* qstr, char* buf, size_t buf_size);
VQT6_API void vqt6_qstring_free(void* qstr);
VQT6_API int vqt6_qstring_length(void* qstr);
VQT6_API int vqt6_qstring_is_empty(void* qstr);
VQT6_API int vqt6_qstring_equals(void* qstr, void* other);
VQT6_API void* vqt6_qstring_append(void* qstr, void* other);
VQT6_API void vqt6_asset_url_utf8(char* buf, int buf_size, const char* name);
// ============================================================
// QByteArray
// ============================================================
VQT6_API void* vqt6_qbytearray_create(const void* data, size_t size);
VQT6_API void* vqt6_qbytearray_data(void* qba, size_t* out_size);
VQT6_API size_t vqt6_qbytearray_size(void* qba);
VQT6_API void vqt6_qbytearray_free(void* qba);
// ============================================================
// QObject
// ============================================================
VQT6_API void vqt6_qobject_delete(void* obj);
VQT6_API void vqt6_qobject_delete_later(void* obj);
VQT6_API void vqt6_qobject_set_object_name(void* obj, void* name);
VQT6_API void* vqt6_qobject_object_name(void* obj);
VQT6_API void vqt6_qobject_set_parent(void* child, void* parent);
VQT6_API void* vqt6_qobject_parent(void* obj);
VQT6_API int vqt6_qobject_connect(void* sender, const char* signal_name,
void* receiver, const char* slot_name);
VQT6_API int vqt6_qobject_disconnect(void* sender, const char* signal_name,
void* receiver, const char* slot_name);
VQT6_API void vqt6_qobject_install_event_filter(void* watched, void* filter);
VQT6_API void vqt6_qobject_remove_event_filter(void* watched, void* filter);
// ============================================================
// QCoreApplication
// ============================================================
VQT6_API void* vqt6_qcoreapp_create(const char* app_name);
VQT6_API void* vqt6_qcoreapp_instance(void);
VQT6_API int vqt6_qcoreapp_exec(void* app);
VQT6_API void vqt6_qcoreapp_quit(void* app, int exit_code);
VQT6_API void vqt6_qcoreapp_exit(void* app, int exit_code);
VQT6_API void vqt6_qcoreapp_process_events(void* app, int flags);
VQT6_API void vqt6_qcoreapp_post_event(void* receiver, void* event);
VQT6_API int vqt6_qcoreapp_send_event(void* receiver, void* event);
VQT6_API void* vqt6_qcoreapp_organization_name(void* app);
VQT6_API void vqt6_qcoreapp_set_organization_name(void* app, void* name);
VQT6_API void* vqt6_qcoreapp_application_name(void* app);
VQT6_API void vqt6_qcoreapp_set_application_name(void* app, void* name);
// ============================================================
// QTimer
// ============================================================
VQT6_API void* vqt6_qtimer_create(void);
VQT6_API void* vqt6_qtimer_create_with_parent(void* parent);
VQT6_API void vqt6_qtimer_start(void* timer, int interval_ms);
VQT6_API void vqt6_qtimer_stop(void* timer);
VQT6_API void vqt6_qtimer_set_interval(void* timer, int interval_ms);
VQT6_API int vqt6_qtimer_interval(void* timer);
VQT6_API int vqt6_qtimer_is_active(void* timer);
VQT6_API void vqt6_qtimer_set_single_shot(void* timer, int single_shot);
VQT6_API int vqt6_qtimer_is_single_shot(void* timer);
// ============================================================
// QVariant
// ============================================================
VQT6_API void* vqt6_qvariant_create_int(int value);
VQT6_API void* vqt6_qvariant_create_double(double value);
VQT6_API void* vqt6_qvariant_create_bool(int value);
VQT6_API void* vqt6_qvariant_create_string(void* s);
VQT6_API int vqt6_qvariant_to_int(void* v, int* ok);
VQT6_API double vqt6_qvariant_to_double(void* v, int* ok);
VQT6_API int vqt6_qvariant_to_bool(void* v, int* ok);
VQT6_API void* vqt6_qvariant_to_string(void* v);
VQT6_API int vqt6_qvariant_type_id(void* v);
VQT6_API int vqt6_qvariant_is_valid(void* v);
VQT6_API void vqt6_qvariant_free(void* v);
// ============================================================
// QEvent
// ============================================================
VQT6_API int vqt6_qevent_type(void* event);
VQT6_API void vqt6_qevent_accept(void* event);
VQT6_API void vqt6_qevent_ignore(void* event);
VQT6_API int vqt6_qevent_is_accepted(void* event);
// ============================================================
// QStringList
// ============================================================
VQT6_API void* vqt6_qstringlist_create(void);
VQT6_API void vqt6_qstringlist_append(void* list, void* str);
VQT6_API int vqt6_qstringlist_size(void* list);
VQT6_API void* vqt6_qstringlist_at(void* list, int index);
VQT6_API void vqt6_qstringlist_free(void* list);
// ============================================================
// QByteArrayList
// ============================================================
VQT6_API void* vqt6_qbytearraylist_create(void);
VQT6_API void vqt6_qbytearraylist_append(void* list, void* qba);
VQT6_API int vqt6_qbytearraylist_size(void* list);
VQT6_API void* vqt6_qbytearraylist_at(void* list, int index);
VQT6_API void vqt6_qbytearraylist_free(void* list);
// ============================================================
// 全局回调注册表
// ============================================================
typedef void (*vqt6_slot_callback_t)(int slot_id, void* user_data);
VQT6_API void vqt6_register_slot(int slot_id, void* user_data);
VQT6_API void vqt6_unregister_slot(int slot_id);
VQT6_API void vqt6_trigger_slot(int slot_id);
// 分配新 slot_id 并注册回调(信号→回调桥梁,Qt 信号触发时调用 cb(slot_id, user_data))
VQT6_API int vqt6_signal_register(vqt6_slot_callback_t cb, void* user_data);
VQT6_API void vqt6_signal_unregister(int slot_id);
// ============================================================
// 信号连接(QTimer → timeout)
// ============================================================
VQT6_API void vqt6_qtimer_connect_timeout(void* timer, vqt6_slot_callback_t cb, void* user_data);
#ifdef __cplusplus
}
#endif
#endif // VQT6_BRIDGE_H