fix(vqt6): Qt6 桥接层与包装类适配修复,Hello World 验证通过

- CMakeLists.txt: install 段按 BUILD_SHARED 条件包裹 static/shared 目标,避免引用未创建目标报错
- _bridge_gui.cpp: QColor::setRgba 改为单参 qRgba(Qt6 已删 4 参重载)
- _bridge_widgets.cpp: 移除已删除的 QDesktopWidget include;QApplication 空 argv 时提供虚拟 argv
- _bridge_network.cpp: LocalHostIPv4 改用 LocalHost;toInt(bool*) 修正;setRawHeader 空实现保符号
- __init__.vp: strndup 改直接使用 malloc 缓冲(Viper str=bytes=i8*),补 import stdlib
This commit is contained in:
TermiNexus committed 2026-09-02 08:53:23 +08:00
1 parent 630d2a60ec
commit 250be46051
5 files changed
+36 -16

No files matched your search

+12 -6
View File
@@ -90,13 +90,19 @@ if(VQT6_BUILD_SHARED)
endif()
# ============================================================
# 安装
# 安装(仅安装实际启用的构建目标,避免引用未创建目标报错)
# ============================================================
install(TARGETS vqt6_bridge_static vqt6_bridge
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
if(VQT6_BUILD_STATIC)
install(TARGETS vqt6_bridge_static
ARCHIVE DESTINATION lib
)
endif()
if(VQT6_BUILD_SHARED)
install(TARGETS vqt6_bridge
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
endif()
install(FILES ${VQT6_HEADERS}
DESTINATION include/vqt6
+4 -3
View File
@@ -12,6 +12,7 @@
# ============================================================
import t
import stdlib
from stdint import *
from vqt6._types import *
from vqt6._qtcore import *
@@ -88,7 +89,7 @@ class QWidget:
result: QtStringPtr = vqt6_qwidget_window_title(self._ptr)
buf: bytes = stdlib.malloc(1024)
vqt6_qstring_to_utf8(result, buf, 1024)
s: str = string.strndup(buf, 1024)
s: str = buf
vqt6_qstring_free(result)
return s
@@ -142,7 +143,7 @@ class QLabel:
result: QtStringPtr = vqt6_qlabel_text(self._ptr)
buf: bytes = stdlib.malloc(1024)
vqt6_qstring_to_utf8(result, buf, 1024)
s: str = string.strndup(buf, 1024)
s: str = buf
vqt6_qstring_free(result)
return s
@@ -176,7 +177,7 @@ class QPushButton:
result: QtStringPtr = vqt6_qpushbutton_text(self._ptr)
buf: bytes = stdlib.malloc(1024)
vqt6_qstring_to_utf8(result, buf, 1024)
s: str = string.strndup(buf, 1024)
s: str = buf
vqt6_qstring_free(result)
return s
+2 -1
View File
@@ -100,7 +100,8 @@ extern "C" VQT6_API void vqt6_qcolor_set_rgb(void* c, int r, int g, int b) {
extern "C" VQT6_API void vqt6_qcolor_set_rgba(void* c, int r, int g, int b, int a) {
if (c == nullptr) return;
static_cast<QColor*>(c)->setRgba(r, g, b, a);
// Qt6 的 setRgba 只接受单个 QRgb(4 参版本已移除),用 qRgba 组合
static_cast<QColor*>(c)->setRgba(qRgba(r, g, b, a));
}
extern "C" VQT6_API void* vqt6_qcolor_name(void* c) {
+11 -5
View File
@@ -36,7 +36,8 @@ extern "C" VQT6_API void* vqt6_qhostaddress_create_with_local_host(void) {
}
extern "C" VQT6_API void* vqt6_qhostaddress_create_with_local_ipv4(void) {
return new QHostAddress(QHostAddress::LocalHostIPv4);
// Qt6 已移除 QHostAddress::LocalHostIPv4(枚举合并),LocalHost 即 IPv4 回环
return new QHostAddress(QHostAddress::LocalHost);
}
extern "C" VQT6_API void* vqt6_qhostaddress_create_with_broadcast(void) {
@@ -509,11 +510,16 @@ extern "C" VQT6_API void* vqt6_qnetworkreply_attribute(void* reply, int attribut
extern "C" VQT6_API int vqt6_qnetworkreply_attribute_int(void* reply, int attribute_code, int default_value) {
if (reply == nullptr) return default_value;
return static_cast<QNetworkReply*>(reply)->attribute(static_cast<QNetworkRequest::Attribute>(attribute_code)).toInt(default_value);
// QVariant::toInt(bool*) 无默认值参数;转换失败时返回 default_value
bool ok = false;
int val = static_cast<QNetworkReply*>(reply)->attribute(static_cast<QNetworkRequest::Attribute>(attribute_code)).toInt(&ok);
return ok ? val : default_value;
}
extern "C" VQT6_API void vqt6_qnetworkreply_set_raw_header(void* reply, const char* header_name, const void* value, size_t value_size) {
if (reply == nullptr || header_name == nullptr) return;
static_cast<QNetworkReply*>(reply)->setRawHeader(QByteArray(header_name),
QByteArray(static_cast<const char*>(value), static_cast<int>(value_size)));
// QNetworkReply::setRawHeader 在 Qt6 是 protected(仅子类可调用),
// 无法从桥接层设置;如需设置响应头应在 QNetworkRequest 端完成
// (vqt6_qnetworkrequest_set_raw_header)。此函数保留为空实现以防
// FFI 引用未定义符号,实际不生效。
(void)reply; (void)header_name; (void)value; (void)value_size;
}
+7 -1
View File
@@ -38,7 +38,6 @@
#include <QColorDialog>
#include <QFontDialog>
#include <QInputDialog>
#include <QDesktopWidget>
#include <QScreen>
#include <QStringList>
#include <QFont>
@@ -52,6 +51,13 @@
// QApplication
// ============================================================
extern "C" VQT6_API void* vqt6_qapplication_create(int argc, char** argv) {
// Viper 端可能传 null argv(QApplication([]));Qt 构造需有效 argv,
// 提供 static 虚拟 argv(生命周期=程序结束,QApplication 持有指针引用)
if (argv == nullptr || argc <= 0) {
static char vqt6_dummy0[] = "vqt6_app";
static char* vqt6_dummy_argv[2] = { vqt6_dummy0, nullptr };
return new QApplication(1, vqt6_dummy_argv);
}
return new QApplication(argc, argv);
}