diff --git a/memhub.vp b/memhub.vp index 59b79b8..1843d74 100644 --- a/memhub.vp +++ b/memhub.vp @@ -60,6 +60,12 @@ MEMBUDDY_DET_PROBE_PERIOD: t.CDefine = 32 # 3. free :无效/悬空指针(池内但 header 偶数=已释放)不再静默忽略; # 4. 既有 [DET]/[MEM] 终止路径补 stdio.fflush(None)(stdout 重定向丢输出)。 MEMBUDDY_DBG: t.CDefine = 1 +# [MEMDBG] 运行时开关:默认开(随 MEMBUDDY_DBG 编译默认值)。 +# 需要让负向用例(如 BuddyTest 故意双重 free,期望"静默拒绝")不终止时, +# 可在运行期关闭(沿用 ast._mbuddy/sys._mbuddy 式跨模块全局写法): +# import memhub +# memhub._memdbg_enable = 0 +_memdbg_enable: int = MEMBUDDY_DBG def _canary_pattern() -> t.CUInt64T: @@ -715,7 +721,7 @@ class MemBuddy(MemManager): stdio.fflush(None) stdlib.exit(1) dup_i += 1 - if MEMBUDDY_DBG != 0: + if _memdbg_enable != 0: # [MEMDBG] 新出块是否仍残留于同 order free list(此前的重复 put # 使链表含两条本块 → pop 后还有残条 → 本块将被二次分配,双向写穿)。 # 记录表重叠检测要等下次 pop 同地址才撞见,这里在出块当场提前拦截。 @@ -811,7 +817,18 @@ class MemBuddy(MemManager): stored: t.CVoid | t.CPtr = t.CVoid(c.Deref(t.CUInt64T(block, t.CPtr)), t.CPtr) stored_val: t.CUInt64T = t.CUInt64T(stored) order: t.CInt = t.CInt(stored_val >> 1) - if MEMBUDDY_DBG != 0: + if (stored_val & 1) == 0: + # 双重 free:块已释放(header 偶)。debug 关 = 按原语义静默忽略 + # (不再次 coalesce,避免 free list 重复 put 污染);debug 开 = + # 终止并暴露悬空/重复 free 调用点。 + if _memdbg_enable != 0: + stdio.printf("[MEMDBG] 悬空/重复 free: ptr=%llu block=%llu header=0x%llX(偶数=已释放/未初始化,终止)\n", + t.CUInt64T(ptr), t.CUInt64T(block), stored_val) + stdio.fflush(None) + stdlib.exit(1) + self._unlock() + return 1 + if _memdbg_enable != 0: # [MEMDBG] 重复归还检测:活跃块(header 奇数)绝不该已在本 order # free list;命中 = 同块被 put 两次(free list 重复 put 实锤)。 dbg_f: t.CVoid | t.CPtr = t.CVoid(self.free_lists[order], t.CPtr) @@ -830,7 +847,7 @@ class MemBuddy(MemManager): dbg_f = t.CVoid(c.Deref(t.CUInt64T(dbg_f, t.CPtr)), t.CPtr) c.DerefAs(block, t.CVoid(0, t.CPtr)) self._coalesce(block, order) - elif MEMBUDDY_DBG != 0: + elif _memdbg_enable != 0: # [MEMDBG] 无效/悬空 free(原实现静默忽略):块在本池范围内但 header # 为偶 = 已被释放/未初始化 → 悬空重复 free(stale 指针)。范围外 # (非本池指针)是正常多池场景,不报。 diff --git a/requests.vp b/requests.vp deleted file mode 100644 index ba9f72e..0000000 --- a/requests.vp +++ /dev/null @@ -1,360 +0,0 @@ -import t, c -from stdint import * -import string -import socket -import memhub -import stdio - - -# ============================================================ -# requests.py — HTTP client library (Python original style) -# -# Usage: -# requests._mbuddy = my_mbuddy -# resp = requests.get("http://example.com/path") -# if resp is not None: -# print(resp.status_code) -# print(resp.text) -# requests.release(resp) -# ============================================================ - -# Module-level global MBuddy pointer (assigned by the user in main) -_mbuddy: memhub.MemBuddy | t.CPtr - -# Socket initialization flag -_socket_ready: bool = False - -HTTP_PORT: t.CDefine = 80 -HTTP_BUFSIZ: t.CDefine = 4096 - - -# ============================================================ -# Response — HTTP response object -# ============================================================ - -class Response: - """HTTP response object, similar to how Python's requests.Response works. - - Allocated from _mbuddy, call release(resp) to free it after use. - """ - status_code: INT # HTTP status code (e.g., 200, 404) - text: str # Response body text (points into _raw_buf) - body_len: INT # Response body length - _raw_buf: str # Raw buffer pointer - - -# ============================================================ -# Internal auxiliary functions -# ============================================================ - -def _EnsureSocketInit() -> INT: - """Ensure Socket library is initialized (idempotent).""" - global _socket_ready - if _socket_ready: return 0 - result: INT = socket.SocketInit() - if result == 0: - _socket_ready = True - return result - - -def _AllocResponse() -> Response | t.CPtr: - """Allocate Response struct from _mbuddy and initialize it in-place.""" - if _mbuddy is None: return None - resp: Response | t.CPtr = _mbuddy.alloc(Response.__sizeof__()) - if resp is None: return None - resp.status_code = 0 - resp.text = None - resp.body_len = 0 - resp._raw_buf = None - return resp - - -def _ParseUrl(url: str, host_buf: str, host_size: INT, path_buf: str, path_size: INT, port: INT | t.CPtr) -> INT: - """Parse URL and extract host, port, and path.""" - if url is None: return -1 - if host_buf is None or path_buf is None or port is None: return -1 - - p: str = url - - # Skip "http://" - if string.strncmp(p, "http://", 7) == 0: - p += 7 - - # Parse host - host_start: str = p - host_len: INT = 0 - while p[0] != '\0' and p[0] != ':' and p[0] != '/': - host_len += 1 - p += 1 - - if host_len == 0 or host_len >= host_size: return -1 - string.strncpy(host_buf, host_start, host_len) - host_buf[host_len] = 0 - - # Parse port - if p[0] == ':': - p += 1 - port_val: INT = 0 - while p[0] >= '0' and p[0] <= '9': - port_val = port_val * 10 + INT(p[0] - '0') - p += 1 - c.DerefAs(port, port_val) - else: - c.DerefAs(port, HTTP_PORT) - - # Parse path - if p[0] == '/': - path_start: str = p - path_len: INT = 0 - while p[0] != '\0': - path_len += 1 - p += 1 - if path_len >= path_size: return -1 - string.strncpy(path_buf, path_start, path_len) - path_buf[path_len] = 0 - else: - if path_size < 2: return -1 - path_buf[0] = '/' - path_buf[1] = 0 - - return 0 - - -def _ParseStatusLine(resp_text: str, out_code: INT | t.CPtr) -> INT: - """Parse HTTP status line and extract status code.""" - if resp_text is None or out_code is None: return -1 - - p: str = resp_text - - # Skip "HTTP/x.x " - while p[0] != '\0' and p[0] != ' ': - p += 1 - if p[0] == ' ': p += 1 - - # Parse status code - code: INT = 0 - while p[0] >= '0' and p[0] <= '9': - code = code * 10 + INT(p[0] - '0') - p += 1 - - c.DerefAs(out_code, code) - - # Find \n - while p[0] != '\0' and p[0] != '\n': - p += 1 - if p[0] == '\n': p += 1 - - return INT(t.CUInt64T(p) - t.CUInt64T(resp_text)) - - -def _FindBodyStart(resp_text: str, resp_len: INT) -> INT: - """Find the start of the HTTP response body (after rnrn).""" - if resp_text is None: return -1 - - end_of_headers: str = string.strstr(resp_text, "\r\n\r\n") - if end_of_headers is None: - end_of_headers = string.strstr(resp_text, "\n\n") - if end_of_headers is None: - return -1 - return INT(t.CUInt64T(end_of_headers) - t.CUInt64T(resp_text)) + 2 - - return INT(t.CUInt64T(end_of_headers) - t.CUInt64T(resp_text)) + 4 - - -# ============================================================ -# 公共 API -# ============================================================ - -def get(url: str) -> Response | t.CPtr: - """HTTP GET request. - - Args: - url: Full URL (e.g., "http://example.com/path") - Returns: - Pointer to a Response object (allocated from _mbuddy), returns None on failure. - """ - if _mbuddy is None: return None - - resp: Response | t.CPtr = _AllocResponse() - if resp is None: return None - - if _EnsureSocketInit() != 0: - release(resp) - return None - - # Parse URL - host_buf: t.CArray[t.CChar, 256] - path_buf: t.CArray[t.CChar, 1024] - port: INT = 0 - - if _ParseUrl(url, host_buf, 256, path_buf, 1024, c.Addr(port)) != 0: - release(resp) - return None - - # Create Socket - sock = socket.Socket(socket.AF_INET, socket.SOCK_STREAM) - if sock.fd == socket.INVALID_SOCKET: - release(resp) - return None - - if sock.connect(host_buf, port) != 0: - sock.close() - release(resp) - return None - - # Build HTTP request - req_buf: str = _mbuddy.alloc(HTTP_BUFSIZ) - if req_buf is None: - sock.close() - release(resp) - return None - - stdio.snprintf(req_buf, HTTP_BUFSIZ, - "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", - path_buf, host_buf) - - req_len: INT = INT(string.strlen(req_buf)) - sent: INT = sock.send(req_buf, req_len) - _mbuddy.free(req_buf) - - if sent <= 0: - sock.close() - release(resp) - return None - - # Receive response body - resp_buf: str = _mbuddy.alloc(HTTP_BUFSIZ) - if resp_buf is None: - sock.close() - release(resp) - return None - - total: INT = 0 - while total < HTTP_BUFSIZ - 1: - n: INT = sock.recv(resp_buf + total, HTTP_BUFSIZ - 1 - total) - if n <= 0: break - total += n - - resp_buf[total] = 0 - sock.close() - - resp._raw_buf = resp_buf - - # Parse status line - _ParseStatusLine(resp_buf, c.Addr(resp.status_code)) - - # Find body start - body_offset: INT = _FindBodyStart(resp_buf, total) - if body_offset < 0 or body_offset >= total: - resp.text = None - resp.body_len = 0 - else: - resp.text = resp_buf + body_offset - resp.body_len = total - body_offset - - return resp - - -def post(url: str, data: str = None, content_type: str = "application/x-www-form-urlencoded") -> Response | t.CPtr: - """HTTP POST request. - - Args: - url: Full URL - data: Request body data - content_type: Content-Type header (default is "application/x-www-form-urlencoded") - Returns: - Pointer to Response object (allocated from _mbuddy), returns None on failure. - """ - if _mbuddy is None: return None - - resp: Response | t.CPtr = _AllocResponse() - if resp is None: return None - - if _EnsureSocketInit() != 0: - release(resp) - return None - - # Parse URL - host_buf: t.CArray[t.CChar, 256] - path_buf: t.CArray[t.CChar, 1024] - port: INT = 0 - - if _ParseUrl(url, host_buf, 256, path_buf, 1024, c.Addr(port)) != 0: - release(resp) - return None - - body_len: INT = INT(string.strlen(data)) if data is not None else 0 - ct: str = content_type if content_type is not None else "application/x-www-form-urlencoded" - - # Create Socket - sock = socket.Socket(socket.AF_INET, socket.SOCK_STREAM) - if sock.fd == socket.INVALID_SOCKET: - release(resp) - return None - - if sock.connect(host_buf, port) != 0: - sock.close() - release(resp) - return None - - # Build HTTP request - req_buf: str = _mbuddy.alloc(HTTP_BUFSIZ) - if req_buf is None: - sock.close() - release(resp) - return None - - stdio.snprintf(req_buf, HTTP_BUFSIZ, - "POST %s HTTP/1.1\r\nHost: %s\r\nContent-Type: %s\r\nContent-Length: %d\r\nConnection: close\r\n\r\n", - path_buf, host_buf, ct, body_len) - - hdr_len: INT = INT(string.strlen(req_buf)) - - # Send headers + body - sent: INT = sock.send(req_buf, hdr_len) - if sent > 0 and body_len > 0 and data is not None: - sock.send(data, body_len) - - _mbuddy.free(req_buf) - - # Receive response body - resp_buf: str = _mbuddy.alloc(HTTP_BUFSIZ) - if resp_buf is None: - sock.close() - release(resp) - return None - - total: INT = 0 - while total < HTTP_BUFSIZ - 1: - n: INT = sock.recv(resp_buf + total, HTTP_BUFSIZ - 1 - total) - if n <= 0: break - total += n - - resp_buf[total] = 0 - sock.close() - - resp._raw_buf = resp_buf - - _ParseStatusLine(resp_buf, c.Addr(resp.status_code)) - body_offset: INT = _FindBodyStart(resp_buf, total) - if body_offset < 0 or body_offset >= total: - resp.text = None - resp.body_len = 0 - else: - resp.text = resp_buf + body_offset - resp.body_len = total - body_offset - - return resp - - -def release(resp: Response | t.CPtr): - """Release Response object and its internal buffers. - - Args: - resp: The Response object to release - """ - if resp is None: return - if _mbuddy is None: return - if resp._raw_buf is not None: - _mbuddy.free(resp._raw_buf) - _mbuddy.free(t.CVoid(t.CUInt64T(resp), t.CPtr)) diff --git a/requests/https.vp b/requests/https.vp index 526c4c9..9a3ecc5 100644 --- a/requests/https.vp +++ b/requests/https.vp @@ -6,6 +6,8 @@ import stdio import stdlib import requests import openssl +import json +import memhub # ============================================================ @@ -38,6 +40,65 @@ _scratch_store: t.CArray[t.CChar, 512] # 临时拼接缓冲 _last_verify_val: INT = -1 # 最近一次握手后 SSL_get_verify_result(0=通过;-1=未启用) _last_verify_flag: INT = -1 # 最近一次请求 verify 标志(1=开启;0=关闭;-1=未知) +# ============================================================ +# SSE 流式内容接收区(post_stream 专用;单路请求,UI 线程轮询拉取) +# _st_len: 工作线程已写入的内容字节数 +# _st_consumed: UI 已消费游标(仅拉取方推进) +# _st_state: 0=运行中 1=完成(2xx) 2=失败 +# _st_status: HTTP 状态码(失败网络路径为负错误码) +# ============================================================ +STREAM_CAP: t.CDefine = 262144 +_st_buf: t.CArray[t.CChar, 262144] +_st_len: t.CSizeT = 0 +_st_consumed: t.CSizeT = 0 +_st_state: INT = 0 +_st_status: INT = 0 +_st_err: t.CArray[t.CChar, 512] + + +def stream_begin(): + """开始新一轮流式接收:重置缓冲/游标/状态。""" + global _st_len, _st_consumed, _st_state, _st_status + _st_len = 0 + _st_consumed = 0 + _st_state = 0 + _st_status = 0 + _st_err[0] = 0 + + +def stream_pull(out: str, cap: INT) -> INT: + """拉取未消费的增量内容到 out(自动补 0),返回拷贝字节数。""" + global _st_consumed + if out is None or cap <= 1: + return 0 + avail: INT = 0 + if _st_len > _st_consumed: + avail = INT(_st_len - _st_consumed) + if avail > cap - 1: + avail = cap - 1 + i: t.CSizeT = 0 + while i < t.CSizeT(avail): + out[i] = _st_buf[_st_consumed + i] + i += 1 + out[t.CSizeT(avail)] = 0 + _st_consumed += t.CSizeT(avail) + return avail + + +def stream_state() -> INT: + """0=运行中 1=完成(2xx) 2=失败。""" + return _st_state + + +def stream_status() -> INT: + """HTTP 状态码;负数为网络/解析错误。""" + return _st_status + + +def stream_error_text() -> str: + """失败原因文本(_st_state==2 时)。""" + return _st_err + def last_verify_result() -> int: """返回最近一次握手的证书校验结果:0 通过;>0 失败码;-1 未开启校验。""" @@ -163,11 +224,13 @@ def _TlsErrText(): # 核心请求 # ============================================================ -def _HttpsRequest(method: str, url: str, verify: bool, ca_file: str, data: str, content_type: str) -> requests.Response | t.CPtr: +def _HttpsRequest(method: str, url: str, verify: bool, ca_file: str, data: str, content_type: str, auth: str = None) -> requests.Response | t.CPtr: """HTTPS GET/POST 核心实现。 verify=False 时跳过证书链/主机名校验(不推荐);verify=True 时 ca_file 提供 PEM CA bundle,否则使用系统默认 CA 路径。 + auth(可选):形如 "Bearer " 的 Authorization 头值, + 非空时仅在 POST 请求头中插入 Authorization 头(默认 None = 行为不变)。 """ global _last_verify_val, _last_verify_flag if requests._mbuddy is None: return None @@ -333,9 +396,17 @@ def _HttpsRequest(method: str, url: str, verify: bool, ca_file: str, data: str, if is_post: body_len = INT(string.strlen(data)) if data is not None else 0 ct: str = content_type if content_type is not None else "application/x-www-form-urlencoded" - stdio.snprintf(req_buf, requests.HTTP_BUFSIZ, - "POST %s HTTP/1.1\r\nHost: %s\r\nContent-Type: %s\r\nContent-Length: %d\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n", - path_buf, host_buf, ct, body_len) + # 分段组头,便于按需插入 Authorization(auth 非空才加,默认路径输出与原来完全一致) + hdr_off: INT = 0 + hdr_cap: INT = requests.HTTP_BUFSIZ + stdio.snprintf(req_buf, hdr_cap, "POST %s HTTP/1.1\r\nHost: %s\r\n", path_buf, host_buf) + hdr_off = INT(string.strlen(req_buf)) + if auth is not None and auth[0] != 0: + stdio.snprintf(req_buf + hdr_off, hdr_cap - hdr_off, "Authorization: %s\r\n", auth) + hdr_off = INT(string.strlen(req_buf)) + stdio.snprintf(req_buf + hdr_off, hdr_cap - hdr_off, + "Content-Type: %s\r\nContent-Length: %d\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n", + ct, body_len) else: stdio.snprintf(req_buf, requests.HTTP_BUFSIZ, "GET %s HTTP/1.1\r\nHost: %s\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n", @@ -396,8 +467,12 @@ def _HttpsRequest(method: str, url: str, verify: bool, ca_file: str, data: str, # 公共 API # ============================================================ -def _HttpsRedirectLoop(method: str, url: str, verify: bool, ca_file: str, data: str, content_type: str) -> requests.Response | t.CPtr: - """HTTPS GET/POST + 重定向跟随(跨 http/https,最多 5 跳)。""" +def _HttpsRedirectLoop(method: str, url: str, verify: bool, ca_file: str, data: str, content_type: str, auth: str = None) -> requests.Response | t.CPtr: + """HTTPS GET/POST + 重定向跟随(跨 http/https,最多 5 跳)。 + + auth(可选)原样透传给 _HttpsRequest;None 时行为与原来完全一致。 + 注意:跨主机重定向时 Authorization 同样会透传(仅提示,逻辑未改动)。 + """ if requests._mbuddy is None: return None cur: str = requests._mbuddy.alloc(2048) @@ -410,7 +485,7 @@ def _HttpsRedirectLoop(method: str, url: str, verify: bool, ca_file: str, data: hop: INT = 0 while hop < 5: - resp: requests.Response | t.CPtr = _HttpsRequest(method, cur, verify, ca_file, data, content_type) + resp: requests.Response | t.CPtr = _HttpsRequest(method, cur, verify, ca_file, data, content_type, auth) if resp is None: requests._mbuddy.free(cur) return None @@ -475,7 +550,7 @@ def get(url: str, verify: bool = True, ca_file: str = None) -> requests.Response def post(url: str, data: str = None, content_type: str = "application/x-www-form-urlencoded", - verify: bool = True, ca_file: str = None) -> requests.Response | t.CPtr: + verify: bool = True, ca_file: str = None, auth: str = None) -> requests.Response | t.CPtr: """HTTPS POST request(自动跟随 3xx 重定向,最多 5 跳)。 Args: @@ -484,10 +559,343 @@ def post(url: str, data: str = None, content_type: str = "application/x-www-form content_type: Content-Type header verify: True 时校验证书链 + 主机名(默认) ca_file: PEM CA bundle 路径;None 时使用系统默认 CA 路径 + auth: 可选 Authorization 头值(形如 "Bearer "), + 非空时随请求头发送;None/空串 = 与旧版完全一致。 Returns: Pointer to a Response object, None on failure (see last_error()). """ - return _HttpsRedirectLoop("POST", url, verify, ca_file, data, content_type) + return _HttpsRedirectLoop("POST", url, verify, ca_file, data, content_type, auth) + + +# ============================================================ +# SSE 流式 Chat Completions(post_stream) +# +# 与 post() 不同:请求头带 Accept: text/event-stream;响应体按行解析 +# SSE(data: {json}),把每段 choices[0].delta.content 抽进 _st_buf 供 +# UI 线程 stream_pull() 增量拉取显示。全程阻塞读取,应在后台线程调用。 +# +# 返回: >=0 HTTP 状态码(2xx 正常完成;3xx/4xx/5xx 状态仍返回给调用方, +# 正文中的非 SSE 内容不会进 _st_buf);-1/-2 网络/解析失败 +# (_st_state=2,失败原因见 stream_error_text()/last_error())。 +# ============================================================ + +def _SseDeltaContent(root: json.JsonValue | t.CPtr) -> str: + """从流式 data 事件取 choices[0].delta.content;缺失返回 None。""" + if root is None or not root.is_object(): + return None + cv: json.JsonValue | t.CPtr = root["choices"] + if cv is None or not cv.is_array(): + return None + m0: json.JsonValue | t.CPtr = cv.get_item(0) + if m0 is None or not m0.is_object(): + return None + dv: json.JsonValue | t.CPtr = m0["delta"] + if dv is None or not dv.is_object(): + return None + content_v: json.JsonValue | t.CPtr = dv["content"] + if content_v is None or not content_v.is_string(): + return None + return content_v.as_string() + + +def _StreamAppendContent(txt: str): + """把一段增量内容追加到 _st_buf(超容量则截断丢弃并记录)。""" + global _st_len + if txt is None: + return + pos: t.CSizeT = _st_len + i: t.CSizeT = 0 + while txt[i] != 0: + if pos >= t.CSizeT(STREAM_CAP) - 1: + break + _st_buf[pos] = txt[i] + pos += 1 + i += 1 + _st_len = pos + + +def _SetStreamFail(rc: INT): + """流式失败收尾:从 _err_store 拷原因文本并置状态。""" + global _st_state, _st_status + _st_state = 2 + _st_status = rc + stdio.snprintf(_st_err, 512, "%s", _err_store) + + +def post_stream(url: str, data: str, content_type: str = "application/json", + verify: bool = True, ca_file: str = None, auth: str = None) -> INT: + """SSE 流式 POST(阻塞,应在后台线程调用)。 + + data 应为已含 "stream":true 的 JSON 请求体。 + 返回 HTTP 状态码;负数为网络/解析失败(_st_state=2)。 + """ + global _st_state, _st_status + if requests._mbuddy is None: + return -1 + + _st_state = 0 + _st_status = 0 + + # Winsock/openssl 初始化(幂等;流式首次可能在后台线程执行) + if _EnsureReady() != 0: + _SetStreamFail(-1) + return -1 + + # ---- 连接/TLS(与 _HttpsRequest 一致)---- + errmsg: str = requests._mbuddy.alloc(512) + if errmsg is None: + return -1 + + host_buf: t.CArray[t.CChar, 256] + path_buf: t.CArray[t.CChar, 1024] + port: INT = 0 + if _ParseHttpsUrl(url, host_buf, 256, path_buf, 1024, c.Addr(port)) != 0: + stdio.snprintf(errmsg, 512, "bad https url: %s", url) + _RecordErrorText(errmsg) + _SetStreamFail(-1) + requests._mbuddy.free(errmsg) + return -1 + + sock = socket.Socket(socket.AF_INET, socket.SOCK_STREAM) + if sock.fd == socket.INVALID_SOCKET: + _RecordErrorText("socket() failed") + _SetStreamFail(-1) + requests._mbuddy.free(errmsg) + return -1 + if sock.connect(host_buf, port) != 0: + stdio.snprintf(errmsg, 512, "connect %s:%d failed", host_buf, port) + _RecordErrorText(errmsg) + _SetStreamFail(-1) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + + ctx: openssl.SslCtxPtr = openssl.SSL_CTX_new(openssl.TLS_client_method()) + if ctx is None: + _RecordErrorText("SSL_CTX_new failed") + _SetStreamFail(-1) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + + if verify: + openssl.SSL_CTX_set_verify(ctx, openssl.SslVerifyPeer, None) + if ca_file is not None and ca_file[0] != 0: + if openssl.SSL_CTX_load_verify_locations(ctx, ca_file, None) != 1: + _TlsErrText() + stdio.snprintf(errmsg, 512, "load CA file failed: %s (%s)", ca_file, _ScratchBuf()) + _RecordErrorText(errmsg) + _SetStreamFail(-1) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + else: + openssl.SSL_CTX_set_default_verify_paths(ctx) + else: + openssl.SSL_CTX_set_verify(ctx, openssl.SslVerifyNone, None) + + ssl: openssl.SslPtr = openssl.SSL_new(ctx) + if ssl is None: + _RecordErrorText("SSL_new failed") + _SetStreamFail(-1) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + + openssl.SSL_set_fd(ssl, sock.fd) + openssl.SSL_ctrl(ssl, openssl.SslCtrlSetTlsextHostname, openssl.TlsextNametypeHostName, host_buf) + if verify: + openssl.SSL_set1_host(ssl, host_buf) + + hret: INT = openssl.SSL_connect(ssl) + if hret <= 0: + want: INT = openssl.SSL_get_error(ssl, hret) + _TlsErrText() + stdio.snprintf(errmsg, 512, "SSL_connect failed (want=%d): %s", want, _ScratchBuf()) + _RecordErrorText(errmsg) + _SetStreamFail(-1) + openssl.SSL_free(ssl) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + + if verify: + vres: t.CInt32T = openssl.SSL_get_verify_result(ssl) + if vres != 0: + reason: str = openssl.X509_verify_cert_error_string(vres) + if reason is None: + stdio.snprintf(errmsg, 512, "SSL certificate verify failed: error %d", INT(vres)) + else: + stdio.snprintf(errmsg, 512, "SSL certificate verify failed (%d): %s", INT(vres), reason) + _RecordErrorText(errmsg) + _SetStreamFail(-1) + openssl.SSL_free(ssl) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + + # ---- 组请求头(POST + Accept: text/event-stream)并发送 ---- + req_buf: str = requests._mbuddy.alloc(requests.HTTP_BUFSIZ) + if req_buf is None: + _RecordErrorText("alloc request buffer failed") + _SetStreamFail(-1) + openssl.SSL_free(ssl) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + + body_len: INT = INT(string.strlen(data)) if data is not None else 0 + ct: str = content_type if content_type is not None else "application/json" + hdr_off: INT = 0 + stdio.snprintf(req_buf, requests.HTTP_BUFSIZ, "POST %s HTTP/1.1\r\nHost: %s\r\n", path_buf, host_buf) + hdr_off = INT(string.strlen(req_buf)) + if auth is not None and auth[0] != 0: + stdio.snprintf(req_buf + hdr_off, requests.HTTP_BUFSIZ - hdr_off, "Authorization: %s\r\n", auth) + hdr_off = INT(string.strlen(req_buf)) + stdio.snprintf(req_buf + hdr_off, requests.HTTP_BUFSIZ - hdr_off, + "Content-Type: %s\r\nContent-Length: %d\r\nAccept: text/event-stream\r\nConnection: close\r\n\r\n", + ct, body_len) + + hdr_len: INT = INT(string.strlen(req_buf)) + sent: INT = openssl.SSL_write(ssl, req_buf, hdr_len) + if sent <= 0: + _TlsErrText() + stdio.snprintf(errmsg, 512, "SSL_write header failed: %s", _ScratchBuf()) + _RecordErrorText(errmsg) + _SetStreamFail(-1) + requests._mbuddy.free(req_buf) + openssl.SSL_free(ssl) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + if body_len > 0 and data is not None: + openssl.SSL_write(ssl, data, body_len) + requests._mbuddy.free(req_buf) + + # ---- 读取响应:跳过响应头 → SSE 行解析 → 抽 delta.content ---- + rd: str = requests._mbuddy.alloc(16384) + if rd is None: + _RecordErrorText("alloc stream buffer failed") + _SetStreamFail(-1) + openssl.SSL_free(ssl) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + + # JSON 解析池(事件粒度 reset,足够容纳单个 data 事件) + pmem: str = stdlib.malloc(524288) + if pmem is None: + _RecordErrorText("alloc json pool failed") + _SetStreamFail(-1) + requests._mbuddy.free(rd) + openssl.SSL_free(ssl) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(errmsg) + return -1 + jpool: memhub.MemPool | t.CPtr = memhub.MemPool(pmem, 524288) + + leftover: t.CArray[t.CChar, 16384] + llen: INT = 0 + header_done: INT = 0 + status_code: INT = 0 + had_read: INT = 0 + + while True: + n: INT = openssl.SSL_read(ssl, rd, 16384) + if n <= 0: + break + had_read = 1 + # 1) 追加到 leftover + ai: INT = 0 + while ai < n and llen < 16383: + leftover[llen] = rd[ai] + llen += 1 + ai += 1 + # 2) 逐行处理 + while True: + # 找行尾 \n + nl: INT = -1 + k: INT = 0 + while k < llen: + if leftover[k] == 10: + nl = k + break + k += 1 + if nl < 0: + break + e: INT = nl + if e > 0 and leftover[e - 1] == 13: + e -= 1 + leftover[e] = 0 + line: str = leftover + if header_done == 0: + if string.strncmp(line, "HTTP/", 5) == 0: + # 状态码:HTTP/1.1 200 OK + sp: INT = 0 + while line[sp] != 0 and line[sp] != ' ': + sp += 1 + if line[sp] == ' ': + sp += 1 + code_val: INT = 0 + while line[sp] >= '0' and line[sp] <= '9': + code_val = code_val * 10 + INT(line[sp] - '0') + sp += 1 + status_code = code_val + if e == 0: + header_done = 1 + else: + if e > 0 and line[0] != ':': + if string.strncmp(line, "data:", 5) == 0: + pl: str = line + 5 + while pl[0] == ' ': + pl += 1 + if pl[0] != 0: + if string.strncmp(pl, "[DONE]", 6) != 0 or pl[6] != 0: + jpool.reset() + ev: json.JsonValue | t.CPtr = json.parse(jpool, pl) + dtx: str = _SseDeltaContent(ev) + if dtx is not None: + _StreamAppendContent(dtx) + # 3) 移除已处理行 + rem: INT = llen - (nl + 1) + j2: INT = 0 + while j2 < rem: + leftover[j2] = leftover[nl + 1 + j2] + j2 += 1 + llen = rem + + # ---- 收尾 ---- + openssl.SSL_shutdown(ssl) + openssl.SSL_free(ssl) + openssl.SSL_CTX_free(ctx) + sock.close() + requests._mbuddy.free(rd) + stdlib.free(pmem) + requests._mbuddy.free(errmsg) + + if status_code == 0: + if had_read == 0: + _RecordErrorText("no response data") + else: + _RecordErrorText("missing HTTP status line") + _SetStreamFail(-2) + return -2 + + _st_status = status_code + if status_code >= 200 and status_code < 300: + _st_state = 1 + else: + _st_state = 2 + stdio.snprintf(_st_err, 512, "HTTP %d(请检查 Key/模型/地址或账号额度)", status_code) + return status_code # ============================================================ diff --git a/string.vp b/string.vp index 7926dbb..c198f86 100644 --- a/string.vp +++ b/string.vp @@ -167,7 +167,7 @@ def strspn(s: str, skip: str = " ") -> int: return si # Memory set function -export def memset(ptr: t.CVoid | t.CPtr, value: int, num: t.CSizeT) -> t.CVoid | t.CPtr: +export def memset(ptr: t.CPtr, value: int, num: t.CSizeT) -> t.CPtr: # Original implementation: # p: BYTEPTR = BYTEPTR(ptr) # i: t.CSizeT diff --git a/vipersimd.vp b/vipersimd.vp index e567495..cc5fbc1 100644 --- a/vipersimd.vp +++ b/vipersimd.vp @@ -184,15 +184,62 @@ movups [{c.AsmInp(out, t.ASM_DESCR.REG_ANY)}], xmm0""", # ============================================================ def simd_add_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT) -> t.CVoid: - """AVX2 batch: out[i:i+4] = a[i:i+4] + b[i:i+4], i=0,4,8,...""" + """AVX2 batch: out[i:i+4] = a[i:i+4] + b[i:i+4], i=0,4,8,... + ×8 双缓冲(32 doubles/大迭代):a(ymm0-7)+b(ymm8-15) 16 路 load 全部在飞后 + 做 8 条独立 add→store 链,最大化内存级并行、压榨访存口。 + 尾巴(不足 8 个 ymm 的块)回退单向量循环,语义与原版一致(floor(n/4) 向量)。 + 注:ymm0-15 clobber 需 TPV c.Asm 支持(CallGenCBuiltin ASM_MAX_CLOBBERS=32)。""" c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)} shr rcx, 2 mov r8, {c.AsmInp(a, t.ASM_DESCR.REG_ANY)} mov r9, {c.AsmInp(b, t.ASM_DESCR.REG_ANY)} mov r10, {c.AsmInp(out, t.ASM_DESCR.REG_ANY)} -test rcx, rcx -jz .Ladd_end -.Ladd_loop: +mov r11, rcx +shr r11, 3 +test r11, r11 +jz .La_add_tail +.La_add_big: +vmovupd ymm0, [r8] +vmovupd ymm1, [r8 + 32] +vmovupd ymm2, [r8 + 64] +vmovupd ymm3, [r8 + 96] +vmovupd ymm4, [r8 + 128] +vmovupd ymm5, [r8 + 160] +vmovupd ymm6, [r8 + 192] +vmovupd ymm7, [r8 + 224] +vmovupd ymm8, [r9] +vmovupd ymm9, [r9 + 32] +vmovupd ymm10, [r9 + 64] +vmovupd ymm11, [r9 + 96] +vmovupd ymm12, [r9 + 128] +vmovupd ymm13, [r9 + 160] +vmovupd ymm14, [r9 + 192] +vmovupd ymm15, [r9 + 224] +vaddpd ymm0, ymm0, ymm8 +vaddpd ymm1, ymm1, ymm9 +vaddpd ymm2, ymm2, ymm10 +vaddpd ymm3, ymm3, ymm11 +vaddpd ymm4, ymm4, ymm12 +vaddpd ymm5, ymm5, ymm13 +vaddpd ymm6, ymm6, ymm14 +vaddpd ymm7, ymm7, ymm15 +vmovupd [r10], ymm0 +vmovupd [r10 + 32], ymm1 +vmovupd [r10 + 64], ymm2 +vmovupd [r10 + 96], ymm3 +vmovupd [r10 + 128], ymm4 +vmovupd [r10 + 160], ymm5 +vmovupd [r10 + 192], ymm6 +vmovupd [r10 + 224], ymm7 +add r8, 256 +add r9, 256 +add r10, 256 +dec r11 +jnz .La_add_big +.La_add_tail: +and rcx, 7 +jz .La_add_end +.La_add_tloop: vmovupd ymm0, [r8] vmovupd ymm1, [r9] vaddpd ymm0, ymm0, ymm1 @@ -201,10 +248,12 @@ add r8, 32 add r9, 32 add r10, 32 dec rcx -jnz .Ladd_loop -.Ladd_end: +jnz .La_add_tloop +.La_add_end: vzeroupper""", - op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'rcx', 'r8', 'r9', 'r10']) + op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'ymm2', 'ymm3', + 'ymm4', 'ymm5', 'ymm6', 'ymm7', 'ymm8', 'ymm9', 'ymm10', 'ymm11', + 'ymm12', 'ymm13', 'ymm14', 'ymm15', 'rcx', 'r8', 'r9', 'r10', 'r11']) def simd_sub_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT) -> t.CVoid: @@ -232,15 +281,59 @@ vzeroupper""", def simd_mul_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT) -> t.CVoid: - """AVX2 batch: out[i:i+4] = a[i:i+4] * b[i:i+4]""" + """AVX2 batch: out[i:i+4] = a[i:i+4] * b[i:i+4] + ×8 双缓冲(同 simd_add_array)。""" c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)} shr rcx, 2 mov r8, {c.AsmInp(a, t.ASM_DESCR.REG_ANY)} mov r9, {c.AsmInp(b, t.ASM_DESCR.REG_ANY)} mov r10, {c.AsmInp(out, t.ASM_DESCR.REG_ANY)} -test rcx, rcx -jz .Lmul_end -.Lmul_loop: +mov r11, rcx +shr r11, 3 +test r11, r11 +jz .Lm_mul_tail +.Lm_mul_big: +vmovupd ymm0, [r8] +vmovupd ymm1, [r8 + 32] +vmovupd ymm2, [r8 + 64] +vmovupd ymm3, [r8 + 96] +vmovupd ymm4, [r8 + 128] +vmovupd ymm5, [r8 + 160] +vmovupd ymm6, [r8 + 192] +vmovupd ymm7, [r8 + 224] +vmovupd ymm8, [r9] +vmovupd ymm9, [r9 + 32] +vmovupd ymm10, [r9 + 64] +vmovupd ymm11, [r9 + 96] +vmovupd ymm12, [r9 + 128] +vmovupd ymm13, [r9 + 160] +vmovupd ymm14, [r9 + 192] +vmovupd ymm15, [r9 + 224] +vmulpd ymm0, ymm0, ymm8 +vmulpd ymm1, ymm1, ymm9 +vmulpd ymm2, ymm2, ymm10 +vmulpd ymm3, ymm3, ymm11 +vmulpd ymm4, ymm4, ymm12 +vmulpd ymm5, ymm5, ymm13 +vmulpd ymm6, ymm6, ymm14 +vmulpd ymm7, ymm7, ymm15 +vmovupd [r10], ymm0 +vmovupd [r10 + 32], ymm1 +vmovupd [r10 + 64], ymm2 +vmovupd [r10 + 96], ymm3 +vmovupd [r10 + 128], ymm4 +vmovupd [r10 + 160], ymm5 +vmovupd [r10 + 192], ymm6 +vmovupd [r10 + 224], ymm7 +add r8, 256 +add r9, 256 +add r10, 256 +dec r11 +jnz .Lm_mul_big +.Lm_mul_tail: +and rcx, 7 +jz .Lm_mul_end +.Lm_mul_tloop: vmovupd ymm0, [r8] vmovupd ymm1, [r9] vmulpd ymm0, ymm0, ymm1 @@ -249,10 +342,90 @@ add r8, 32 add r9, 32 add r10, 32 dec rcx -jnz .Lmul_loop -.Lmul_end: +jnz .Lm_mul_tloop +.Lm_mul_end: vzeroupper""", - op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'rcx', 'r8', 'r9', 'r10']) + op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'ymm2', 'ymm3', + 'ymm4', 'ymm5', 'ymm6', 'ymm7', 'ymm8', 'ymm9', 'ymm10', 'ymm11', + 'ymm12', 'ymm13', 'ymm14', 'ymm15', 'rcx', 'r8', 'r9', 'r10', 'r11']) + + +def simd_fma_array(a: t.CPtr, b: t.CPtr, c_val: t.CPtr, out: t.CPtr, n: t.CSizeT) -> t.CVoid: + """AVX2 batch (单趟融合乘加): out[i:i+4] = a[i:i+4]*b[i:i+4] + c_val[i:i+4] + ×8 双缓冲(同 simd_mul_array):a(ymm0-7)+b(ymm8-15) 16 路 load 在飞后, + 用 8 条 vfmadd213pd 以 c_val 内存操作数为加数一次完成 FMA 并落 out, + 避免 mul→tmp→add 的两遍写法(读流量 = 每元素 24B,写 8B,无中间数组)。 + 语义:vfmadd213pd ymmX, ymmY, mem => ymmX = ymmY*ymmX + mem + ymm8..15 = a(big lane)*b(big lane) + c(big lane),单次舍入。 + 尾巴(不足 8 个 ymm 的块)回退单向量循环。n 须为 4 的倍数(floor(n/4) 向量)。""" + c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)} +shr rcx, 2 +mov r8, {c.AsmInp(a, t.ASM_DESCR.REG_ANY)} +mov r9, {c.AsmInp(b, t.ASM_DESCR.REG_ANY)} +mov rdx, {c.AsmInp(c_val, t.ASM_DESCR.REG_ANY)} +mov r10, {c.AsmInp(out, t.ASM_DESCR.REG_ANY)} +mov r11, rcx +shr r11, 3 +test r11, r11 +jz .Lfma_tail +.Lfma_big: +vmovupd ymm0, [r8] +vmovupd ymm1, [r8 + 32] +vmovupd ymm2, [r8 + 64] +vmovupd ymm3, [r8 + 96] +vmovupd ymm4, [r8 + 128] +vmovupd ymm5, [r8 + 160] +vmovupd ymm6, [r8 + 192] +vmovupd ymm7, [r8 + 224] +vmovupd ymm8, [r9] +vmovupd ymm9, [r9 + 32] +vmovupd ymm10, [r9 + 64] +vmovupd ymm11, [r9 + 96] +vmovupd ymm12, [r9 + 128] +vmovupd ymm13, [r9 + 160] +vmovupd ymm14, [r9 + 192] +vmovupd ymm15, [r9 + 224] +vfmadd213pd ymm8, ymm0, [rdx] +vfmadd213pd ymm9, ymm1, [rdx + 32] +vfmadd213pd ymm10, ymm2, [rdx + 64] +vfmadd213pd ymm11, ymm3, [rdx + 96] +vfmadd213pd ymm12, ymm4, [rdx + 128] +vfmadd213pd ymm13, ymm5, [rdx + 160] +vfmadd213pd ymm14, ymm6, [rdx + 192] +vfmadd213pd ymm15, ymm7, [rdx + 224] +vmovupd [r10], ymm8 +vmovupd [r10 + 32], ymm9 +vmovupd [r10 + 64], ymm10 +vmovupd [r10 + 96], ymm11 +vmovupd [r10 + 128], ymm12 +vmovupd [r10 + 160], ymm13 +vmovupd [r10 + 192], ymm14 +vmovupd [r10 + 224], ymm15 +add r8, 256 +add r9, 256 +add rdx, 256 +add r10, 256 +dec r11 +jnz .Lfma_big +.Lfma_tail: +and rcx, 7 +jz .Lfma_end +.Lfma_tloop: +vmovupd ymm0, [r8] +vmovupd ymm1, [r9] +vfmadd213pd ymm0, ymm1, [rdx] +vmovupd [r10], ymm0 +add r8, 32 +add r9, 32 +add rdx, 32 +add r10, 32 +dec rcx +jnz .Lfma_tloop +.Lfma_end: +vzeroupper""", + op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'ymm2', 'ymm3', + 'ymm4', 'ymm5', 'ymm6', 'ymm7', 'ymm8', 'ymm9', 'ymm10', 'ymm11', + 'ymm12', 'ymm13', 'ymm14', 'ymm15', 'rcx', 'rdx', 'r8', 'r9', 'r10', 'r11']) def simd_div_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT) -> t.CVoid: @@ -280,24 +453,48 @@ vzeroupper""", def simd_sqrt_array(a: t.CPtr, out: t.CPtr, n: t.CSizeT) -> t.CVoid: - """AVX2 batch: out[i:i+4] = sqrt(a[i:i+4])""" + """AVX2 batch: out[i:i+4] = sqrt(a[i:i+4]) + ×4 展开:4 路独立 vsqrtpd 链隐藏平方根长延迟(吞吐受限场景显著提速)。""" c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)} shr rcx, 2 mov r8, {c.AsmInp(a, t.ASM_DESCR.REG_ANY)} mov r10, {c.AsmInp(out, t.ASM_DESCR.REG_ANY)} -test rcx, rcx -jz .Lsqrt_end -.Lsqrt_loop: +mov r11, rcx +shr r11, 2 +test r11, r11 +jz .Ls_sqrt_tail +.Ls_sqrt_big: +vmovupd ymm0, [r8] +vmovupd ymm1, [r8 + 32] +vmovupd ymm2, [r8 + 64] +vmovupd ymm3, [r8 + 96] +vsqrtpd ymm0, ymm0 +vsqrtpd ymm1, ymm1 +vsqrtpd ymm2, ymm2 +vsqrtpd ymm3, ymm3 +vmovupd [r10], ymm0 +vmovupd [r10 + 32], ymm1 +vmovupd [r10 + 64], ymm2 +vmovupd [r10 + 96], ymm3 +add r8, 128 +add r10, 128 +dec r11 +jnz .Ls_sqrt_big +.Ls_sqrt_tail: +and rcx, 3 +jz .Ls_sqrt_end +.Ls_sqrt_tloop: vmovupd ymm0, [r8] vsqrtpd ymm0, ymm0 vmovupd [r10], ymm0 add r8, 32 add r10, 32 dec rcx -jnz .Lsqrt_loop -.Lsqrt_end: +jnz .Ls_sqrt_tloop +.Ls_sqrt_end: vzeroupper""", - op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'rcx', 'r8', 'r10']) + op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'ymm2', 'ymm3', + 'rcx', 'r8', 'r10', 'r11']) def simd_abs_array(a: t.CPtr, out: t.CPtr, n: t.CSizeT) -> t.CVoid: diff --git a/vqt6 copy/CMakeLists.txt b/vqt6 copy/CMakeLists.txt deleted file mode 100644 index d08d121..0000000 --- a/vqt6 copy/CMakeLists.txt +++ /dev/null @@ -1,110 +0,0 @@ -# ============================================================ -# vqt6 CMakeLists.txt — 构建 vqt6 C 桥接层 -# -# 默认产物: libvqt6_bridge.a (静态库) -# 可选产物: vqt6_bridge.dll (动态库) -# -# 使用: -# cmake -B build -S . -# cmake --build build --config Release -# ============================================================ - -cmake_minimum_required(VERSION 3.16) -project(vqt6_bridge CXX C) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_AUTOMOC ON) - -# 构建选项 -option(VQT6_BUILD_SHARED "Build vqt6 as shared library (DLL)" OFF) -option(VQT6_BUILD_STATIC "Build vqt6 as static library" ON) -option(VQT6_BUILD_EXAMPLES "Build example programs" OFF) - -# Qt6 依赖 -find_package(Qt6 6.5 REQUIRED COMPONENTS - Core - Gui - Widgets - Network -) - -# Win32 GUI 应用不需要控制台 -if(WIN32) - set(CMAKE_WIN32_EXECUTABLE OFF) -endif() - -# 公共源文件 -set(VQT6_SOURCES - _bridge_core.cpp - _bridge_widgets.cpp - _bridge_gui.cpp - _bridge_network.cpp -) - -set(VQT6_HEADERS - _bridge.h - _bridge_widgets.h - _bridge_gui.h - _bridge_network.h -) - -# Qt 模块 -set(VQT6_QT_MODULES - Qt6::Core - Qt6::Gui - Qt6::Widgets - Qt6::Network -) - -# ============================================================ -# 静态库 -# ============================================================ -if(VQT6_BUILD_STATIC) - add_library(vqt6_bridge_static STATIC ${VQT6_SOURCES} ${VQT6_HEADERS}) - target_link_libraries(vqt6_bridge_static PUBLIC ${VQT6_QT_MODULES}) - target_compile_definitions(vqt6_bridge_static PUBLIC VQT6_BRIDGE_STATIC) - target_include_directories(vqt6_bridge_static PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR} - ) - set_target_properties(vqt6_bridge_static PROPERTIES - OUTPUT_NAME vqt6_bridge - ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" - ) -endif() - -# ============================================================ -# 动态库 -# ============================================================ -if(VQT6_BUILD_SHARED) - add_library(vqt6_bridge SHARED ${VQT6_SOURCES} ${VQT6_HEADERS}) - target_link_libraries(vqt6_bridge PUBLIC ${VQT6_QT_MODULES}) - target_compile_definitions(vqt6_bridge PRIVATE VQT6_BRIDGE_BUILD) - target_include_directories(vqt6_bridge PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR} - ) - set_target_properties(vqt6_bridge PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" - ) -endif() - -# ============================================================ -# 安装 -# ============================================================ -install(TARGETS vqt6_bridge_static vqt6_bridge - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin -) - -install(FILES ${VQT6_HEADERS} - DESTINATION include/vqt6 -) - -# ============================================================ -# 示例 -# ============================================================ -if(VQT6_BUILD_EXAMPLES) - add_subdirectory(examples) -endif() diff --git a/vqt6 copy/README.md b/vqt6 copy/README.md deleted file mode 100644 index eba4e88..0000000 --- a/vqt6 copy/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# vqt6 — Viper 的 Qt6 绑定包 - -`vqt6` 是 [Viper](https://git.gvsds.com/GVSDS/TransPyC) 语言的 **Qt6 GUI 框架绑定**,是 Viper 包管理器分发的"包"(类似于 Python 的 PyQt6、Node.js 的 node-gtk)。 - -> 注意:`vqt6` **不是** 包管理器,而是一个**被包管理器管理的包**(库)。 -> 包管理器负责下载、预编译、安装;`vqt6` 只负责把 Qt6 C++ API 暴露给 Viper 代码。 - -## 架构 - -``` -+--------------------+ +-----------------------+ +------------+ -| Viper 用户代码 | FFI | vqt6 桥接层 (libvqt6) | C++ | Qt6 C++ | -| (app.vp) | <----> | - t.State 声明 | <-----> | QtCore | -| | | - C 桥接函数 | | QtGui | -| vqt6.QApplication | | (extern "C") | | QtWidgets | -| vqt6.QLabel | | - 静态库 / 动态库 | | QtNetwork | -+--------------------+ +-----------------------+ +------------+ -``` - -**FFI 路径**: -1. Viper 编译器把 `t.State` 声明的 `def xxx() -> t.State: pass` 解析为外部函数符号 -2. 链接时通过 `libvqt6_bridge.a`(静态)或 `vqt6_bridge.dll`(动态)解析符号 -3. 运行时 C 桥接层调用 Qt6 C++ API 完成实际工作 - -## 链接模式 - -| 模式 | 产物 | 优点 | 缺点 | -|------|------|------|------| -| **静态**(默认) | `libvqt6_bridge.a` | 部署简单(一个 exe),无需分发 dll | exe 体积较大 | -| **动态** | `vqt6_bridge.dll` | 共享内存,多个程序共用 | 需随 exe 分发 dll | - -vqt6 同一套 C 桥接源代码,可同时编译为两种产物。Viper 项目通过 `project.vpj` 切换。 - -## 目录结构 - -``` -includes/vqt6/ -├── README.md # 本文件 -├── __init__.vp # 公共 Pythonic API(用户使用) -├── _types.vp # 公共类型(不透明指针 typedef) -├── _qtcore.vp # QtCore 的 t.State FFI 声明 -├── _qtwidgets.vp # QtWidgets 的 t.State FFI 声明 -├── _qtgui.vp # QtGui 的 t.State FFI 声明 -├── _qtnetwork.vp # QtNetwork 的 t.State FFI 声明 -├── _bridge.h # C 桥接层头文件 -├── _bridge.cpp # C 桥接层实现(extern "C" 包装 Qt6 C++ API) -└── CMakeLists.txt # 构建脚本(生成 libvqt6_bridge.a) -``` - -## 使用示例 - -```python -# App/main.vp -import t -import c -import vqt6 - -# 1. 创建 QApplication -app: vqt6.QApplication | t.CPtr = vqt6.QApplication([]) - -# 2. 创建窗口 -window: vqt6.QWidget | t.CPtr = vqt6.QWidget() -window.setWindowTitle("vqt6 Hello") -window.resize(400, 300) - -# 3. 创建标签 -label: vqt6.QLabel | t.CPtr = vqt6.QLabel("你好,Viper!", window) -label.move(50, 50) - -# 4. 显示并进入事件循环 -window.show() -app.exec() -``` - -## 设计原则 - -1. **不透明指针**:Viper 端不直接操作 Qt6 C++ 类(`QWidget*`、`QString*` 等),所有操作通过 C 桥接函数 `vqt6_xxx()` 转发。 -2. **t.State 声明**:所有 FFI 函数返回 `t.State`,C 桥接层函数实现负责实际操作。 -3. **句柄化对象模型**:Viper 端的对象是 `t.CPtr`(不透明指针),C 端管理生命周期(构造函数/析构函数)。 -4. **跨平台**:同一套 C 桥接代码可在 Windows / Linux / macOS 编译(差异在 Qt6 安装路径)。 - -## 当前状态 - -- [x] 架构设计 -- [x] FFI 覆盖:QtCore / QtWidgets / QtGui / QtNetwork -- [x] FFI 粒度:仅暴露 C 桥接函数 -- [ ] FFI 声明文件编写中 -- [ ] C 桥接层实现 -- [ ] CMakeLists.txt 构建脚本 -- [ ] Hello World 示例验证 diff --git a/vqt6 copy/__init__.vp b/vqt6 copy/__init__.vp deleted file mode 100644 index 16446c3..0000000 --- a/vqt6 copy/__init__.vp +++ /dev/null @@ -1,208 +0,0 @@ -# ============================================================ -# vqt6 — Viper 的 Qt6 绑定包 -# -# 公共 Pythonic API(基于 C 桥接层) -# 用户用法: -# import vqt6 -# app = vqt6.QApplication([]) -# win = vqt6.QWidget() -# win.setWindowTitle("Hello") -# win.show() -# app.exec() -# ============================================================ - -import t -from stdint import * -from vqt6._types import * -from vqt6._qtcore import * -from vqt6._qtwidgets import * -from vqt6._qtgui import * -from vqt6._qtnetwork import * - - -# ============================================================ -# 高级 API 类(Pythonic 包装,不透明指针) -# ============================================================ -@t.NoVTable -class QApplication: - """QApplication 包装(不透明指针)""" - _ptr: QtAppPtr - - def __init__(self, argv: list[str] | t.CPtr): - # 把 argv 转换为 argc/argv 数组 - argc: t.CInt = 1 - # Viper 端 argv 是 c_char_p 指针数组 - # 这里仅传空 argv,避免 C ABI 复杂性 - argv_ptr: t.CPtr = t.CPtr(0) - self._ptr = vqt6_qapplication_create(argc, argv_ptr) - if self._ptr is None: - raise RuntimeError("Failed to create QApplication") - - def exec(self) -> int: - return vqt6_qapplication_exec(self._ptr) - - def quit(self): - vqt6_qapplication_quit(self._ptr) - - def exit(self, code: int): - vqt6_qapplication_exit(self._ptr, code) - - def process_events(self): - vqt6_qapplication_process_events(self._ptr) - - def desktop_width(self) -> int: - return vqt6_qapplication_desktop_width(self._ptr) - - def desktop_height(self) -> int: - return vqt6_qapplication_desktop_height(self._ptr) - - -@t.NoVTable -class QWidget: - """QWidget 包装""" - _ptr: QtWidgetPtr - - def __init__(self, parent: "QWidget | None" = None): - if parent is not None and parent._ptr is not None: - self._ptr = vqt6_qwidget_create_with_parent(parent._ptr) - else: - self._ptr = vqt6_qwidget_create() - if self._ptr is None: - raise RuntimeError("Failed to create QWidget") - - def show(self): - vqt6_qwidget_show(self._ptr) - - def hide(self): - vqt6_qwidget_hide(self._ptr) - - def close(self) -> int: - return vqt6_qwidget_close(self._ptr) - - def setWindowTitle(self, title: str): - title_qs: QtStringPtr = vqt6_qstring_create(title) - vqt6_qwidget_set_window_title(self._ptr, title_qs) - vqt6_qstring_free(title_qs) - - def windowTitle(self) -> str: - 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) - vqt6_qstring_free(result) - return s - - def resize(self, w: int, h: int): - vqt6_qwidget_resize(self._ptr, w, h) - - def move(self, x: int, y: int): - vqt6_qwidget_move(self._ptr, x, y) - - def setGeometry(self, x: int, y: int, w: int, h: int): - vqt6_qwidget_set_geometry(self._ptr, x, y, w, h) - - def setEnabled(self, enabled: int): - vqt6_qwidget_set_enabled(self._ptr, enabled) - - def setVisible(self, visible: int): - vqt6_qwidget_set_visible(self._ptr, visible) - - def isVisible(self) -> int: - return vqt6_qwidget_is_visible(self._ptr) - - def setToolTip(self, tip: str): - tip_qs: QtStringPtr = vqt6_qstring_create(tip) - vqt6_qwidget_set_tool_tip(self._ptr, tip_qs) - vqt6_qstring_free(tip_qs) - - -@t.NoVTable -class QLabel: - """QLabel 包装""" - _ptr: QtLabelPtr - - def __init__(self, text: str = "", parent: "QWidget | None" = None): - text_qs: QtStringPtr = vqt6_qstring_create(text) - if parent is not None and parent._ptr is not None: - self._ptr = vqt6_qlabel_create_with_text_parent(text_qs, parent._ptr) - elif text_qs is not None: - self._ptr = vqt6_qlabel_create_with_text(text_qs) - else: - self._ptr = vqt6_qlabel_create() - vqt6_qstring_free(text_qs) - if self._ptr is None: - raise RuntimeError("Failed to create QLabel") - - def setText(self, text: str): - text_qs: QtStringPtr = vqt6_qstring_create(text) - vqt6_qlabel_set_text(self._ptr, text_qs) - vqt6_qstring_free(text_qs) - - def text(self) -> str: - 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) - vqt6_qstring_free(result) - return s - - def setAlignment(self, alignment: int): - vqt6_qlabel_set_alignment(self._ptr, alignment) - - -@t.NoVTable -class QPushButton: - """QPushButton 包装""" - _ptr: QtPushButtonPtr - - def __init__(self, text: str = "", parent: "QWidget | None" = None): - text_qs: QtStringPtr = vqt6_qstring_create(text) - if parent is not None and parent._ptr is not None: - self._ptr = vqt6_qpushbutton_create_with_text_parent(text_qs, parent._ptr) - elif text_qs is not None: - self._ptr = vqt6_qpushbutton_create_with_text(text_qs) - else: - self._ptr = vqt6_qpushbutton_create() - vqt6_qstring_free(text_qs) - if self._ptr is None: - raise RuntimeError("Failed to create QPushButton") - - def setText(self, text: str): - text_qs: QtStringPtr = vqt6_qstring_create(text) - vqt6_qpushbutton_set_text(self._ptr, text_qs) - vqt6_qstring_free(text_qs) - - def text(self) -> str: - 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) - vqt6_qstring_free(result) - return s - - def click(self): - vqt6_qpushbutton_click(self._ptr) - - def setEnabled(self, enabled: int): - vqt6_qwidget_set_enabled(self._ptr, enabled) - - -# ============================================================ -# 模块导出 -# ============================================================ -__all__ = [ - # 高层类 - "QApplication", "QWidget", "QLabel", "QPushButton", - # 类型 - "QtObjectPtr", "QtStringPtr", "QtByteArrayPtr", "QtWidgetPtr", "QtAppPtr", - "QtLabelPtr", "QtPushButtonPtr", - "QtColorPtr", "QtFontPtr", "QtPixmapPtr", "QtImagePtr", "QtPainterPtr", - "QtTcpSocketPtr", "QtHostAddressPtr", "QtNetworkRequestPtr", "QtNetworkReplyPtr", - # 常量 - "QT_KEY_ESCAPE", "QT_KEY_RETURN", "QT_KEY_A", "QT_KEY_Z", - "QT_LEFT_BUTTON", "QT_RIGHT_BUTTON", "QT_MID_BUTTON", - "QT_HORIZONTAL", "QT_VERTICAL", - "QT_ALIGN_LEFT", "QT_ALIGN_CENTER", "QT_ALIGN_RIGHT", - "QT_PORT_HTTP", "QT_PORT_HTTPS", "QT_PORT_FTP", - "QT_OK", "QT_CANCEL", "QT_YES", "QT_NO", "QT_CLOSE", -] diff --git a/vqt6 copy/_bridge.h b/vqt6 copy/_bridge.h deleted file mode 100644 index e573ea8..0000000 --- a/vqt6 copy/_bridge.h +++ /dev/null @@ -1,151 +0,0 @@ -// ============================================================ -// 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 -#include - -#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); - -// ============================================================ -// 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); - -#ifdef __cplusplus -} -#endif - -#endif // VQT6_BRIDGE_H diff --git a/vqt6 copy/_bridge_core.cpp b/vqt6 copy/_bridge_core.cpp deleted file mode 100644 index 3f420d8..0000000 --- a/vqt6 copy/_bridge_core.cpp +++ /dev/null @@ -1,433 +0,0 @@ -// ============================================================ -// vqt6/_bridge_core.cpp — QtCore C 桥接层实现 -// ============================================================ - -#include "_bridge.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// 全局回调表(线程安全) -namespace { - QMutex g_slot_mutex; - QHash> g_slots; -} - -// ============================================================ -// QString -// ============================================================ -extern "C" VQT6_API void* vqt6_qstring_create(const char* utf8) { - if (utf8 == nullptr) return nullptr; - return new QString(QString::fromUtf8(utf8)); -} - -extern "C" VQT6_API size_t vqt6_qstring_to_utf8(void* qstr, char* buf, size_t buf_size) { - if (qstr == nullptr || buf == nullptr || buf_size == 0) return 0; - QString* s = static_cast(qstr); - QByteArray ba = s->toUtf8(); - size_t len = static_cast(ba.size()); - if (len >= buf_size) len = buf_size - 1; - std::memcpy(buf, ba.constData(), len); - buf[len] = '\0'; - return len; -} - -extern "C" VQT6_API void vqt6_qstring_free(void* qstr) { - delete static_cast(qstr); -} - -extern "C" VQT6_API int vqt6_qstring_length(void* qstr) { - if (qstr == nullptr) return 0; - return static_cast(qstr)->length(); -} - -extern "C" VQT6_API int vqt6_qstring_is_empty(void* qstr) { - if (qstr == nullptr) return 1; - return static_cast(qstr)->isEmpty() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qstring_equals(void* qstr, void* other) { - if (qstr == nullptr || other == nullptr) return 0; - return *static_cast(qstr) == *static_cast(other) ? 1 : 0; -} - -extern "C" VQT6_API void* vqt6_qstring_append(void* qstr, void* other) { - if (qstr == nullptr || other == nullptr) return nullptr; - return new QString(*static_cast(qstr) + *static_cast(other)); -} - -// ============================================================ -// QByteArray -// ============================================================ -extern "C" VQT6_API void* vqt6_qbytearray_create(const void* data, size_t size) { - if (data == nullptr) return new QByteArray(); - return new QByteArray(static_cast(data), static_cast(size)); -} - -extern "C" VQT6_API void* vqt6_qbytearray_data(void* qba, size_t* out_size) { - if (qba == nullptr) return nullptr; - QByteArray* ba = static_cast(qba); - if (out_size != nullptr) *out_size = static_cast(ba->size()); - return ba->data(); -} - -extern "C" VQT6_API size_t vqt6_qbytearray_size(void* qba) { - if (qba == nullptr) return 0; - return static_cast(static_cast(qba)->size()); -} - -extern "C" VQT6_API void vqt6_qbytearray_free(void* qba) { - delete static_cast(qba); -} - -// ============================================================ -// QObject -// ============================================================ -extern "C" VQT6_API void vqt6_qobject_delete(void* obj) { - if (obj == nullptr) return; - delete static_cast(obj); -} - -extern "C" VQT6_API void vqt6_qobject_delete_later(void* obj) { - if (obj == nullptr) return; - static_cast(obj)->deleteLater(); -} - -extern "C" VQT6_API void vqt6_qobject_set_object_name(void* obj, void* name) { - if (obj == nullptr || name == nullptr) return; - static_cast(obj)->setObjectName(*static_cast(name)); -} - -extern "C" VQT6_API void* vqt6_qobject_object_name(void* obj) { - if (obj == nullptr) return nullptr; - return new QString(static_cast(obj)->objectName()); -} - -extern "C" VQT6_API void vqt6_qobject_set_parent(void* child, void* parent) { - if (child == nullptr) return; - static_cast(child)->setParent(static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qobject_parent(void* obj) { - if (obj == nullptr) return nullptr; - return static_cast(obj)->parent(); -} - -extern "C" VQT6_API int vqt6_qobject_connect(void* sender, const char* signal_name, - void* receiver, const char* slot_name) { - if (sender == nullptr || receiver == nullptr || signal_name == nullptr || slot_name == nullptr) - return 0; - return QObject::connect( - static_cast(sender), signal_name, - static_cast(receiver), slot_name - ) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qobject_disconnect(void* sender, const char* signal_name, - void* receiver, const char* slot_name) { - if (sender == nullptr || receiver == nullptr) return 0; - return QObject::disconnect( - static_cast(sender), signal_name, - static_cast(receiver), slot_name - ) ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qobject_install_event_filter(void* watched, void* filter) { - if (watched == nullptr || filter == nullptr) return; - static_cast(watched)->installEventFilter(static_cast(filter)); -} - -extern "C" VQT6_API void vqt6_qobject_remove_event_filter(void* watched, void* filter) { - if (watched == nullptr || filter == nullptr) return; - static_cast(watched)->removeEventFilter(static_cast(filter)); -} - -// ============================================================ -// QCoreApplication -// ============================================================ -extern "C" VQT6_API void* vqt6_qcoreapp_create(const char* app_name) { - if (app_name == nullptr) return nullptr; - int argc = 1; - static char app_name_copy[1024]; - std::strncpy(app_name_copy, app_name, sizeof(app_name_copy) - 1); - app_name_copy[sizeof(app_name_copy) - 1] = '\0'; - char* argv[] = { app_name_copy, nullptr }; - return new QCoreApplication(argc, argv); -} - -extern "C" VQT6_API void* vqt6_qcoreapp_instance(void) { - return QCoreApplication::instance(); -} - -extern "C" VQT6_API int vqt6_qcoreapp_exec(void* app) { - if (app == nullptr) return -1; - return static_cast(app)->exec(); -} - -extern "C" VQT6_API void vqt6_qcoreapp_quit(void* app, int exit_code) { - if (app == nullptr) return; - // 优先使用 exit_code 重载 - QCoreApplication* a = static_cast(app); - if (a == QCoreApplication::instance()) { - a->exit(exit_code); - } -} - -extern "C" VQT6_API void vqt6_qcoreapp_exit(void* app, int exit_code) { - if (app == nullptr) return; - static_cast(app)->exit(exit_code); -} - -extern "C" VQT6_API void vqt6_qcoreapp_process_events(void* app, int flags) { - if (app == nullptr) return; - static_cast(app)->processEvents(static_cast(flags)); -} - -extern "C" VQT6_API void vqt6_qcoreapp_post_event(void* receiver, void* event) { - if (receiver == nullptr || event == nullptr) return; - QCoreApplication::postEvent(static_cast(receiver), static_cast(event)); -} - -extern "C" VQT6_API int vqt6_qcoreapp_send_event(void* receiver, void* event) { - if (receiver == nullptr || event == nullptr) return 0; - return QCoreApplication::sendEvent(static_cast(receiver), static_cast(event)) ? 1 : 0; -} - -extern "C" VQT6_API void* vqt6_qcoreapp_organization_name(void* app) { - if (app == nullptr) return nullptr; - return new QString(QCoreApplication::organizationName()); -} - -extern "C" VQT6_API void vqt6_qcoreapp_set_organization_name(void* app, void* name) { - if (app == nullptr || name == nullptr) return; - QCoreApplication::setOrganizationName(*static_cast(name)); -} - -extern "C" VQT6_API void* vqt6_qcoreapp_application_name(void* app) { - if (app == nullptr) return nullptr; - return new QString(QCoreApplication::applicationName()); -} - -extern "C" VQT6_API void vqt6_qcoreapp_set_application_name(void* app, void* name) { - if (app == nullptr || name == nullptr) return; - QCoreApplication::setApplicationName(*static_cast(name)); -} - -// ============================================================ -// QTimer -// ============================================================ -extern "C" VQT6_API void* vqt6_qtimer_create(void) { - return new QTimer(); -} - -extern "C" VQT6_API void* vqt6_qtimer_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QTimer(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qtimer_start(void* timer, int interval_ms) { - if (timer == nullptr) return; - static_cast(timer)->start(interval_ms); -} - -extern "C" VQT6_API void vqt6_qtimer_stop(void* timer) { - if (timer == nullptr) return; - static_cast(timer)->stop(); -} - -extern "C" VQT6_API void vqt6_qtimer_set_interval(void* timer, int interval_ms) { - if (timer == nullptr) return; - static_cast(timer)->setInterval(interval_ms); -} - -extern "C" VQT6_API int vqt6_qtimer_interval(void* timer) { - if (timer == nullptr) return 0; - return static_cast(timer)->interval(); -} - -extern "C" VQT6_API int vqt6_qtimer_is_active(void* timer) { - if (timer == nullptr) return 0; - return static_cast(timer)->isActive() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qtimer_set_single_shot(void* timer, int single_shot) { - if (timer == nullptr) return; - static_cast(timer)->setSingleShot(single_shot != 0); -} - -extern "C" VQT6_API int vqt6_qtimer_is_single_shot(void* timer) { - if (timer == nullptr) return 0; - return static_cast(timer)->isSingleShot() ? 1 : 0; -} - -// ============================================================ -// QVariant -// ============================================================ -extern "C" VQT6_API void* vqt6_qvariant_create_int(int value) { - return new QVariant(value); -} - -extern "C" VQT6_API void* vqt6_qvariant_create_double(double value) { - return new QVariant(value); -} - -extern "C" VQT6_API void* vqt6_qvariant_create_bool(int value) { - return new QVariant(value != 0); -} - -extern "C" VQT6_API void* vqt6_qvariant_create_string(void* s) { - if (s == nullptr) return new QVariant(); - return new QVariant(*static_cast(s)); -} - -extern "C" VQT6_API int vqt6_qvariant_to_int(void* v, int* ok) { - if (v == nullptr) return 0; - bool bok = false; - int val = static_cast(v)->toInt(&bok); - if (ok != nullptr) *ok = bok ? 1 : 0; - return val; -} - -extern "C" VQT6_API double vqt6_qvariant_to_double(void* v, int* ok) { - if (v == nullptr) return 0.0; - bool bok = false; - double val = static_cast(v)->toDouble(&bok); - if (ok != nullptr) *ok = bok ? 1 : 0; - return val; -} - -extern "C" VQT6_API int vqt6_qvariant_to_bool(void* v, int* ok) { - if (v == nullptr) return 0; - bool bok = false; - bool val = static_cast(v)->toBool(); - if (ok != nullptr) *ok = 1; - return val ? 1 : 0; -} - -extern "C" VQT6_API void* vqt6_qvariant_to_string(void* v) { - if (v == nullptr) return nullptr; - return new QString(static_cast(v)->toString()); -} - -extern "C" VQT6_API int vqt6_qvariant_type_id(void* v) { - if (v == nullptr) return 0; - return static_cast(static_cast(v)->typeId()); -} - -extern "C" VQT6_API int vqt6_qvariant_is_valid(void* v) { - if (v == nullptr) return 0; - return static_cast(v)->isValid() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qvariant_free(void* v) { - delete static_cast(v); -} - -// ============================================================ -// QEvent -// ============================================================ -extern "C" VQT6_API int vqt6_qevent_type(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->type()); -} - -extern "C" VQT6_API void vqt6_qevent_accept(void* event) { - if (event == nullptr) return; - static_cast(event)->accept(); -} - -extern "C" VQT6_API void vqt6_qevent_ignore(void* event) { - if (event == nullptr) return; - static_cast(event)->ignore(); -} - -extern "C" VQT6_API int vqt6_qevent_is_accepted(void* event) { - if (event == nullptr) return 0; - return static_cast(event)->isAccepted() ? 1 : 0; -} - -// ============================================================ -// QStringList -// ============================================================ -extern "C" VQT6_API void* vqt6_qstringlist_create(void) { - return new QStringList(); -} - -extern "C" VQT6_API void vqt6_qstringlist_append(void* list, void* str) { - if (list == nullptr || str == nullptr) return; - static_cast(list)->append(*static_cast(str)); -} - -extern "C" VQT6_API int vqt6_qstringlist_size(void* list) { - if (list == nullptr) return 0; - return static_cast(list)->size(); -} - -extern "C" VQT6_API void* vqt6_qstringlist_at(void* list, int index) { - if (list == nullptr) return nullptr; - QStringList* sl = static_cast(list); - if (index < 0 || index >= sl->size()) return nullptr; - return new QString(sl->at(index)); -} - -extern "C" VQT6_API void vqt6_qstringlist_free(void* list) { - delete static_cast(list); -} - -// ============================================================ -// QByteArrayList -// ============================================================ -extern "C" VQT6_API void* vqt6_qbytearraylist_create(void) { - return new QList(); -} - -extern "C" VQT6_API void vqt6_qbytearraylist_append(void* list, void* qba) { - if (list == nullptr || qba == nullptr) return; - static_cast*>(list)->append(*static_cast(qba)); -} - -extern "C" VQT6_API int vqt6_qbytearraylist_size(void* list) { - if (list == nullptr) return 0; - return static_cast*>(list)->size(); -} - -extern "C" VQT6_API void* vqt6_qbytearraylist_at(void* list, int index) { - if (list == nullptr) return nullptr; - QList* qbl = static_cast*>(list); - if (index < 0 || index >= qbl->size()) return nullptr; - return new QByteArray(qbl->at(index)); -} - -extern "C" VQT6_API void vqt6_qbytearraylist_free(void* list) { - delete static_cast*>(list); -} - -// ============================================================ -// 全局回调注册表 -// ============================================================ -extern "C" VQT6_API void vqt6_register_slot(int slot_id, void* user_data) { - QMutexLocker locker(&g_slot_mutex); - g_slots.insert(slot_id, QPair(nullptr, user_data)); -} - -extern "C" VQT6_API void vqt6_unregister_slot(int slot_id) { - QMutexLocker locker(&g_slot_mutex); - g_slots.remove(slot_id); -} - -extern "C" VQT6_API void vqt6_trigger_slot(int slot_id) { - QMutexLocker locker(&g_slot_mutex); - auto it = g_slots.find(slot_id); - if (it != g_slots.end() && it.value().first != nullptr) { - it.value().first(slot_id, it.value().second); - } -} diff --git a/vqt6 copy/_bridge_gui.cpp b/vqt6 copy/_bridge_gui.cpp deleted file mode 100644 index 089f0d7..0000000 --- a/vqt6 copy/_bridge_gui.cpp +++ /dev/null @@ -1,868 +0,0 @@ -// ============================================================ -// vqt6/_bridge_gui.cpp — QtGui C 桥接层实现 -// ============================================================ - -#include "_bridge.h" -#include "_bridge_gui.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// ============================================================ -// QColor -// ============================================================ -extern "C" VQT6_API void* vqt6_qcolor_create_rgb(int r, int g, int b) { - return new QColor(r, g, b); -} - -extern "C" VQT6_API void* vqt6_qcolor_create_rgba(int r, int g, int b, int a) { - return new QColor(r, g, b, a); -} - -extern "C" VQT6_API void* vqt6_qcolor_create_name(void* name) { - if (name == nullptr) return new QColor(); - return new QColor(*static_cast(name)); -} - -extern "C" VQT6_API void* vqt6_qcolor_create_hex(void* hex_str) { - if (hex_str == nullptr) return new QColor(); - return new QColor(*static_cast(hex_str)); -} - -extern "C" VQT6_API int vqt6_qcolor_red(void* c) { - if (c == nullptr) return 0; - return static_cast(c)->red(); -} - -extern "C" VQT6_API int vqt6_qcolor_green(void* c) { - if (c == nullptr) return 0; - return static_cast(c)->green(); -} - -extern "C" VQT6_API int vqt6_qcolor_blue(void* c) { - if (c == nullptr) return 0; - return static_cast(c)->blue(); -} - -extern "C" VQT6_API int vqt6_qcolor_alpha(void* c) { - if (c == nullptr) return 255; - return static_cast(c)->alpha(); -} - -extern "C" VQT6_API void vqt6_qcolor_set_red(void* c, int r) { - if (c == nullptr) return; - static_cast(c)->setRed(r); -} - -extern "C" VQT6_API void vqt6_qcolor_set_green(void* c, int g) { - if (c == nullptr) return; - static_cast(c)->setGreen(g); -} - -extern "C" VQT6_API void vqt6_qcolor_set_blue(void* c, int b) { - if (c == nullptr) return; - static_cast(c)->setBlue(b); -} - -extern "C" VQT6_API void vqt6_qcolor_set_alpha(void* c, int a) { - if (c == nullptr) return; - static_cast(c)->setAlpha(a); -} - -extern "C" VQT6_API void vqt6_qcolor_set_rgb(void* c, int r, int g, int b) { - if (c == nullptr) return; - static_cast(c)->setRgb(r, g, 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(c)->setRgba(r, g, b, a); -} - -extern "C" VQT6_API void* vqt6_qcolor_name(void* c) { - if (c == nullptr) return nullptr; - return new QString(static_cast(c)->name()); -} - -extern "C" VQT6_API int vqt6_qcolor_is_valid(void* c) { - if (c == nullptr) return 0; - return static_cast(c)->isValid() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qcolor_free(void* c) { - delete static_cast(c); -} - -// ============================================================ -// QFont -// ============================================================ -extern "C" VQT6_API void* vqt6_qfont_create(void) { - return new QFont(); -} - -extern "C" VQT6_API void* vqt6_qfont_create_with_family(void* family) { - if (family == nullptr) return new QFont(); - return new QFont(*static_cast(family)); -} - -extern "C" VQT6_API void* vqt6_qfont_create_with_family_size(void* family, int point_size) { - if (family == nullptr) return new QFont(); - return new QFont(*static_cast(family), point_size); -} - -extern "C" VQT6_API void vqt6_qfont_set_family(void* font, void* family) { - if (font == nullptr || family == nullptr) return; - static_cast(font)->setFamily(*static_cast(family)); -} - -extern "C" VQT6_API void* vqt6_qfont_family(void* font) { - if (font == nullptr) return nullptr; - return new QString(static_cast(font)->family()); -} - -extern "C" VQT6_API void vqt6_qfont_set_point_size(void* font, int point_size) { - if (font == nullptr) return; - static_cast(font)->setPointSize(point_size); -} - -extern "C" VQT6_API int vqt6_qfont_point_size(void* font) { - if (font == nullptr) return 0; - return static_cast(font)->pointSize(); -} - -extern "C" VQT6_API void vqt6_qfont_set_pixel_size(void* font, int pixel_size) { - if (font == nullptr) return; - static_cast(font)->setPixelSize(pixel_size); -} - -extern "C" VQT6_API int vqt6_qfont_pixel_size(void* font) { - if (font == nullptr) return 0; - return static_cast(font)->pixelSize(); -} - -extern "C" VQT6_API void vqt6_qfont_set_bold(void* font, int bold) { - if (font == nullptr) return; - static_cast(font)->setBold(bold != 0); -} - -extern "C" VQT6_API int vqt6_qfont_bold(void* font) { - if (font == nullptr) return 0; - return static_cast(font)->bold() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qfont_set_italic(void* font, int italic) { - if (font == nullptr) return; - static_cast(font)->setItalic(italic != 0); -} - -extern "C" VQT6_API int vqt6_qfont_italic(void* font) { - if (font == nullptr) return 0; - return static_cast(font)->italic() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qfont_set_underline(void* font, int underline) { - if (font == nullptr) return; - static_cast(font)->setUnderline(underline != 0); -} - -extern "C" VQT6_API int vqt6_qfont_underline(void* font) { - if (font == nullptr) return 0; - return static_cast(font)->underline() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qfont_set_strike_out(void* font, int strike_out) { - if (font == nullptr) return; - static_cast(font)->setStrikeOut(strike_out != 0); -} - -extern "C" VQT6_API int vqt6_qfont_strike_out(void* font) { - if (font == nullptr) return 0; - return static_cast(font)->strikeOut() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qfont_set_weight(void* font, int weight) { - if (font == nullptr) return; - static_cast(font)->setWeight(static_cast(weight)); -} - -extern "C" VQT6_API int vqt6_qfont_weight(void* font) { - if (font == nullptr) return 0; - return static_cast(static_cast(font)->weight()); -} - -extern "C" VQT6_API void vqt6_qfont_free(void* font) { - delete static_cast(font); -} - -// ============================================================ -// QFontMetrics -// ============================================================ -extern "C" VQT6_API void* vqt6_qfontmetrics_create(void* font) { - if (font == nullptr) return nullptr; - return new QFontMetrics(*static_cast(font)); -} - -extern "C" VQT6_API int vqt6_qfontmetrics_width(void* fm, void* text) { - if (fm == nullptr || text == nullptr) return 0; - return static_cast(fm)->horizontalAdvance(*static_cast(text)); -} - -extern "C" VQT6_API int vqt6_qfontmetrics_height(void* fm) { - if (fm == nullptr) return 0; - return static_cast(fm)->height(); -} - -extern "C" VQT6_API int vqt6_qfontmetrics_ascent(void* fm) { - if (fm == nullptr) return 0; - return static_cast(fm)->ascent(); -} - -extern "C" VQT6_API int vqt6_qfontmetrics_descent(void* fm) { - if (fm == nullptr) return 0; - return static_cast(fm)->descent(); -} - -extern "C" VQT6_API void vqt6_qfontmetrics_free(void* fm) { - delete static_cast(fm); -} - -// ============================================================ -// QPixmap -// ============================================================ -extern "C" VQT6_API void* vqt6_qpixmap_create(void) { - return new QPixmap(); -} - -extern "C" VQT6_API void* vqt6_qpixmap_create_with_size(int w, int h) { - return new QPixmap(w, h); -} - -extern "C" VQT6_API int vqt6_qpixmap_load(void* pm, void* file_name) { - if (pm == nullptr || file_name == nullptr) return 0; - return static_cast(pm)->load(*static_cast(file_name)) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qpixmap_load_from_data(void* pm, const void* data, size_t size) { - if (pm == nullptr || data == nullptr) return 0; - return static_cast(pm)->loadFromData(static_cast(data), static_cast(size)) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qpixmap_save(void* pm, void* file_name) { - if (pm == nullptr || file_name == nullptr) return 0; - return static_cast(pm)->save(*static_cast(file_name)) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qpixmap_width(void* pm) { - if (pm == nullptr) return 0; - return static_cast(pm)->width(); -} - -extern "C" VQT6_API int vqt6_qpixmap_height(void* pm) { - if (pm == nullptr) return 0; - return static_cast(pm)->height(); -} - -extern "C" VQT6_API int vqt6_qpixmap_is_null(void* pm) { - if (pm == nullptr) return 0; - return static_cast(pm)->isNull() ? 1 : 0; -} - -extern "C" VQT6_API void* vqt6_qpixmap_scaled(void* pm, int w, int h) { - if (pm == nullptr) return nullptr; - return new QPixmap(static_cast(pm)->scaled(w, h)); -} - -extern "C" VQT6_API void vqt6_qpixmap_fill(void* pm, void* color) { - if (pm == nullptr) return; - if (color != nullptr) { - static_cast(pm)->fill(*static_cast(color)); - } else { - static_cast(pm)->fill(); - } -} - -extern "C" VQT6_API void vqt6_qpixmap_free(void* pm) { - delete static_cast(pm); -} - -// ============================================================ -// QImage -// ============================================================ -extern "C" VQT6_API void* vqt6_qimage_create(void) { - return new QImage(); -} - -extern "C" VQT6_API void* vqt6_qimage_create_with_size(int w, int h, int format) { - return new QImage(w, h, static_cast(format)); -} - -extern "C" VQT6_API int vqt6_qimage_load(void* img, void* file_name) { - if (img == nullptr || file_name == nullptr) return 0; - return static_cast(img)->load(*static_cast(file_name)) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qimage_save(void* img, void* file_name) { - if (img == nullptr || file_name == nullptr) return 0; - return static_cast(img)->save(*static_cast(file_name)) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qimage_width(void* img) { - if (img == nullptr) return 0; - return static_cast(img)->width(); -} - -extern "C" VQT6_API int vqt6_qimage_height(void* img) { - if (img == nullptr) return 0; - return static_cast(img)->height(); -} - -extern "C" VQT6_API int vqt6_qimage_format(void* img) { - if (img == nullptr) return 0; - return static_cast(static_cast(img)->format()); -} - -extern "C" VQT6_API int vqt6_qimage_is_null(void* img) { - if (img == nullptr) return 0; - return static_cast(img)->isNull() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qimage_fill(void* img, void* color) { - if (img == nullptr) return; - if (color != nullptr) { - static_cast(img)->fill(*static_cast(color)); - } -} - -extern "C" VQT6_API void* vqt6_qimage_scaled(void* img, int w, int h) { - if (img == nullptr) return nullptr; - return new QImage(static_cast(img)->scaled(w, h)); -} - -extern "C" VQT6_API void vqt6_qimage_free(void* img) { - delete static_cast(img); -} - -// ============================================================ -// QPainter -// ============================================================ -extern "C" VQT6_API void* vqt6_qpainter_create(void) { - return new QPainter(); -} - -extern "C" VQT6_API int vqt6_qpainter_begin(void* p, void* device) { - if (p == nullptr || device == nullptr) return 0; - return static_cast(p)->begin(static_cast(device)) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qpainter_end(void* p) { - if (p == nullptr) return 0; - return static_cast(p)->end() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qpainter_is_active(void* p) { - if (p == nullptr) return 0; - return static_cast(p)->isActive() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qpainter_set_pen(void* p, void* pen) { - if (p == nullptr || pen == nullptr) return; - static_cast(p)->setPen(*static_cast(pen)); -} - -extern "C" VQT6_API void vqt6_qpainter_set_brush(void* p, void* brush) { - if (p == nullptr || brush == nullptr) return; - static_cast(p)->setBrush(*static_cast(brush)); -} - -extern "C" VQT6_API void vqt6_qpainter_set_font(void* p, void* font) { - if (p == nullptr || font == nullptr) return; - static_cast(p)->setFont(*static_cast(font)); -} - -extern "C" VQT6_API void* vqt6_qpainter_pen(void* p) { - if (p == nullptr) return nullptr; - return new QPen(static_cast(p)->pen()); -} - -extern "C" VQT6_API void* vqt6_qpainter_brush(void* p) { - if (p == nullptr) return nullptr; - return new QBrush(static_cast(p)->brush()); -} - -extern "C" VQT6_API void* vqt6_qpainter_font(void* p) { - if (p == nullptr) return nullptr; - return new QFont(static_cast(p)->font()); -} - -extern "C" VQT6_API void vqt6_qpainter_set_opacity(void* p, double opacity) { - if (p == nullptr) return; - static_cast(p)->setOpacity(opacity); -} - -extern "C" VQT6_API double vqt6_qpainter_opacity(void* p) { - if (p == nullptr) return 1.0; - return static_cast(p)->opacity(); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_line(void* p, int x1, int y1, int x2, int y2) { - if (p == nullptr) return; - static_cast(p)->drawLine(x1, y1, x2, y2); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_rect(void* p, int x, int y, int w, int h) { - if (p == nullptr) return; - static_cast(p)->drawRect(x, y, w, h); -} - -extern "C" VQT6_API void vqt6_qpainter_fill_rect(void* p, int x, int y, int w, int h, void* color) { - if (p == nullptr || color == nullptr) return; - static_cast(p)->fillRect(x, y, w, h, *static_cast(color)); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_ellipse(void* p, int x, int y, int w, int h) { - if (p == nullptr) return; - static_cast(p)->drawEllipse(x, y, w, h); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_arc(void* p, int x, int y, int w, int h, int start_angle, int span_angle) { - if (p == nullptr) return; - static_cast(p)->drawArc(x, y, w, h, start_angle, span_angle); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_chord(void* p, int x, int y, int w, int h, int start_angle, int span_angle) { - if (p == nullptr) return; - static_cast(p)->drawChord(x, y, w, h, start_angle, span_angle); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_pie(void* p, int x, int y, int w, int h, int start_angle, int span_angle) { - if (p == nullptr) return; - static_cast(p)->drawPie(x, y, w, h, start_angle, span_angle); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_polygon(void* p, int* points, int point_count) { - if (p == nullptr || points == nullptr || point_count < 1) return; - QPolygon polygon; - for (int i = 0; i < point_count; ++i) { - polygon << QPoint(points[i*2], points[i*2+1]); - } - static_cast(p)->drawPolygon(polygon); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_polyline(void* p, int* points, int point_count) { - if (p == nullptr || points == nullptr || point_count < 1) return; - QPolygon polyline; - for (int i = 0; i < point_count; ++i) { - polyline << QPoint(points[i*2], points[i*2+1]); - } - static_cast(p)->drawPolyline(polyline); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_point(void* p, int x, int y) { - if (p == nullptr) return; - static_cast(p)->drawPoint(x, y); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_points(void* p, int* points, int point_count) { - if (p == nullptr || points == nullptr || point_count < 1) return; - QPolygon pts; - for (int i = 0; i < point_count; ++i) { - pts << QPoint(points[i*2], points[i*2+1]); - } - static_cast(p)->drawPoints(pts); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_text(void* p, int x, int y, void* text) { - if (p == nullptr || text == nullptr) return; - static_cast(p)->drawText(x, y, *static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_text_in_rect(void* p, int x, int y, int w, int h, int flags, void* text) { - if (p == nullptr || text == nullptr) return; - static_cast(p)->drawText(x, y, w, h, flags, *static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_pixmap(void* p, int x, int y, void* pixmap) { - if (p == nullptr || pixmap == nullptr) return; - static_cast(p)->drawPixmap(x, y, *static_cast(pixmap)); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_image(void* p, int x, int y, void* image) { - if (p == nullptr || image == nullptr) return; - static_cast(p)->drawImage(x, y, *static_cast(image)); -} - -extern "C" VQT6_API void vqt6_qpainter_draw_tiled_pixmap(void* p, int x, int y, int w, int h, void* pixmap) { - if (p == nullptr || pixmap == nullptr) return; - static_cast(p)->drawTiledPixmap(x, y, w, h, *static_cast(pixmap)); -} - -extern "C" VQT6_API void vqt6_qpainter_translate(void* p, int dx, int dy) { - if (p == nullptr) return; - static_cast(p)->translate(dx, dy); -} - -extern "C" VQT6_API void vqt6_qpainter_rotate(void* p, double angle) { - if (p == nullptr) return; - static_cast(p)->rotate(angle); -} - -extern "C" VQT6_API void vqt6_qpainter_scale(void* p, double sx, double sy) { - if (p == nullptr) return; - static_cast(p)->scale(sx, sy); -} - -extern "C" VQT6_API void vqt6_qpainter_reset_transform(void* p) { - if (p == nullptr) return; - static_cast(p)->resetTransform(); -} - -extern "C" VQT6_API void vqt6_qpainter_save(void* p) { - if (p == nullptr) return; - static_cast(p)->save(); -} - -extern "C" VQT6_API void vqt6_qpainter_restore(void* p) { - if (p == nullptr) return; - static_cast(p)->restore(); -} - -extern "C" VQT6_API void vqt6_qpainter_free(void* p) { - delete static_cast(p); -} - -// ============================================================ -// QPen -// ============================================================ -extern "C" VQT6_API void* vqt6_qpen_create(void) { - return new QPen(); -} - -extern "C" VQT6_API void* vqt6_qpen_create_with_color(void* color) { - if (color == nullptr) return new QPen(); - return new QPen(*static_cast(color)); -} - -extern "C" VQT6_API void* vqt6_qpen_create_with_color_width(void* color, int width) { - if (color == nullptr) return new QPen(); - return new QPen(*static_cast(color), width); -} - -extern "C" VQT6_API void vqt6_qpen_set_color(void* pen, void* color) { - if (pen == nullptr || color == nullptr) return; - static_cast(pen)->setColor(*static_cast(color)); -} - -extern "C" VQT6_API void* vqt6_qpen_color(void* pen) { - if (pen == nullptr) return nullptr; - return new QColor(static_cast(pen)->color()); -} - -extern "C" VQT6_API void vqt6_qpen_set_width(void* pen, int width) { - if (pen == nullptr) return; - static_cast(pen)->setWidth(width); -} - -extern "C" VQT6_API int vqt6_qpen_width(void* pen) { - if (pen == nullptr) return 0; - return static_cast(pen)->width(); -} - -extern "C" VQT6_API void vqt6_qpen_set_style(void* pen, int style) { - if (pen == nullptr) return; - static_cast(pen)->setStyle(static_cast(style)); -} - -extern "C" VQT6_API int vqt6_qpen_style(void* pen) { - if (pen == nullptr) return 0; - return static_cast(static_cast(pen)->style()); -} - -extern "C" VQT6_API void vqt6_qpen_free(void* pen) { - delete static_cast(pen); -} - -// ============================================================ -// QBrush -// ============================================================ -extern "C" VQT6_API void* vqt6_qbrush_create(void) { - return new QBrush(); -} - -extern "C" VQT6_API void* vqt6_qbrush_create_with_color(void* color) { - if (color == nullptr) return new QBrush(); - return new QBrush(*static_cast(color)); -} - -extern "C" VQT6_API void* vqt6_qbrush_create_with_style(int style) { - return new QBrush(static_cast(style)); -} - -extern "C" VQT6_API void vqt6_qbrush_set_color(void* brush, void* color) { - if (brush == nullptr || color == nullptr) return; - static_cast(brush)->setColor(*static_cast(color)); -} - -extern "C" VQT6_API void* vqt6_qbrush_color(void* brush) { - if (brush == nullptr) return nullptr; - return new QColor(static_cast(brush)->color()); -} - -extern "C" VQT6_API void vqt6_qbrush_set_style(void* brush, int style) { - if (brush == nullptr) return; - static_cast(brush)->setStyle(static_cast(style)); -} - -extern "C" VQT6_API int vqt6_qbrush_style(void* brush) { - if (brush == nullptr) return 0; - return static_cast(static_cast(brush)->style()); -} - -extern "C" VQT6_API void vqt6_qbrush_free(void* brush) { - delete static_cast(brush); -} - -// ============================================================ -// QIcon -// ============================================================ -extern "C" VQT6_API void* vqt6_qicon_create(void) { - return new QIcon(); -} - -extern "C" VQT6_API void* vqt6_qicon_create_with_file(void* file_name) { - if (file_name == nullptr) return new QIcon(); - return new QIcon(*static_cast(file_name)); -} - -extern "C" VQT6_API void vqt6_qicon_add_file(void* icon, void* file_name) { - if (icon == nullptr || file_name == nullptr) return; - static_cast(icon)->addFile(*static_cast(file_name)); -} - -extern "C" VQT6_API void vqt6_qicon_add_pixmap(void* icon, void* pixmap) { - if (icon == nullptr || pixmap == nullptr) return; - static_cast(icon)->addPixmap(*static_cast(pixmap)); -} - -extern "C" VQT6_API int vqt6_qicon_is_null(void* icon) { - if (icon == nullptr) return 0; - return static_cast(icon)->isNull() ? 1 : 0; -} - -extern "C" VQT6_API void* vqt6_qicon_pixmap(void* icon, int w, int h) { - if (icon == nullptr) return nullptr; - return new QPixmap(static_cast(icon)->pixmap(w, h)); -} - -extern "C" VQT6_API void vqt6_qicon_free(void* icon) { - delete static_cast(icon); -} - -// ============================================================ -// QCursor -// ============================================================ -extern "C" VQT6_API void* vqt6_qcursor_create(void) { - return new QCursor(); -} - -extern "C" VQT6_API void* vqt6_qcursor_create_with_shape(int shape) { - return new QCursor(static_cast(shape)); -} - -extern "C" VQT6_API void vqt6_qcursor_pos(int* x, int* y) { - QPoint p = QCursor::pos(); - if (x != nullptr) *x = p.x(); - if (y != nullptr) *y = p.y(); -} - -extern "C" VQT6_API void vqt6_qcursor_set_pos(int x, int y) { - QCursor::setPos(x, y); -} - -extern "C" VQT6_API void vqt6_qcursor_set_shape(void* cursor, int shape) { - if (cursor == nullptr) return; - static_cast(cursor)->setShape(static_cast(shape)); -} - -extern "C" VQT6_API int vqt6_qcursor_shape(void* cursor) { - if (cursor == nullptr) return 0; - return static_cast(static_cast(cursor)->shape()); -} - -extern "C" VQT6_API void vqt6_qcursor_free(void* cursor) { - delete static_cast(cursor); -} - -// ============================================================ -// QKeyEvent -// ============================================================ -extern "C" VQT6_API void* vqt6_qkeyevent_create(int type, int key, int modifiers, void* text) { - QString* t = static_cast(text); - return new QKeyEvent(static_cast(type), key, static_cast(modifiers), - t != nullptr ? *t : QString()); -} - -extern "C" VQT6_API int vqt6_qkeyevent_key(void* event) { - if (event == nullptr) return 0; - return static_cast(event)->key(); -} - -extern "C" VQT6_API void* vqt6_qkeyevent_text(void* event) { - if (event == nullptr) return nullptr; - return new QString(static_cast(event)->text()); -} - -extern "C" VQT6_API int vqt6_qkeyevent_modifiers(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->modifiers()); -} - -extern "C" VQT6_API int vqt6_qkeyevent_is_auto_repeat(void* event) { - if (event == nullptr) return 0; - return static_cast(event)->isAutoRepeat() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qkeyevent_free(void* event) { - delete static_cast(event); -} - -// ============================================================ -// QMouseEvent -// ============================================================ -extern "C" VQT6_API void* vqt6_qmouseevent_create(int type, void* local_pos, int button, int buttons, int modifiers) { - QPointF* lp = static_cast(local_pos); - return new QMouseEvent( - static_cast(type), - lp != nullptr ? *lp : QPointF(0, 0), - Qt::NoButton, - static_cast(button), - static_cast(modifiers) - ); -} - -extern "C" VQT6_API int vqt6_qmouseevent_button(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->button()); -} - -extern "C" VQT6_API int vqt6_qmouseevent_buttons(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->buttons()); -} - -extern "C" VQT6_API int vqt6_qmouseevent_x(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->position().x()); -} - -extern "C" VQT6_API int vqt6_qmouseevent_y(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->position().y()); -} - -extern "C" VQT6_API int vqt6_qmouseevent_global_x(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->globalPosition().x()); -} - -extern "C" VQT6_API int vqt6_qmouseevent_global_y(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->globalPosition().y()); -} - -extern "C" VQT6_API int vqt6_qmouseevent_modifiers(void* event) { - if (event == nullptr) return 0; - return static_cast(static_cast(event)->modifiers()); -} - -extern "C" VQT6_API void vqt6_qmouseevent_free(void* event) { - delete static_cast(event); -} - -// ============================================================ -// QResizeEvent / QPaintEvent / QCloseEvent -// ============================================================ -extern "C" VQT6_API void* vqt6_qresizeevent_create(int width, int height, int old_width, int old_height) { - return new QResizeEvent(QSize(width, height), QSize(old_width, old_height)); -} - -extern "C" VQT6_API void vqt6_qresizeevent_size(void* event, int* w, int* h) { - if (event == nullptr) return; - QSize s = static_cast(event)->size(); - if (w != nullptr) *w = s.width(); - if (h != nullptr) *h = s.height(); -} - -extern "C" VQT6_API void vqt6_qresizeevent_old_size(void* event, int* w, int* h) { - if (event == nullptr) return; - QSize s = static_cast(event)->oldSize(); - if (w != nullptr) *w = s.width(); - if (h != nullptr) *h = s.height(); -} - -extern "C" VQT6_API void vqt6_qresizeevent_free(void* event) { - delete static_cast(event); -} - -extern "C" VQT6_API void* vqt6_qpaintevent_create(int rect_x, int rect_y, int rect_w, int rect_h) { - return new QPaintEvent(QRect(rect_x, rect_y, rect_w, rect_h)); -} - -extern "C" VQT6_API void vqt6_qpaintevent_rect(void* event, int* x, int* y, int* w, int* h) { - if (event == nullptr) return; - QRect r = static_cast(event)->rect(); - if (x != nullptr) *x = r.x(); - if (y != nullptr) *y = r.y(); - if (w != nullptr) *w = r.width(); - if (h != nullptr) *h = r.height(); -} - -extern "C" VQT6_API void vqt6_qpaintevent_free(void* event) { - delete static_cast(event); -} - -extern "C" VQT6_API void* vqt6_qcloseevent_create(void) { - return new QCloseEvent(); -} - -extern "C" VQT6_API int vqt6_qcloseevent_is_accepted(void* event) { - if (event == nullptr) return 0; - return static_cast(event)->isAccepted() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qcloseevent_accept(void* event) { - if (event == nullptr) return; - static_cast(event)->accept(); -} - -extern "C" VQT6_API void vqt6_qcloseevent_ignore(void* event) { - if (event == nullptr) return; - static_cast(event)->ignore(); -} - -extern "C" VQT6_API void vqt6_qcloseevent_free(void* event) { - delete static_cast(event); -} diff --git a/vqt6 copy/_bridge_gui.h b/vqt6 copy/_bridge_gui.h deleted file mode 100644 index d2bb224..0000000 --- a/vqt6 copy/_bridge_gui.h +++ /dev/null @@ -1,231 +0,0 @@ -// ============================================================ -// vqt6/_bridge_gui.h — QtGui C 桥接函数声明 -// ============================================================ - -#ifndef VQT6_BRIDGE_GUI_H -#define VQT6_BRIDGE_GUI_H - -#include "_bridge.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// ============================================================ -// QColor -// ============================================================ -VQT6_API void* vqt6_qcolor_create_rgb(int r, int g, int b); -VQT6_API void* vqt6_qcolor_create_rgba(int r, int g, int b, int a); -VQT6_API void* vqt6_qcolor_create_name(void* name); -VQT6_API void* vqt6_qcolor_create_hex(void* hex_str); -VQT6_API int vqt6_qcolor_red(void* c); -VQT6_API int vqt6_qcolor_green(void* c); -VQT6_API int vqt6_qcolor_blue(void* c); -VQT6_API int vqt6_qcolor_alpha(void* c); -VQT6_API void vqt6_qcolor_set_red(void* c, int r); -VQT6_API void vqt6_qcolor_set_green(void* c, int g); -VQT6_API void vqt6_qcolor_set_blue(void* c, int b); -VQT6_API void vqt6_qcolor_set_alpha(void* c, int a); -VQT6_API void vqt6_qcolor_set_rgb(void* c, int r, int g, int b); -VQT6_API void vqt6_qcolor_set_rgba(void* c, int r, int g, int b, int a); -VQT6_API void* vqt6_qcolor_name(void* c); -VQT6_API int vqt6_qcolor_is_valid(void* c); -VQT6_API void vqt6_qcolor_free(void* c); - -// ============================================================ -// QFont -// ============================================================ -VQT6_API void* vqt6_qfont_create(void); -VQT6_API void* vqt6_qfont_create_with_family(void* family); -VQT6_API void* vqt6_qfont_create_with_family_size(void* family, int point_size); -VQT6_API void vqt6_qfont_set_family(void* font, void* family); -VQT6_API void* vqt6_qfont_family(void* font); -VQT6_API void vqt6_qfont_set_point_size(void* font, int point_size); -VQT6_API int vqt6_qfont_point_size(void* font); -VQT6_API void vqt6_qfont_set_pixel_size(void* font, int pixel_size); -VQT6_API int vqt6_qfont_pixel_size(void* font); -VQT6_API void vqt6_qfont_set_bold(void* font, int bold); -VQT6_API int vqt6_qfont_bold(void* font); -VQT6_API void vqt6_qfont_set_italic(void* font, int italic); -VQT6_API int vqt6_qfont_italic(void* font); -VQT6_API void vqt6_qfont_set_underline(void* font, int underline); -VQT6_API int vqt6_qfont_underline(void* font); -VQT6_API void vqt6_qfont_set_strike_out(void* font, int strike_out); -VQT6_API int vqt6_qfont_strike_out(void* font); -VQT6_API void vqt6_qfont_set_weight(void* font, int weight); -VQT6_API int vqt6_qfont_weight(void* font); -VQT6_API void vqt6_qfont_free(void* font); - -// ============================================================ -// QFontMetrics -// ============================================================ -VQT6_API void* vqt6_qfontmetrics_create(void* font); -VQT6_API int vqt6_qfontmetrics_width(void* fm, void* text); -VQT6_API int vqt6_qfontmetrics_height(void* fm); -VQT6_API int vqt6_qfontmetrics_ascent(void* fm); -VQT6_API int vqt6_qfontmetrics_descent(void* fm); -VQT6_API void vqt6_qfontmetrics_free(void* fm); - -// ============================================================ -// QPixmap -// ============================================================ -VQT6_API void* vqt6_qpixmap_create(void); -VQT6_API void* vqt6_qpixmap_create_with_size(int w, int h); -VQT6_API int vqt6_qpixmap_load(void* pm, void* file_name); -VQT6_API int vqt6_qpixmap_load_from_data(void* pm, const void* data, size_t size); -VQT6_API int vqt6_qpixmap_save(void* pm, void* file_name); -VQT6_API int vqt6_qpixmap_width(void* pm); -VQT6_API int vqt6_qpixmap_height(void* pm); -VQT6_API int vqt6_qpixmap_is_null(void* pm); -VQT6_API void* vqt6_qpixmap_scaled(void* pm, int w, int h); -VQT6_API void vqt6_qpixmap_fill(void* pm, void* color); -VQT6_API void vqt6_qpixmap_free(void* pm); - -// ============================================================ -// QImage -// ============================================================ -VQT6_API void* vqt6_qimage_create(void); -VQT6_API void* vqt6_qimage_create_with_size(int w, int h, int format); -VQT6_API int vqt6_qimage_load(void* img, void* file_name); -VQT6_API int vqt6_qimage_save(void* img, void* file_name); -VQT6_API int vqt6_qimage_width(void* img); -VQT6_API int vqt6_qimage_height(void* img); -VQT6_API int vqt6_qimage_format(void* img); -VQT6_API int vqt6_qimage_is_null(void* img); -VQT6_API void vqt6_qimage_fill(void* img, void* color); -VQT6_API void* vqt6_qimage_scaled(void* img, int w, int h); -VQT6_API void vqt6_qimage_free(void* img); - -// ============================================================ -// QPainter -// ============================================================ -VQT6_API void* vqt6_qpainter_create(void); -VQT6_API int vqt6_qpainter_begin(void* p, void* device); -VQT6_API int vqt6_qpainter_end(void* p); -VQT6_API int vqt6_qpainter_is_active(void* p); -VQT6_API void vqt6_qpainter_set_pen(void* p, void* pen); -VQT6_API void vqt6_qpainter_set_brush(void* p, void* brush); -VQT6_API void vqt6_qpainter_set_font(void* p, void* font); -VQT6_API void* vqt6_qpainter_pen(void* p); -VQT6_API void* vqt6_qpainter_brush(void* p); -VQT6_API void* vqt6_qpainter_font(void* p); -VQT6_API void vqt6_qpainter_set_opacity(void* p, double opacity); -VQT6_API double vqt6_qpainter_opacity(void* p); -VQT6_API void vqt6_qpainter_draw_line(void* p, int x1, int y1, int x2, int y2); -VQT6_API void vqt6_qpainter_draw_rect(void* p, int x, int y, int w, int h); -VQT6_API void vqt6_qpainter_fill_rect(void* p, int x, int y, int w, int h, void* color); -VQT6_API void vqt6_qpainter_draw_ellipse(void* p, int x, int y, int w, int h); -VQT6_API void vqt6_qpainter_draw_arc(void* p, int x, int y, int w, int h, int start_angle, int span_angle); -VQT6_API void vqt6_qpainter_draw_chord(void* p, int x, int y, int w, int h, int start_angle, int span_angle); -VQT6_API void vqt6_qpainter_draw_pie(void* p, int x, int y, int w, int h, int start_angle, int span_angle); -VQT6_API void vqt6_qpainter_draw_polygon(void* p, int* points, int point_count); -VQT6_API void vqt6_qpainter_draw_polyline(void* p, int* points, int point_count); -VQT6_API void vqt6_qpainter_draw_point(void* p, int x, int y); -VQT6_API void vqt6_qpainter_draw_points(void* p, int* points, int point_count); -VQT6_API void vqt6_qpainter_draw_text(void* p, int x, int y, void* text); -VQT6_API void vqt6_qpainter_draw_text_in_rect(void* p, int x, int y, int w, int h, int flags, void* text); -VQT6_API void vqt6_qpainter_draw_pixmap(void* p, int x, int y, void* pixmap); -VQT6_API void vqt6_qpainter_draw_image(void* p, int x, int y, void* image); -VQT6_API void vqt6_qpainter_draw_tiled_pixmap(void* p, int x, int y, int w, int h, void* pixmap); -VQT6_API void vqt6_qpainter_translate(void* p, int dx, int dy); -VQT6_API void vqt6_qpainter_rotate(void* p, double angle); -VQT6_API void vqt6_qpainter_scale(void* p, double sx, double sy); -VQT6_API void vqt6_qpainter_reset_transform(void* p); -VQT6_API void vqt6_qpainter_save(void* p); -VQT6_API void vqt6_qpainter_restore(void* p); -VQT6_API void vqt6_qpainter_free(void* p); - -// ============================================================ -// QPen -// ============================================================ -VQT6_API void* vqt6_qpen_create(void); -VQT6_API void* vqt6_qpen_create_with_color(void* color); -VQT6_API void* vqt6_qpen_create_with_color_width(void* color, int width); -VQT6_API void vqt6_qpen_set_color(void* pen, void* color); -VQT6_API void* vqt6_qpen_color(void* pen); -VQT6_API void vqt6_qpen_set_width(void* pen, int width); -VQT6_API int vqt6_qpen_width(void* pen); -VQT6_API void vqt6_qpen_set_style(void* pen, int style); -VQT6_API int vqt6_qpen_style(void* pen); -VQT6_API void vqt6_qpen_free(void* pen); - -// ============================================================ -// QBrush -// ============================================================ -VQT6_API void* vqt6_qbrush_create(void); -VQT6_API void* vqt6_qbrush_create_with_color(void* color); -VQT6_API void* vqt6_qbrush_create_with_style(int style); -VQT6_API void vqt6_qbrush_set_color(void* brush, void* color); -VQT6_API void* vqt6_qbrush_color(void* brush); -VQT6_API void vqt6_qbrush_set_style(void* brush, int style); -VQT6_API int vqt6_qbrush_style(void* brush); -VQT6_API void vqt6_qbrush_free(void* brush); - -// ============================================================ -// QIcon -// ============================================================ -VQT6_API void* vqt6_qicon_create(void); -VQT6_API void* vqt6_qicon_create_with_file(void* file_name); -VQT6_API void vqt6_qicon_add_file(void* icon, void* file_name); -VQT6_API void vqt6_qicon_add_pixmap(void* icon, void* pixmap); -VQT6_API int vqt6_qicon_is_null(void* icon); -VQT6_API void* vqt6_qicon_pixmap(void* icon, int w, int h); -VQT6_API void vqt6_qicon_free(void* icon); - -// ============================================================ -// QCursor -// ============================================================ -VQT6_API void* vqt6_qcursor_create(void); -VQT6_API void* vqt6_qcursor_create_with_shape(int shape); -VQT6_API void vqt6_qcursor_pos(int* x, int* y); -VQT6_API void vqt6_qcursor_set_pos(int x, int y); -VQT6_API void vqt6_qcursor_set_shape(void* cursor, int shape); -VQT6_API int vqt6_qcursor_shape(void* cursor); -VQT6_API void vqt6_qcursor_free(void* cursor); - -// ============================================================ -// QKeyEvent -// ============================================================ -VQT6_API void* vqt6_qkeyevent_create(int type, int key, int modifiers, void* text); -VQT6_API int vqt6_qkeyevent_key(void* event); -VQT6_API void* vqt6_qkeyevent_text(void* event); -VQT6_API int vqt6_qkeyevent_modifiers(void* event); -VQT6_API int vqt6_qkeyevent_is_auto_repeat(void* event); -VQT6_API void vqt6_qkeyevent_free(void* event); - -// ============================================================ -// QMouseEvent -// ============================================================ -VQT6_API void* vqt6_qmouseevent_create(int type, void* local_pos, int button, int buttons, int modifiers); -VQT6_API int vqt6_qmouseevent_button(void* event); -VQT6_API int vqt6_qmouseevent_buttons(void* event); -VQT6_API int vqt6_qmouseevent_x(void* event); -VQT6_API int vqt6_qmouseevent_y(void* event); -VQT6_API int vqt6_qmouseevent_global_x(void* event); -VQT6_API int vqt6_qmouseevent_global_y(void* event); -VQT6_API int vqt6_qmouseevent_modifiers(void* event); -VQT6_API void vqt6_qmouseevent_free(void* event); - -// ============================================================ -// QResizeEvent / QPaintEvent / QCloseEvent -// ============================================================ -VQT6_API void* vqt6_qresizeevent_create(int width, int height, int old_width, int old_height); -VQT6_API void vqt6_qresizeevent_size(void* event, int* w, int* h); -VQT6_API void vqt6_qresizeevent_old_size(void* event, int* w, int* h); -VQT6_API void vqt6_qresizeevent_free(void* event); - -VQT6_API void* vqt6_qpaintevent_create(int rect_x, int rect_y, int rect_w, int rect_h); -VQT6_API void vqt6_qpaintevent_rect(void* event, int* x, int* y, int* w, int* h); -VQT6_API void vqt6_qpaintevent_free(void* event); - -VQT6_API void* vqt6_qcloseevent_create(void); -VQT6_API int vqt6_qcloseevent_is_accepted(void* event); -VQT6_API void vqt6_qcloseevent_accept(void* event); -VQT6_API void vqt6_qcloseevent_ignore(void* event); -VQT6_API void vqt6_qcloseevent_free(void* event); - -#ifdef __cplusplus -} -#endif - -#endif // VQT6_BRIDGE_GUI_H diff --git a/vqt6 copy/_bridge_network.cpp b/vqt6 copy/_bridge_network.cpp deleted file mode 100644 index 00cab5e..0000000 --- a/vqt6 copy/_bridge_network.cpp +++ /dev/null @@ -1,519 +0,0 @@ -// ============================================================ -// vqt6/_bridge_network.cpp — QtNetwork C 桥接层实现 -// ============================================================ - -#include "_bridge.h" -#include "_bridge_network.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// ============================================================ -// QHostAddress -// ============================================================ -extern "C" VQT6_API void* vqt6_qhostaddress_create(void) { - return new QHostAddress(); -} - -extern "C" VQT6_API void* vqt6_qhostaddress_create_with_ipv4(uint32_t ipv4) { - return new QHostAddress(static_cast(ipv4)); -} - -extern "C" VQT6_API void* vqt6_qhostaddress_create_with_string(void* address) { - if (address == nullptr) return new QHostAddress(); - return new QHostAddress(*static_cast(address)); -} - -extern "C" VQT6_API void* vqt6_qhostaddress_create_with_local_host(void) { - return new QHostAddress(QHostAddress::LocalHost); -} - -extern "C" VQT6_API void* vqt6_qhostaddress_create_with_local_ipv4(void) { - return new QHostAddress(QHostAddress::LocalHostIPv4); -} - -extern "C" VQT6_API void* vqt6_qhostaddress_create_with_broadcast(void) { - return new QHostAddress(QHostAddress::Broadcast); -} - -extern "C" VQT6_API void* vqt6_qhostaddress_create_with_any_ipv4(void) { - return new QHostAddress(QHostAddress::AnyIPv4); -} - -extern "C" VQT6_API void* vqt6_qhostaddress_to_string(void* addr) { - if (addr == nullptr) return nullptr; - return new QString(static_cast(addr)->toString()); -} - -extern "C" VQT6_API uint32_t vqt6_qhostaddress_to_ipv4(void* addr) { - if (addr == nullptr) return 0; - return static_cast(static_cast(addr)->toIPv4Address()); -} - -extern "C" VQT6_API int vqt6_qhostaddress_is_null(void* addr) { - if (addr == nullptr) return 0; - return static_cast(addr)->isNull() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qhostaddress_is_loopback(void* addr) { - if (addr == nullptr) return 0; - return static_cast(addr)->isLoopback() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qhostaddress_is_broadcast(void* addr) { - if (addr == nullptr) return 0; - return static_cast(addr)->isBroadcast() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qhostaddress_protocol(void* addr) { - if (addr == nullptr) return 0; - return static_cast(static_cast(addr)->protocol()); -} - -extern "C" VQT6_API void vqt6_qhostaddress_free(void* addr) { - delete static_cast(addr); -} - -// ============================================================ -// QAbstractSocket -// ============================================================ -extern "C" VQT6_API int vqt6_qabstractsocket_state(void* socket) { - if (socket == nullptr) return 0; - return static_cast(static_cast(socket)->state()); -} - -extern "C" VQT6_API int vqt6_qabstractsocket_error(void* socket) { - if (socket == nullptr) return 0; - return static_cast(static_cast(socket)->error()); -} - -extern "C" VQT6_API void* vqt6_qabstractsocket_error_string(void* socket) { - if (socket == nullptr) return nullptr; - return new QString(static_cast(socket)->errorString()); -} - -extern "C" VQT6_API void vqt6_qabstractsocket_connect_to_host(void* socket, void* host_name, uint16_t port) { - if (socket == nullptr || host_name == nullptr) return; - static_cast(socket)->connectToHost(*static_cast(host_name), port); -} - -extern "C" VQT6_API void vqt6_qabstractsocket_connect_to_host_with_addr(void* socket, void* address, uint16_t port) { - if (socket == nullptr || address == nullptr) return; - static_cast(socket)->connectToHost(*static_cast(address), port); -} - -extern "C" VQT6_API void vqt6_qabstractsocket_disconnect_from_host(void* socket) { - if (socket == nullptr) return; - static_cast(socket)->disconnectFromHost(); -} - -extern "C" VQT6_API int vqt6_qabstractsocket_wait_for_connected(void* socket, int timeout_ms) { - if (socket == nullptr) return 0; - return static_cast(socket)->waitForConnected(timeout_ms) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qabstractsocket_wait_for_ready_read(void* socket, int timeout_ms) { - if (socket == nullptr) return 0; - return static_cast(socket)->waitForReadyRead(timeout_ms) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qabstractsocket_wait_for_bytes_written(void* socket, int timeout_ms) { - if (socket == nullptr) return 0; - return static_cast(socket)->waitForBytesWritten(timeout_ms) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qabstractsocket_wait_for_disconnected(void* socket, int timeout_ms) { - if (socket == nullptr) return 0; - return static_cast(socket)->waitForDisconnected(timeout_ms) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qabstractsocket_is_valid(void* socket) { - if (socket == nullptr) return 0; - return static_cast(socket)->isValid() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qabstractsocket_is_open(void* socket) { - if (socket == nullptr) return 0; - return static_cast(socket)->isOpen() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qabstractsocket_flush(void* socket) { - if (socket == nullptr) return 0; - return static_cast(socket)->flush() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qabstractsocket_close(void* socket) { - if (socket == nullptr) return; - static_cast(socket)->close(); -} - -extern "C" VQT6_API void vqt6_qabstractsocket_abort(void* socket) { - if (socket == nullptr) return; - static_cast(socket)->abort(); -} - -extern "C" VQT6_API size_t vqt6_qabstractsocket_read(void* socket, void* buf, size_t max_size) { - if (socket == nullptr || buf == nullptr) return 0; - return static_cast(static_cast(socket)->read(static_cast(buf), static_cast(max_size))); -} - -extern "C" VQT6_API void* vqt6_qabstractsocket_read_all(void* socket, size_t* out_size) { - if (socket == nullptr) return nullptr; - QByteArray ba = static_cast(socket)->readAll(); - if (out_size != nullptr) *out_size = static_cast(ba.size()); - return ba.data(); -} - -extern "C" VQT6_API size_t vqt6_qabstractsocket_write(void* socket, const void* data, size_t size) { - if (socket == nullptr || data == nullptr) return 0; - return static_cast(static_cast(socket)->write(static_cast(data), static_cast(size))); -} - -extern "C" VQT6_API size_t vqt6_qabstractsocket_bytes_available(void* socket) { - if (socket == nullptr) return 0; - return static_cast(static_cast(socket)->bytesAvailable()); -} - -extern "C" VQT6_API size_t vqt6_qabstractsocket_bytes_to_write(void* socket) { - if (socket == nullptr) return 0; - return static_cast(static_cast(socket)->bytesToWrite()); -} - -extern "C" VQT6_API void* vqt6_qabstractsocket_peer_address(void* socket) { - if (socket == nullptr) return nullptr; - return new QHostAddress(static_cast(socket)->peerAddress()); -} - -extern "C" VQT6_API uint16_t vqt6_qabstractsocket_peer_port(void* socket) { - if (socket == nullptr) return 0; - return static_cast(static_cast(socket)->peerPort()); -} - -extern "C" VQT6_API void* vqt6_qabstractsocket_local_address(void* socket) { - if (socket == nullptr) return nullptr; - return new QHostAddress(static_cast(socket)->localAddress()); -} - -extern "C" VQT6_API uint16_t vqt6_qabstractsocket_local_port(void* socket) { - if (socket == nullptr) return 0; - return static_cast(static_cast(socket)->localPort()); -} - -// ============================================================ -// QTcpSocket -// ============================================================ -extern "C" VQT6_API void* vqt6_qtcpsocket_create(void) { - return new QTcpSocket(); -} - -extern "C" VQT6_API void* vqt6_qtcpsocket_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QTcpSocket(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qtcpsocket_connect_to_host(void* socket, void* host_name, uint16_t port, int mode) { - if (socket == nullptr || host_name == nullptr) return; - static_cast(socket)->connectToHost(*static_cast(host_name), port, - static_cast(mode)); -} - -extern "C" VQT6_API void vqt6_qtcpsocket_connect_to_host_with_addr(void* socket, void* address, uint16_t port, int mode) { - if (socket == nullptr || address == nullptr) return; - static_cast(socket)->connectToHost(*static_cast(address), port, - static_cast(mode)); -} - -extern "C" VQT6_API int vqt6_qtcpsocket_set_socket_descriptor(void* socket, intptr_t socket_descriptor) { - if (socket == nullptr) return 0; - return static_cast(socket)->setSocketDescriptor(static_cast(socket_descriptor)) ? 1 : 0; -} - -extern "C" VQT6_API intptr_t vqt6_qtcpsocket_socket_descriptor(void* socket) { - if (socket == nullptr) return -1; - return static_cast(static_cast(socket)->socketDescriptor()); -} - -extern "C" VQT6_API void vqt6_qtcpsocket_set_proxy(void* socket, int proxy_type) { - Q_UNUSED(socket); - Q_UNUSED(proxy_type); - // QNetworkProxy 配置在更高层 -} - -extern "C" VQT6_API void vqt6_qtcpsocket_abort(void* socket) { - if (socket == nullptr) return; - static_cast(socket)->abort(); -} - -// ============================================================ -// QUdpSocket -// ============================================================ -extern "C" VQT6_API void* vqt6_qudpsocket_create(void) { - return new QUdpSocket(); -} - -extern "C" VQT6_API void* vqt6_qudpsocket_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QUdpSocket(static_cast(parent)); -} - -extern "C" VQT6_API int vqt6_qudpsocket_bind(void* socket, uint16_t port) { - if (socket == nullptr) return 0; - return static_cast(socket)->bind(port) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qudpsocket_bind_with_addr(void* socket, void* address, uint16_t port) { - if (socket == nullptr || address == nullptr) return 0; - return static_cast(socket)->bind(*static_cast(address), port) ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qudpsocket_close(void* socket) { - if (socket == nullptr) return; - static_cast(socket)->close(); -} - -extern "C" VQT6_API size_t vqt6_qudpsocket_write_datagram(void* socket, const void* data, size_t size, void* host, uint16_t port) { - if (socket == nullptr || data == nullptr || host == nullptr) return 0; - return static_cast(static_cast(socket)->writeDatagram( - static_cast(data), static_cast(size), - *static_cast(host), port)); -} - -extern "C" VQT6_API size_t vqt6_qudpsocket_read_datagram(void* socket, void* data, size_t max_size, void* host, uint16_t* port) { - if (socket == nullptr || data == nullptr) return 0; - QHostAddress sender; - quint16 sender_port = 0; - qint64 n = static_cast(socket)->readDatagram( - static_cast(data), static_cast(max_size), &sender, &sender_port); - if (host != nullptr) { - QHostAddress* dst = static_cast(host); - *dst = sender; - } - if (port != nullptr) { - *port = sender_port; - } - return static_cast(n); -} - -extern "C" VQT6_API int vqt6_qudpsocket_has_pending_datagrams(void* socket) { - if (socket == nullptr) return 0; - return static_cast(socket)->hasPendingDatagrams() ? 1 : 0; -} - -extern "C" VQT6_API size_t vqt6_qudpsocket_pending_datagram_size(void* socket) { - if (socket == nullptr) return 0; - return static_cast(static_cast(socket)->pendingDatagramSize()); -} - -extern "C" VQT6_API int vqt6_qudpsocket_join_multicast_group(void* socket, void* group_address) { - if (socket == nullptr || group_address == nullptr) return 0; - return static_cast(socket)->joinMulticastGroup(*static_cast(group_address)) ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qudpsocket_leave_multicast_group(void* socket, void* group_address) { - if (socket == nullptr || group_address == nullptr) return 0; - return static_cast(socket)->leaveMulticastGroup(*static_cast(group_address)) ? 1 : 0; -} - -// ============================================================ -// QNetworkRequest -// ============================================================ -extern "C" VQT6_API void* vqt6_qnetworkrequest_create(void) { - return new QNetworkRequest(); -} - -extern "C" VQT6_API void* vqt6_qnetworkrequest_create_with_url(void* url) { - if (url == nullptr) return new QNetworkRequest(); - return new QNetworkRequest(QUrl(*static_cast(url))); -} - -extern "C" VQT6_API void vqt6_qnetworkrequest_set_url(void* req, void* url) { - if (req == nullptr || url == nullptr) return; - static_cast(req)->setUrl(QUrl(*static_cast(url))); -} - -extern "C" VQT6_API void* vqt6_qnetworkrequest_url(void* req) { - if (req == nullptr) return nullptr; - return new QString(static_cast(req)->url().toString()); -} - -extern "C" VQT6_API void vqt6_qnetworkrequest_set_header(void* req, int header_type, void* value) { - if (req == nullptr || value == nullptr) return; - static_cast(req)->setHeader(static_cast(header_type), - *static_cast(value)); -} - -extern "C" VQT6_API void* vqt6_qnetworkrequest_header(void* req, int header_type) { - if (req == nullptr) return nullptr; - return new QVariant(static_cast(req)->header(static_cast(header_type))); -} - -extern "C" VQT6_API void vqt6_qnetworkrequest_set_raw_header(void* req, const char* header_name, const void* value, size_t value_size) { - if (req == nullptr || header_name == nullptr) return; - static_cast(req)->setRawHeader(QByteArray(header_name), - QByteArray(static_cast(value), static_cast(value_size))); -} - -extern "C" VQT6_API void* vqt6_qnetworkrequest_raw_header(void* req, const char* header_name, size_t* out_size) { - if (req == nullptr || header_name == nullptr) return nullptr; - QByteArray ba = static_cast(req)->rawHeader(QByteArray(header_name)); - if (out_size != nullptr) *out_size = static_cast(ba.size()); - return ba.data(); -} - -extern "C" VQT6_API void vqt6_qnetworkrequest_set_attribute(void* req, int attr_type, void* value) { - if (req == nullptr || value == nullptr) return; - static_cast(req)->setAttribute(static_cast(attr_type), - *static_cast(value)); -} - -extern "C" VQT6_API void* vqt6_qnetworkrequest_attribute(void* req, int attr_type) { - if (req == nullptr) return nullptr; - return new QVariant(static_cast(req)->attribute(static_cast(attr_type))); -} - -extern "C" VQT6_API void vqt6_qnetworkrequest_free(void* req) { - delete static_cast(req); -} - -// ============================================================ -// QNetworkAccessManager -// ============================================================ -extern "C" VQT6_API void* vqt6_qnetworkaccessmanager_create(void) { - return new QNetworkAccessManager(); -} - -extern "C" VQT6_API void* vqt6_qnetworkaccessmanager_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QNetworkAccessManager(static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qnetworkaccessmanager_get(void* nam, void* req) { - if (nam == nullptr || req == nullptr) return nullptr; - return static_cast(nam)->get(*static_cast(req)); -} - -extern "C" VQT6_API void* vqt6_qnetworkaccessmanager_post(void* nam, void* req, const void* data, size_t size) { - if (nam == nullptr || req == nullptr) return nullptr; - QByteArray payload; - if (data != nullptr && size > 0) { - payload = QByteArray(static_cast(data), static_cast(size)); - } - return static_cast(nam)->post(*static_cast(req), payload); -} - -extern "C" VQT6_API void* vqt6_qnetworkaccessmanager_put(void* nam, void* req, const void* data, size_t size) { - if (nam == nullptr || req == nullptr) return nullptr; - QByteArray payload; - if (data != nullptr && size > 0) { - payload = QByteArray(static_cast(data), static_cast(size)); - } - return static_cast(nam)->put(*static_cast(req), payload); -} - -extern "C" VQT6_API void* vqt6_qnetworkaccessmanager_delete_resource(void* nam, void* req) { - if (nam == nullptr || req == nullptr) return nullptr; - return static_cast(nam)->deleteResource(*static_cast(req)); -} - -extern "C" VQT6_API void* vqt6_qnetworkaccessmanager_head(void* nam, void* req) { - if (nam == nullptr || req == nullptr) return nullptr; - return static_cast(nam)->head(*static_cast(req)); -} - -extern "C" VQT6_API void vqt6_qnetworkaccessmanager_set_cookie_store(void* nam, void* store) { - if (nam == nullptr || store == nullptr) return; - QNetworkCookieJar* jar = qobject_cast(static_cast(store)); - if (jar != nullptr) { - static_cast(nam)->setCookieJar(jar); - } -} - -// ============================================================ -// QNetworkReply -// ============================================================ -extern "C" VQT6_API void* vqt6_qnetworkreply_url(void* reply) { - if (reply == nullptr) return nullptr; - return new QString(static_cast(reply)->url().toString()); -} - -extern "C" VQT6_API void* vqt6_qnetworkreply_request(void* reply) { - if (reply == nullptr) return nullptr; - return new QNetworkRequest(static_cast(reply)->request()); -} - -extern "C" VQT6_API int vqt6_qnetworkreply_error(void* reply) { - if (reply == nullptr) return 0; - return static_cast(static_cast(reply)->error()); -} - -extern "C" VQT6_API void* vqt6_qnetworkreply_error_string(void* reply) { - if (reply == nullptr) return nullptr; - return new QString(static_cast(reply)->errorString()); -} - -extern "C" VQT6_API int vqt6_qnetworkreply_is_finished(void* reply) { - if (reply == nullptr) return 0; - return static_cast(reply)->isFinished() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qnetworkreply_is_running(void* reply) { - if (reply == nullptr) return 0; - return static_cast(reply)->isRunning() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qnetworkreply_abort(void* reply) { - if (reply == nullptr) return; - static_cast(reply)->abort(); -} - -extern "C" VQT6_API size_t vqt6_qnetworkreply_read(void* reply, void* buf, size_t max_size) { - if (reply == nullptr || buf == nullptr) return 0; - return static_cast(static_cast(reply)->read(static_cast(buf), static_cast(max_size))); -} - -extern "C" VQT6_API void* vqt6_qnetworkreply_read_all(void* reply, size_t* out_size) { - if (reply == nullptr) return nullptr; - QByteArray ba = static_cast(reply)->readAll(); - if (out_size != nullptr) *out_size = static_cast(ba.size()); - return ba.data(); -} - -extern "C" VQT6_API size_t vqt6_qnetworkreply_bytes_available(void* reply) { - if (reply == nullptr) return 0; - return static_cast(static_cast(reply)->bytesAvailable()); -} - -extern "C" VQT6_API void* vqt6_qnetworkreply_header(void* reply, int header_type) { - if (reply == nullptr) return nullptr; - return new QVariant(static_cast(reply)->header(static_cast(header_type))); -} - -extern "C" VQT6_API void* vqt6_qnetworkreply_raw_header(void* reply, const char* header_name, size_t* out_size) { - if (reply == nullptr || header_name == nullptr) return nullptr; - QByteArray ba = static_cast(reply)->rawHeader(QByteArray(header_name)); - if (out_size != nullptr) *out_size = static_cast(ba.size()); - return ba.data(); -} - -extern "C" VQT6_API void* vqt6_qnetworkreply_attribute(void* reply, int attribute_code) { - if (reply == nullptr) return nullptr; - return new QVariant(static_cast(reply)->attribute(static_cast(attribute_code))); -} - -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(reply)->attribute(static_cast(attribute_code)).toInt(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(reply)->setRawHeader(QByteArray(header_name), - QByteArray(static_cast(value), static_cast(value_size))); -} diff --git a/vqt6 copy/_bridge_network.h b/vqt6 copy/_bridge_network.h deleted file mode 100644 index 2f99580..0000000 --- a/vqt6 copy/_bridge_network.h +++ /dev/null @@ -1,137 +0,0 @@ -// ============================================================ -// vqt6/_bridge_network.h — QtNetwork C 桥接函数声明 -// ============================================================ - -#ifndef VQT6_BRIDGE_NETWORK_H -#define VQT6_BRIDGE_NETWORK_H - -#include "_bridge.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// ============================================================ -// QHostAddress -// ============================================================ -VQT6_API void* vqt6_qhostaddress_create(void); -VQT6_API void* vqt6_qhostaddress_create_with_ipv4(uint32_t ipv4); -VQT6_API void* vqt6_qhostaddress_create_with_string(void* address); -VQT6_API void* vqt6_qhostaddress_create_with_local_host(void); -VQT6_API void* vqt6_qhostaddress_create_with_local_ipv4(void); -VQT6_API void* vqt6_qhostaddress_create_with_broadcast(void); -VQT6_API void* vqt6_qhostaddress_create_with_any_ipv4(void); -VQT6_API void* vqt6_qhostaddress_to_string(void* addr); -VQT6_API uint32_t vqt6_qhostaddress_to_ipv4(void* addr); -VQT6_API int vqt6_qhostaddress_is_null(void* addr); -VQT6_API int vqt6_qhostaddress_is_loopback(void* addr); -VQT6_API int vqt6_qhostaddress_is_broadcast(void* addr); -VQT6_API int vqt6_qhostaddress_protocol(void* addr); -VQT6_API void vqt6_qhostaddress_free(void* addr); - -// ============================================================ -// QAbstractSocket -// ============================================================ -VQT6_API int vqt6_qabstractsocket_state(void* socket); -VQT6_API int vqt6_qabstractsocket_error(void* socket); -VQT6_API void* vqt6_qabstractsocket_error_string(void* socket); -VQT6_API void vqt6_qabstractsocket_connect_to_host(void* socket, void* host_name, uint16_t port); -VQT6_API void vqt6_qabstractsocket_connect_to_host_with_addr(void* socket, void* address, uint16_t port); -VQT6_API void vqt6_qabstractsocket_disconnect_from_host(void* socket); -VQT6_API int vqt6_qabstractsocket_wait_for_connected(void* socket, int timeout_ms); -VQT6_API int vqt6_qabstractsocket_wait_for_ready_read(void* socket, int timeout_ms); -VQT6_API int vqt6_qabstractsocket_wait_for_bytes_written(void* socket, int timeout_ms); -VQT6_API int vqt6_qabstractsocket_wait_for_disconnected(void* socket, int timeout_ms); -VQT6_API int vqt6_qabstractsocket_is_valid(void* socket); -VQT6_API int vqt6_qabstractsocket_is_open(void* socket); -VQT6_API int vqt6_qabstractsocket_flush(void* socket); -VQT6_API void vqt6_qabstractsocket_close(void* socket); -VQT6_API void vqt6_qabstractsocket_abort(void* socket); -VQT6_API size_t vqt6_qabstractsocket_read(void* socket, void* buf, size_t max_size); -VQT6_API void* vqt6_qabstractsocket_read_all(void* socket, size_t* out_size); -VQT6_API size_t vqt6_qabstractsocket_write(void* socket, const void* data, size_t size); -VQT6_API size_t vqt6_qabstractsocket_bytes_available(void* socket); -VQT6_API size_t vqt6_qabstractsocket_bytes_to_write(void* socket); -VQT6_API void* vqt6_qabstractsocket_peer_address(void* socket); -VQT6_API uint16_t vqt6_qabstractsocket_peer_port(void* socket); -VQT6_API void* vqt6_qabstractsocket_local_address(void* socket); -VQT6_API uint16_t vqt6_qabstractsocket_local_port(void* socket); - -// ============================================================ -// QTcpSocket -// ============================================================ -VQT6_API void* vqt6_qtcpsocket_create(void); -VQT6_API void* vqt6_qtcpsocket_create_with_parent(void* parent); -VQT6_API void vqt6_qtcpsocket_connect_to_host(void* socket, void* host_name, uint16_t port, int mode); -VQT6_API void vqt6_qtcpsocket_connect_to_host_with_addr(void* socket, void* address, uint16_t port, int mode); -VQT6_API int vqt6_qtcpsocket_set_socket_descriptor(void* socket, intptr_t socket_descriptor); -VQT6_API intptr_t vqt6_qtcpsocket_socket_descriptor(void* socket); -VQT6_API void vqt6_qtcpsocket_set_proxy(void* socket, int proxy_type); -VQT6_API void vqt6_qtcpsocket_abort(void* socket); - -// ============================================================ -// QUdpSocket -// ============================================================ -VQT6_API void* vqt6_qudpsocket_create(void); -VQT6_API void* vqt6_qudpsocket_create_with_parent(void* parent); -VQT6_API int vqt6_qudpsocket_bind(void* socket, uint16_t port); -VQT6_API int vqt6_qudpsocket_bind_with_addr(void* socket, void* address, uint16_t port); -VQT6_API void vqt6_qudpsocket_close(void* socket); -VQT6_API size_t vqt6_qudpsocket_write_datagram(void* socket, const void* data, size_t size, void* host, uint16_t port); -VQT6_API size_t vqt6_qudpsocket_read_datagram(void* socket, void* data, size_t max_size, void* host, uint16_t* port); -VQT6_API int vqt6_qudpsocket_has_pending_datagrams(void* socket); -VQT6_API size_t vqt6_qudpsocket_pending_datagram_size(void* socket); -VQT6_API int vqt6_qudpsocket_join_multicast_group(void* socket, void* group_address); -VQT6_API int vqt6_qudpsocket_leave_multicast_group(void* socket, void* group_address); - -// ============================================================ -// QNetworkRequest -// ============================================================ -VQT6_API void* vqt6_qnetworkrequest_create(void); -VQT6_API void* vqt6_qnetworkrequest_create_with_url(void* url); -VQT6_API void vqt6_qnetworkrequest_set_url(void* req, void* url); -VQT6_API void* vqt6_qnetworkrequest_url(void* req); -VQT6_API void vqt6_qnetworkrequest_set_header(void* req, int header_type, void* value); -VQT6_API void* vqt6_qnetworkrequest_header(void* req, int header_type); -VQT6_API void vqt6_qnetworkrequest_set_raw_header(void* req, const char* header_name, const void* value, size_t value_size); -VQT6_API void* vqt6_qnetworkrequest_raw_header(void* req, const char* header_name, size_t* out_size); -VQT6_API void vqt6_qnetworkrequest_set_attribute(void* req, int attr_type, void* value); -VQT6_API void* vqt6_qnetworkrequest_attribute(void* req, int attr_type); -VQT6_API void vqt6_qnetworkrequest_free(void* req); - -// ============================================================ -// QNetworkAccessManager -// ============================================================ -VQT6_API void* vqt6_qnetworkaccessmanager_create(void); -VQT6_API void* vqt6_qnetworkaccessmanager_create_with_parent(void* parent); -VQT6_API void* vqt6_qnetworkaccessmanager_get(void* nam, void* req); -VQT6_API void* vqt6_qnetworkaccessmanager_post(void* nam, void* req, const void* data, size_t size); -VQT6_API void* vqt6_qnetworkaccessmanager_put(void* nam, void* req, const void* data, size_t size); -VQT6_API void* vqt6_qnetworkaccessmanager_delete_resource(void* nam, void* req); -VQT6_API void* vqt6_qnetworkaccessmanager_head(void* nam, void* req); -VQT6_API void vqt6_qnetworkaccessmanager_set_cookie_store(void* nam, void* store); - -// ============================================================ -// QNetworkReply -// ============================================================ -VQT6_API void* vqt6_qnetworkreply_url(void* reply); -VQT6_API void* vqt6_qnetworkreply_request(void* reply); -VQT6_API int vqt6_qnetworkreply_error(void* reply); -VQT6_API void* vqt6_qnetworkreply_error_string(void* reply); -VQT6_API int vqt6_qnetworkreply_is_finished(void* reply); -VQT6_API int vqt6_qnetworkreply_is_running(void* reply); -VQT6_API void vqt6_qnetworkreply_abort(void* reply); -VQT6_API size_t vqt6_qnetworkreply_read(void* reply, void* buf, size_t max_size); -VQT6_API void* vqt6_qnetworkreply_read_all(void* reply, size_t* out_size); -VQT6_API size_t vqt6_qnetworkreply_bytes_available(void* reply); -VQT6_API void* vqt6_qnetworkreply_header(void* reply, int header_type); -VQT6_API void* vqt6_qnetworkreply_raw_header(void* reply, const char* header_name, size_t* out_size); -VQT6_API void* vqt6_qnetworkreply_attribute(void* reply, int attribute_code); -VQT6_API int vqt6_qnetworkreply_attribute_int(void* reply, int attribute_code, int default_value); -VQT6_API void vqt6_qnetworkreply_set_raw_header(void* reply, const char* header_name, const void* value, size_t value_size); - -#ifdef __cplusplus -} -#endif - -#endif // VQT6_BRIDGE_NETWORK_H diff --git a/vqt6 copy/_bridge_widgets.cpp b/vqt6 copy/_bridge_widgets.cpp deleted file mode 100644 index 2b963a5..0000000 --- a/vqt6 copy/_bridge_widgets.cpp +++ /dev/null @@ -1,1745 +0,0 @@ -// ============================================================ -// vqt6/_bridge_widgets.cpp — QtWidgets C 桥接层实现 -// ============================================================ - -#include "_bridge.h" -#include "_bridge_widgets.h" -#include "_bridge_gui.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// ============================================================ -// QApplication -// ============================================================ -extern "C" VQT6_API void* vqt6_qapplication_create(int argc, char** argv) { - return new QApplication(argc, argv); -} - -extern "C" VQT6_API void* vqt6_qapplication_instance(void) { - return QApplication::instance(); -} - -extern "C" VQT6_API int vqt6_qapplication_exec(void* app) { - if (app == nullptr) return -1; - return static_cast(app)->exec(); -} - -extern "C" VQT6_API void vqt6_qapplication_quit(void* app) { - if (app == nullptr) return; - static_cast(app)->quit(); -} - -extern "C" VQT6_API void vqt6_qapplication_exit(void* app, int exit_code) { - if (app == nullptr) return; - static_cast(app)->exit(exit_code); -} - -extern "C" VQT6_API void vqt6_qapplication_process_events(void* app) { - if (app == nullptr) return; - static_cast(app)->processEvents(); -} - -extern "C" VQT6_API int vqt6_qapplication_desktop_width(void* app) { - if (app == nullptr) return 0; - QScreen* screen = static_cast(app)->primaryScreen(); - return screen != nullptr ? screen->size().width() : 0; -} - -extern "C" VQT6_API int vqt6_qapplication_desktop_height(void* app) { - if (app == nullptr) return 0; - QScreen* screen = static_cast(app)->primaryScreen(); - return screen != nullptr ? screen->size().height() : 0; -} - -extern "C" VQT6_API void vqt6_qapplication_set_quit_on_last_window_closed(void* app, int quit) { - if (app == nullptr) return; - static_cast(app)->setQuitOnLastWindowClosed(quit != 0); -} - -extern "C" VQT6_API int vqt6_qapplication_quit_on_last_window_closed(void* app) { - if (app == nullptr) return 0; - return QApplication::quitOnLastWindowClosed() ? 1 : 0; -} - -// ============================================================ -// QWidget -// ============================================================ -extern "C" VQT6_API void* vqt6_qwidget_create(void) { - return new QWidget(); -} - -extern "C" VQT6_API void* vqt6_qwidget_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QWidget(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qwidget_show(void* widget) { - if (widget == nullptr) return; - static_cast(widget)->show(); -} - -extern "C" VQT6_API void vqt6_qwidget_hide(void* widget) { - if (widget == nullptr) return; - static_cast(widget)->hide(); -} - -extern "C" VQT6_API int vqt6_qwidget_close(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->close() ? 1 : 0; -} - -extern "C" VQT6_API int vqt6_qwidget_is_visible(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->isVisible() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qwidget_set_visible(void* widget, int visible) { - if (widget == nullptr) return; - static_cast(widget)->setVisible(visible != 0); -} - -extern "C" VQT6_API void vqt6_qwidget_set_geometry(void* widget, int x, int y, int w, int h) { - if (widget == nullptr) return; - static_cast(widget)->setGeometry(x, y, w, h); -} - -extern "C" VQT6_API void vqt6_qwidget_geometry(void* widget, int* x, int* y, int* w, int* h) { - if (widget == nullptr) return; - QRect r = static_cast(widget)->geometry(); - if (x != nullptr) *x = r.x(); - if (y != nullptr) *y = r.y(); - if (w != nullptr) *w = r.width(); - if (h != nullptr) *h = r.height(); -} - -extern "C" VQT6_API void vqt6_qwidget_resize(void* widget, int w, int h) { - if (widget == nullptr) return; - static_cast(widget)->resize(w, h); -} - -extern "C" VQT6_API void vqt6_qwidget_size(void* widget, int* w, int* h) { - if (widget == nullptr) return; - QSize s = static_cast(widget)->size(); - if (w != nullptr) *w = s.width(); - if (h != nullptr) *h = s.height(); -} - -extern "C" VQT6_API void vqt6_qwidget_move(void* widget, int x, int y) { - if (widget == nullptr) return; - static_cast(widget)->move(x, y); -} - -extern "C" VQT6_API void vqt6_qwidget_pos(void* widget, int* x, int* y) { - if (widget == nullptr) return; - QPoint p = static_cast(widget)->pos(); - if (x != nullptr) *x = p.x(); - if (y != nullptr) *y = p.y(); -} - -extern "C" VQT6_API int vqt6_qwidget_width(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->width(); -} - -extern "C" VQT6_API int vqt6_qwidget_height(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->height(); -} - -extern "C" VQT6_API int vqt6_qwidget_x(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->x(); -} - -extern "C" VQT6_API int vqt6_qwidget_y(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->y(); -} - -extern "C" VQT6_API void vqt6_qwidget_set_window_title(void* widget, void* title) { - if (widget == nullptr || title == nullptr) return; - static_cast(widget)->setWindowTitle(*static_cast(title)); -} - -extern "C" VQT6_API void* vqt6_qwidget_window_title(void* widget) { - if (widget == nullptr) return nullptr; - return new QString(static_cast(widget)->windowTitle()); -} - -extern "C" VQT6_API void vqt6_qwidget_set_text(void* widget, void* text) { - if (widget == nullptr || text == nullptr) return; - static_cast(widget)->setWindowTitle(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qwidget_text(void* widget) { - if (widget == nullptr) return nullptr; - return new QString(static_cast(widget)->windowTitle()); -} - -extern "C" VQT6_API void vqt6_qwidget_set_enabled(void* widget, int enabled) { - if (widget == nullptr) return; - static_cast(widget)->setEnabled(enabled != 0); -} - -extern "C" VQT6_API int vqt6_qwidget_is_enabled(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->isEnabled() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qwidget_set_parent(void* widget, void* parent) { - if (widget == nullptr) return; - static_cast(widget)->setParent(static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qwidget_parent_widget(void* widget) { - if (widget == nullptr) return nullptr; - return static_cast(widget)->parentWidget(); -} - -extern "C" VQT6_API void vqt6_qwidget_set_focus(void* widget) { - if (widget == nullptr) return; - static_cast(widget)->setFocus(); -} - -extern "C" VQT6_API void vqt6_qwidget_clear_focus(void* widget) { - if (widget == nullptr) return; - static_cast(widget)->clearFocus(); -} - -extern "C" VQT6_API int vqt6_qwidget_has_focus(void* widget) { - if (widget == nullptr) return 0; - return static_cast(widget)->hasFocus() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qwidget_set_focus_policy(void* widget, int policy) { - if (widget == nullptr) return; - static_cast(widget)->setFocusPolicy(static_cast(policy)); -} - -extern "C" VQT6_API void vqt6_qwidget_update(void* widget) { - if (widget == nullptr) return; - static_cast(widget)->update(); -} - -extern "C" VQT6_API void vqt6_qwidget_repaint(void* widget) { - if (widget == nullptr) return; - static_cast(widget)->repaint(); -} - -extern "C" VQT6_API void vqt6_qwidget_set_update_enabled(void* widget, int enabled) { - if (widget == nullptr) return; - static_cast(widget)->setUpdatesEnabled(enabled != 0); -} - -extern "C" VQT6_API void vqt6_qwidget_set_window_flags(void* widget, int flags) { - if (widget == nullptr) return; - static_cast(widget)->setWindowFlags(static_cast(flags)); -} - -extern "C" VQT6_API int vqt6_qwidget_window_flags(void* widget) { - if (widget == nullptr) return 0; - return static_cast(static_cast(widget)->windowFlags()); -} - -extern "C" VQT6_API void vqt6_qwidget_set_cursor(void* widget, void* cursor) { - if (widget == nullptr || cursor == nullptr) return; - static_cast(widget)->setCursor(*static_cast(cursor)); -} - -extern "C" VQT6_API void* vqt6_qwidget_cursor(void* widget) { - if (widget == nullptr) return nullptr; - return new QCursor(static_cast(widget)->cursor()); -} - -extern "C" VQT6_API void vqt6_qwidget_unset_cursor(void* widget) { - if (widget == nullptr) return; - static_cast(widget)->unsetCursor(); -} - -extern "C" VQT6_API void vqt6_qwidget_set_tool_tip(void* widget, void* tip) { - if (widget == nullptr || tip == nullptr) return; - static_cast(widget)->setToolTip(*static_cast(tip)); -} - -extern "C" VQT6_API void* vqt6_qwidget_tool_tip(void* widget) { - if (widget == nullptr) return nullptr; - return new QString(static_cast(widget)->toolTip()); -} - -extern "C" VQT6_API void vqt6_qwidget_set_status_tip(void* widget, void* tip) { - if (widget == nullptr || tip == nullptr) return; - static_cast(widget)->setStatusTip(*static_cast(tip)); -} - -extern "C" VQT6_API void* vqt6_qwidget_status_tip(void* widget) { - if (widget == nullptr) return nullptr; - return new QString(static_cast(widget)->statusTip()); -} - -extern "C" VQT6_API void vqt6_qwidget_set_minimum_size(void* widget, int w, int h) { - if (widget == nullptr) return; - static_cast(widget)->setMinimumSize(w, h); -} - -extern "C" VQT6_API void vqt6_qwidget_set_maximum_size(void* widget, int w, int h) { - if (widget == nullptr) return; - static_cast(widget)->setMaximumSize(w, h); -} - -extern "C" VQT6_API void vqt6_qwidget_set_fixed_size(void* widget, int w, int h) { - if (widget == nullptr) return; - static_cast(widget)->setFixedSize(w, h); -} - -extern "C" VQT6_API void vqt6_qwidget_minimum_size(void* widget, int* w, int* h) { - if (widget == nullptr) return; - QSize s = static_cast(widget)->minimumSize(); - if (w != nullptr) *w = s.width(); - if (h != nullptr) *h = s.height(); -} - -extern "C" VQT6_API void vqt6_qwidget_maximum_size(void* widget, int* w, int* h) { - if (widget == nullptr) return; - QSize s = static_cast(widget)->maximumSize(); - if (w != nullptr) *w = s.width(); - if (h != nullptr) *h = s.height(); -} - -// ============================================================ -// QDialog -// ============================================================ -extern "C" VQT6_API void* vqt6_qdialog_create(void) { - return new QDialog(); -} - -extern "C" VQT6_API void* vqt6_qdialog_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QDialog(static_cast(parent)); -} - -extern "C" VQT6_API int vqt6_qdialog_exec(void* dialog) { - if (dialog == nullptr) return -1; - return static_cast(dialog)->exec(); -} - -extern "C" VQT6_API void vqt6_qdialog_done(void* dialog, int result) { - if (dialog == nullptr) return; - static_cast(dialog)->done(result); -} - -extern "C" VQT6_API void vqt6_qdialog_accept(void* dialog) { - if (dialog == nullptr) return; - static_cast(dialog)->accept(); -} - -extern "C" VQT6_API void vqt6_qdialog_reject(void* dialog) { - if (dialog == nullptr) return; - static_cast(dialog)->reject(); -} - -extern "C" VQT6_API void vqt6_qdialog_set_result(void* dialog, int result) { - if (dialog == nullptr) return; - static_cast(dialog)->setResult(result); -} - -extern "C" VQT6_API int vqt6_qdialog_result(void* dialog) { - if (dialog == nullptr) return 0; - return static_cast(dialog)->result(); -} - -extern "C" VQT6_API void vqt6_qdialog_set_modal(void* dialog, int modal) { - if (dialog == nullptr) return; - static_cast(dialog)->setModal(modal != 0); -} - -extern "C" VQT6_API int vqt6_qdialog_is_modal(void* dialog) { - if (dialog == nullptr) return 0; - return static_cast(dialog)->isModal() ? 1 : 0; -} - -// ============================================================ -// QMainWindow -// ============================================================ -extern "C" VQT6_API void* vqt6_qmainwindow_create(void) { - return new QMainWindow(); -} - -extern "C" VQT6_API void* vqt6_qmainwindow_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QMainWindow(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qmainwindow_set_central_widget(void* mw, void* widget) { - if (mw == nullptr) return; - static_cast(mw)->setCentralWidget(static_cast(widget)); -} - -extern "C" VQT6_API void* vqt6_qmainwindow_central_widget(void* mw) { - if (mw == nullptr) return nullptr; - return static_cast(mw)->centralWidget(); -} - -extern "C" VQT6_API void* vqt6_qmainwindow_menu_bar(void* mw) { - if (mw == nullptr) return nullptr; - return static_cast(mw)->menuBar(); -} - -extern "C" VQT6_API void vqt6_qmainwindow_set_menu_bar(void* mw, void* menubar) { - if (mw == nullptr) return; - static_cast(mw)->setMenuBar(static_cast(menubar)); -} - -extern "C" VQT6_API void* vqt6_qmainwindow_status_bar(void* mw) { - if (mw == nullptr) return nullptr; - return static_cast(mw)->statusBar(); -} - -extern "C" VQT6_API void vqt6_qmainwindow_set_status_bar(void* mw, void* statusbar) { - if (mw == nullptr) return; - static_cast(mw)->setStatusBar(static_cast(statusbar)); -} - -extern "C" VQT6_API void vqt6_qmainwindow_add_tool_bar(void* mw, void* toolbar) { - if (mw == nullptr) return; - static_cast(mw)->addToolBar(static_cast(toolbar)); -} - -extern "C" VQT6_API void vqt6_qmainwindow_add_tool_bar_break(void* mw) { - if (mw == nullptr) return; - static_cast(mw)->addToolBarBreak(); -} - -// ============================================================ -// QLabel -// ============================================================ -extern "C" VQT6_API void* vqt6_qlabel_create(void) { - return new QLabel(); -} - -extern "C" VQT6_API void* vqt6_qlabel_create_with_text(void* text) { - if (text == nullptr) return nullptr; - return new QLabel(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qlabel_create_with_text_parent(void* text, void* parent) { - if (text == nullptr || parent == nullptr) return nullptr; - return new QLabel(*static_cast(text), static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qlabel_set_text(void* label, void* text) { - if (label == nullptr || text == nullptr) return; - static_cast(label)->setText(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qlabel_text(void* label) { - if (label == nullptr) return nullptr; - return new QString(static_cast(label)->text()); -} - -extern "C" VQT6_API void vqt6_qlabel_set_alignment(void* label, int alignment) { - if (label == nullptr) return; - static_cast(label)->setAlignment(static_cast(alignment)); -} - -extern "C" VQT6_API int vqt6_qlabel_alignment(void* label) { - if (label == nullptr) return 0; - return static_cast(static_cast(label)->alignment()); -} - -extern "C" VQT6_API void vqt6_qlabel_set_pixmap(void* label, void* pixmap) { - if (label == nullptr || pixmap == nullptr) return; - static_cast(label)->setPixmap(*static_cast(pixmap)); -} - -extern "C" VQT6_API void* vqt6_qlabel_pixmap(void* label) { - if (label == nullptr) return nullptr; - return new QPixmap(static_cast(label)->pixmap()); -} - -extern "C" VQT6_API void vqt6_qlabel_set_indent(void* label, int indent) { - if (label == nullptr) return; - static_cast(label)->setIndent(indent); -} - -extern "C" VQT6_API void vqt6_qlabel_set_margin(void* label, int margin) { - if (label == nullptr) return; - static_cast(label)->setMargin(margin); -} - -extern "C" VQT6_API void vqt6_qlabel_set_word_wrap(void* label, int wrap) { - if (label == nullptr) return; - static_cast(label)->setWordWrap(wrap != 0); -} - -extern "C" VQT6_API int vqt6_qlabel_word_wrap(void* label) { - if (label == nullptr) return 0; - return static_cast(label)->wordWrap() ? 1 : 0; -} - -// ============================================================ -// QPushButton -// ============================================================ -extern "C" VQT6_API void* vqt6_qpushbutton_create(void) { - return new QPushButton(); -} - -extern "C" VQT6_API void* vqt6_qpushbutton_create_with_text(void* text) { - if (text == nullptr) return nullptr; - return new QPushButton(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qpushbutton_create_with_text_parent(void* text, void* parent) { - if (text == nullptr || parent == nullptr) return nullptr; - return new QPushButton(*static_cast(text), static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qpushbutton_set_text(void* btn, void* text) { - if (btn == nullptr || text == nullptr) return; - static_cast(btn)->setText(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qpushbutton_text(void* btn) { - if (btn == nullptr) return nullptr; - return new QString(static_cast(btn)->text()); -} - -extern "C" VQT6_API void vqt6_qpushbutton_set_icon(void* btn, void* icon) { - if (btn == nullptr || icon == nullptr) return; - static_cast(btn)->setIcon(*static_cast(icon)); -} - -extern "C" VQT6_API void* vqt6_qpushbutton_icon(void* btn) { - if (btn == nullptr) return nullptr; - return new QIcon(static_cast(btn)->icon()); -} - -extern "C" VQT6_API void vqt6_qpushbutton_set_default(void* btn, int is_default) { - if (btn == nullptr) return; - static_cast(btn)->setDefault(is_default != 0); -} - -extern "C" VQT6_API int vqt6_qpushbutton_is_default(void* btn) { - if (btn == nullptr) return 0; - return static_cast(btn)->isDefault() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qpushbutton_set_flat(void* btn, int flat) { - if (btn == nullptr) return; - static_cast(btn)->setFlat(flat != 0); -} - -extern "C" VQT6_API int vqt6_qpushbutton_is_flat(void* btn) { - if (btn == nullptr) return 0; - return static_cast(btn)->isFlat() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qpushbutton_set_checkable(void* btn, int checkable) { - if (btn == nullptr) return; - static_cast(btn)->setCheckable(checkable != 0); -} - -extern "C" VQT6_API int vqt6_qpushbutton_is_checkable(void* btn) { - if (btn == nullptr) return 0; - return static_cast(btn)->isCheckable() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qpushbutton_set_checked(void* btn, int checked) { - if (btn == nullptr) return; - static_cast(btn)->setChecked(checked != 0); -} - -extern "C" VQT6_API int vqt6_qpushbutton_is_checked(void* btn) { - if (btn == nullptr) return 0; - return static_cast(btn)->isChecked() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qpushbutton_click(void* btn) { - if (btn == nullptr) return; - static_cast(btn)->click(); -} - -// ============================================================ -// QLineEdit -// ============================================================ -extern "C" VQT6_API void* vqt6_qlineedit_create(void) { - return new QLineEdit(); -} - -extern "C" VQT6_API void* vqt6_qlineedit_create_with_text(void* text) { - if (text == nullptr) return nullptr; - return new QLineEdit(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qlineedit_create_with_text_parent(void* text, void* parent) { - if (text == nullptr || parent == nullptr) return nullptr; - return new QLineEdit(*static_cast(text), static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qlineedit_text(void* le) { - if (le == nullptr) return nullptr; - return new QString(static_cast(le)->text()); -} - -extern "C" VQT6_API void vqt6_qlineedit_set_text(void* le, void* text) { - if (le == nullptr || text == nullptr) return; - static_cast(le)->setText(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qlineedit_placeholder_text(void* le) { - if (le == nullptr) return nullptr; - return new QString(static_cast(le)->placeholderText()); -} - -extern "C" VQT6_API void vqt6_qlineedit_set_placeholder_text(void* le, void* text) { - if (le == nullptr || text == nullptr) return; - static_cast(le)->setPlaceholderText(*static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qlineedit_set_max_length(void* le, int max) { - if (le == nullptr) return; - static_cast(le)->setMaxLength(max); -} - -extern "C" VQT6_API int vqt6_qlineedit_max_length(void* le) { - if (le == nullptr) return 0; - return static_cast(le)->maxLength(); -} - -extern "C" VQT6_API void vqt6_qlineedit_set_read_only(void* le, int ro) { - if (le == nullptr) return; - static_cast(le)->setReadOnly(ro != 0); -} - -extern "C" VQT6_API int vqt6_qlineedit_is_read_only(void* le) { - if (le == nullptr) return 0; - return static_cast(le)->isReadOnly() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qlineedit_set_echo_mode(void* le, int mode) { - if (le == nullptr) return; - static_cast(le)->setEchoMode(static_cast(mode)); -} - -extern "C" VQT6_API int vqt6_qlineedit_echo_mode(void* le) { - if (le == nullptr) return 0; - return static_cast(static_cast(le)->echoMode()); -} - -extern "C" VQT6_API void vqt6_qlineedit_select_all(void* le) { - if (le == nullptr) return; - static_cast(le)->selectAll(); -} - -extern "C" VQT6_API void vqt6_qlineedit_clear(void* le) { - if (le == nullptr) return; - static_cast(le)->clear(); -} - -// ============================================================ -// QTextEdit / QPlainTextEdit -// ============================================================ -extern "C" VQT6_API void* vqt6_qtextedit_create(void) { - return new QTextEdit(); -} - -extern "C" VQT6_API void* vqt6_qtextedit_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QTextEdit(static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qtextedit_to_plain_text(void* te) { - if (te == nullptr) return nullptr; - return new QString(static_cast(te)->toPlainText()); -} - -extern "C" VQT6_API void vqt6_qtextedit_set_plain_text(void* te, void* text) { - if (te == nullptr || text == nullptr) return; - static_cast(te)->setPlainText(*static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qtextedit_set_html(void* te, void* html) { - if (te == nullptr || html == nullptr) return; - static_cast(te)->setHtml(*static_cast(html)); -} - -extern "C" VQT6_API void* vqt6_qtextedit_to_html(void* te) { - if (te == nullptr) return nullptr; - return new QString(static_cast(te)->toHtml()); -} - -extern "C" VQT6_API void vqt6_qtextedit_append(void* te, void* text) { - if (te == nullptr || text == nullptr) return; - static_cast(te)->append(*static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qtextedit_clear(void* te) { - if (te == nullptr) return; - static_cast(te)->clear(); -} - -extern "C" VQT6_API void vqt6_qtextedit_set_read_only(void* te, int ro) { - if (te == nullptr) return; - static_cast(te)->setReadOnly(ro != 0); -} - -extern "C" VQT6_API int vqt6_qtextedit_is_read_only(void* te) { - if (te == nullptr) return 0; - return static_cast(te)->isReadOnly() ? 1 : 0; -} - -extern "C" VQT6_API void* vqt6_qplaintextedit_create(void) { - return new QPlainTextEdit(); -} - -extern "C" VQT6_API void* vqt6_qplaintextedit_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QPlainTextEdit(static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qplaintextedit_to_plain_text(void* pte) { - if (pte == nullptr) return nullptr; - return new QString(static_cast(pte)->toPlainText()); -} - -extern "C" VQT6_API void vqt6_qplaintextedit_set_plain_text(void* pte, void* text) { - if (pte == nullptr || text == nullptr) return; - static_cast(pte)->setPlainText(*static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qplaintextedit_append(void* pte, void* text) { - if (pte == nullptr || text == nullptr) return; - static_cast(pte)->appendPlainText(*static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qplaintextedit_clear(void* pte) { - if (pte == nullptr) return; - static_cast(pte)->clear(); -} - -extern "C" VQT6_API void vqt6_qplaintextedit_set_read_only(void* pte, int ro) { - if (pte == nullptr) return; - static_cast(pte)->setReadOnly(ro != 0); -} - -extern "C" VQT6_API int vqt6_qplaintextedit_line_count(void* pte) { - if (pte == nullptr) return 0; - return static_cast(pte)->blockCount(); -} - -// ============================================================ -// QCheckBox / QRadioButton -// ============================================================ -extern "C" VQT6_API void* vqt6_qcheckbox_create(void) { - return new QCheckBox(); -} - -extern "C" VQT6_API void* vqt6_qcheckbox_create_with_text(void* text) { - if (text == nullptr) return nullptr; - return new QCheckBox(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qcheckbox_create_with_text_parent(void* text, void* parent) { - if (text == nullptr || parent == nullptr) return nullptr; - return new QCheckBox(*static_cast(text), static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qcheckbox_set_checked(void* cb, int checked) { - if (cb == nullptr) return; - static_cast(cb)->setChecked(checked != 0); -} - -extern "C" VQT6_API int vqt6_qcheckbox_is_checked(void* cb) { - if (cb == nullptr) return 0; - return static_cast(cb)->isChecked() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qcheckbox_set_text(void* cb, void* text) { - if (cb == nullptr || text == nullptr) return; - static_cast(cb)->setText(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qcheckbox_text(void* cb) { - if (cb == nullptr) return nullptr; - return new QString(static_cast(cb)->text()); -} - -extern "C" VQT6_API void vqt6_qcheckbox_set_tristate(void* cb, int tristate) { - if (cb == nullptr) return; - static_cast(cb)->setTristate(tristate != 0); -} - -extern "C" VQT6_API int vqt6_qcheckbox_is_tristate(void* cb) { - if (cb == nullptr) return 0; - return static_cast(cb)->isTristate() ? 1 : 0; -} - -extern "C" VQT6_API void* vqt6_qradiobutton_create(void) { - return new QRadioButton(); -} - -extern "C" VQT6_API void* vqt6_qradiobutton_create_with_text(void* text) { - if (text == nullptr) return nullptr; - return new QRadioButton(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qradiobutton_create_with_text_parent(void* text, void* parent) { - if (text == nullptr || parent == nullptr) return nullptr; - return new QRadioButton(*static_cast(text), static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qradiobutton_set_checked(void* rb, int checked) { - if (rb == nullptr) return; - static_cast(rb)->setChecked(checked != 0); -} - -extern "C" VQT6_API int vqt6_qradiobutton_is_checked(void* rb) { - if (rb == nullptr) return 0; - return static_cast(rb)->isChecked() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qradiobutton_set_text(void* rb, void* text) { - if (rb == nullptr || text == nullptr) return; - static_cast(rb)->setText(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qradiobutton_text(void* rb) { - if (rb == nullptr) return nullptr; - return new QString(static_cast(rb)->text()); -} - -// ============================================================ -// QComboBox -// ============================================================ -extern "C" VQT6_API void* vqt6_qcombobox_create(void) { - return new QComboBox(); -} - -extern "C" VQT6_API void* vqt6_qcombobox_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QComboBox(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qcombobox_add_item(void* cb, void* text) { - if (cb == nullptr || text == nullptr) return; - static_cast(cb)->addItem(*static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qcombobox_add_items(void* cb, void* items) { - if (cb == nullptr || items == nullptr) return; - static_cast(cb)->addItems(*static_cast(items)); -} - -extern "C" VQT6_API void vqt6_qcombobox_insert_item(void* cb, int index, void* text) { - if (cb == nullptr || text == nullptr) return; - static_cast(cb)->insertItem(index, *static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qcombobox_remove_item(void* cb, int index) { - if (cb == nullptr) return; - static_cast(cb)->removeItem(index); -} - -extern "C" VQT6_API void vqt6_qcombobox_clear(void* cb) { - if (cb == nullptr) return; - static_cast(cb)->clear(); -} - -extern "C" VQT6_API int vqt6_qcombobox_count(void* cb) { - if (cb == nullptr) return 0; - return static_cast(cb)->count(); -} - -extern "C" VQT6_API int vqt6_qcombobox_current_index(void* cb) { - if (cb == nullptr) return -1; - return static_cast(cb)->currentIndex(); -} - -extern "C" VQT6_API void vqt6_qcombobox_set_current_index(void* cb, int index) { - if (cb == nullptr) return; - static_cast(cb)->setCurrentIndex(index); -} - -extern "C" VQT6_API void* vqt6_qcombobox_current_text(void* cb) { - if (cb == nullptr) return nullptr; - return new QString(static_cast(cb)->currentText()); -} - -extern "C" VQT6_API void* vqt6_qcombobox_item_text(void* cb, int index) { - if (cb == nullptr) return nullptr; - return new QString(static_cast(cb)->itemText(index)); -} - -extern "C" VQT6_API void vqt6_qcombobox_set_editable(void* cb, int editable) { - if (cb == nullptr) return; - static_cast(cb)->setEditable(editable != 0); -} - -extern "C" VQT6_API int vqt6_qcombobox_is_editable(void* cb) { - if (cb == nullptr) return 0; - return static_cast(cb)->isEditable() ? 1 : 0; -} - -// ============================================================ -// QListWidget -// ============================================================ -extern "C" VQT6_API void* vqt6_qlistwidget_create(void) { - return new QListWidget(); -} - -extern "C" VQT6_API void* vqt6_qlistwidget_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QListWidget(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qlistwidget_add_item(void* lw, void* text) { - if (lw == nullptr || text == nullptr) return; - static_cast(lw)->addItem(*static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qlistwidget_add_items(void* lw, void* items) { - if (lw == nullptr || items == nullptr) return; - static_cast(lw)->addItems(*static_cast(items)); -} - -extern "C" VQT6_API void vqt6_qlistwidget_insert_item(void* lw, int row, void* text) { - if (lw == nullptr || text == nullptr) return; - static_cast(lw)->insertItem(row, *static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qlistwidget_remove_item_widget(void* lw, int row) { - if (lw == nullptr) return; - static_cast(lw)->takeItem(row); -} - -extern "C" VQT6_API void* vqt6_qlistwidget_take_item(void* lw, int row) { - if (lw == nullptr) return nullptr; - return static_cast(lw)->takeItem(row); -} - -extern "C" VQT6_API void vqt6_qlistwidget_clear(void* lw) { - if (lw == nullptr) return; - static_cast(lw)->clear(); -} - -extern "C" VQT6_API int vqt6_qlistwidget_count(void* lw) { - if (lw == nullptr) return 0; - return static_cast(lw)->count(); -} - -extern "C" VQT6_API int vqt6_qlistwidget_current_row(void* lw) { - if (lw == nullptr) return -1; - return static_cast(lw)->currentRow(); -} - -extern "C" VQT6_API void vqt6_qlistwidget_set_current_row(void* lw, int row) { - if (lw == nullptr) return; - static_cast(lw)->setCurrentRow(row); -} - -extern "C" VQT6_API void* vqt6_qlistwidget_current_item_text(void* lw) { - if (lw == nullptr) return nullptr; - QListWidgetItem* it = static_cast(lw)->currentItem(); - if (it == nullptr) return nullptr; - return new QString(it->text()); -} - -extern "C" VQT6_API void* vqt6_qlistwidget_item_text(void* lw, int row) { - if (lw == nullptr) return nullptr; - QListWidgetItem* it = static_cast(lw)->item(row); - if (it == nullptr) return nullptr; - return new QString(it->text()); -} - -extern "C" VQT6_API void vqt6_qlistwidget_set_item_text(void* lw, int row, void* text) { - if (lw == nullptr || text == nullptr) return; - QListWidgetItem* it = static_cast(lw)->item(row); - if (it != nullptr) it->setText(*static_cast(text)); -} - -// ============================================================ -// QProgressBar -// ============================================================ -extern "C" VQT6_API void* vqt6_qprogressbar_create(void) { - return new QProgressBar(); -} - -extern "C" VQT6_API void* vqt6_qprogressbar_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QProgressBar(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qprogressbar_set_value(void* pb, int value) { - if (pb == nullptr) return; - static_cast(pb)->setValue(value); -} - -extern "C" VQT6_API int vqt6_qprogressbar_value(void* pb) { - if (pb == nullptr) return 0; - return static_cast(pb)->value(); -} - -extern "C" VQT6_API void vqt6_qprogressbar_set_minimum(void* pb, int min) { - if (pb == nullptr) return; - static_cast(pb)->setMinimum(min); -} - -extern "C" VQT6_API void vqt6_qprogressbar_set_maximum(void* pb, int max) { - if (pb == nullptr) return; - static_cast(pb)->setMaximum(max); -} - -extern "C" VQT6_API void vqt6_qprogressbar_set_range(void* pb, int min, int max) { - if (pb == nullptr) return; - static_cast(pb)->setRange(min, max); -} - -extern "C" VQT6_API int vqt6_qprogressbar_minimum(void* pb) { - if (pb == nullptr) return 0; - return static_cast(pb)->minimum(); -} - -extern "C" VQT6_API int vqt6_qprogressbar_maximum(void* pb) { - if (pb == nullptr) return 0; - return static_cast(pb)->maximum(); -} - -extern "C" VQT6_API void vqt6_qprogressbar_set_text_visible(void* pb, int visible) { - if (pb == nullptr) return; - static_cast(pb)->setTextVisible(visible != 0); -} - -extern "C" VQT6_API void vqt6_qprogressbar_set_format(void* pb, void* format) { - if (pb == nullptr || format == nullptr) return; - static_cast(pb)->setFormat(*static_cast(format)); -} - -extern "C" VQT6_API void vqt6_qprogressbar_reset(void* pb) { - if (pb == nullptr) return; - static_cast(pb)->reset(); -} - -// ============================================================ -// QSlider -// ============================================================ -extern "C" VQT6_API void* vqt6_qslider_create(void) { - return new QSlider(); -} - -extern "C" VQT6_API void* vqt6_qslider_create_with_orientation(int orientation) { - return new QSlider(static_cast(orientation)); -} - -extern "C" VQT6_API void* vqt6_qslider_create_with_orientation_parent(int orientation, void* parent) { - if (parent == nullptr) return nullptr; - return new QSlider(static_cast(orientation), static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qslider_set_value(void* s, int value) { - if (s == nullptr) return; - static_cast(s)->setValue(value); -} - -extern "C" VQT6_API int vqt6_qslider_value(void* s) { - if (s == nullptr) return 0; - return static_cast(s)->value(); -} - -extern "C" VQT6_API void vqt6_qslider_set_minimum(void* s, int min) { - if (s == nullptr) return; - static_cast(s)->setMinimum(min); -} - -extern "C" VQT6_API void vqt6_qslider_set_maximum(void* s, int max) { - if (s == nullptr) return; - static_cast(s)->setMaximum(max); -} - -extern "C" VQT6_API void vqt6_qslider_set_range(void* s, int min, int max) { - if (s == nullptr) return; - static_cast(s)->setRange(min, max); -} - -extern "C" VQT6_API void vqt6_qslider_set_orientation(void* s, int orientation) { - if (s == nullptr) return; - static_cast(s)->setOrientation(static_cast(orientation)); -} - -extern "C" VQT6_API int vqt6_qslider_orientation(void* s) { - if (s == nullptr) return 0; - return static_cast(static_cast(s)->orientation()); -} - -extern "C" VQT6_API void vqt6_qslider_set_single_step(void* s, int step) { - if (s == nullptr) return; - static_cast(s)->setSingleStep(step); -} - -extern "C" VQT6_API void vqt6_qslider_set_page_step(void* s, int step) { - if (s == nullptr) return; - static_cast(s)->setPageStep(step); -} - -// ============================================================ -// QSpinBox -// ============================================================ -extern "C" VQT6_API void* vqt6_qspinbox_create(void) { - return new QSpinBox(); -} - -extern "C" VQT6_API void* vqt6_qspinbox_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QSpinBox(static_cast(parent)); -} - -extern "C" VQT6_API int vqt6_qspinbox_value(void* sb) { - if (sb == nullptr) return 0; - return static_cast(sb)->value(); -} - -extern "C" VQT6_API void vqt6_qspinbox_set_value(void* sb, int value) { - if (sb == nullptr) return; - static_cast(sb)->setValue(value); -} - -extern "C" VQT6_API void vqt6_qspinbox_set_minimum(void* sb, int min) { - if (sb == nullptr) return; - static_cast(sb)->setMinimum(min); -} - -extern "C" VQT6_API void vqt6_qspinbox_set_maximum(void* sb, int max) { - if (sb == nullptr) return; - static_cast(sb)->setMaximum(max); -} - -extern "C" VQT6_API void vqt6_qspinbox_set_range(void* sb, int min, int max) { - if (sb == nullptr) return; - static_cast(sb)->setRange(min, max); -} - -extern "C" VQT6_API int vqt6_qspinbox_minimum(void* sb) { - if (sb == nullptr) return 0; - return static_cast(sb)->minimum(); -} - -extern "C" VQT6_API int vqt6_qspinbox_maximum(void* sb) { - if (sb == nullptr) return 0; - return static_cast(sb)->maximum(); -} - -extern "C" VQT6_API void vqt6_qspinbox_set_single_step(void* sb, int step) { - if (sb == nullptr) return; - static_cast(sb)->setSingleStep(step); -} - -extern "C" VQT6_API void vqt6_qspinbox_set_prefix(void* sb, void* prefix) { - if (sb == nullptr || prefix == nullptr) return; - static_cast(sb)->setPrefix(*static_cast(prefix)); -} - -extern "C" VQT6_API void vqt6_qspinbox_set_suffix(void* sb, void* suffix) { - if (sb == nullptr || suffix == nullptr) return; - static_cast(sb)->setSuffix(*static_cast(suffix)); -} - -extern "C" VQT6_API void* vqt6_qspinbox_prefix(void* sb) { - if (sb == nullptr) return nullptr; - return new QString(static_cast(sb)->prefix()); -} - -extern "C" VQT6_API void* vqt6_qspinbox_suffix(void* sb) { - if (sb == nullptr) return nullptr; - return new QString(static_cast(sb)->suffix()); -} - -// ============================================================ -// Layouts -// ============================================================ -extern "C" VQT6_API void vqt6_qlayout_add_widget(void* layout, void* widget) { - if (layout == nullptr || widget == nullptr) return; - static_cast(layout)->addWidget(static_cast(widget)); -} - -extern "C" VQT6_API void vqt6_qlayout_remove_widget(void* layout, void* widget) { - if (layout == nullptr || widget == nullptr) return; - static_cast(layout)->removeWidget(static_cast(widget)); -} - -extern "C" VQT6_API int vqt6_qlayout_count(void* layout) { - if (layout == nullptr) return 0; - return static_cast(layout)->count(); -} - -extern "C" VQT6_API void* vqt6_qlayout_item_at(void* layout, int index) { - if (layout == nullptr) return nullptr; - QLayoutItem* item = static_cast(layout)->itemAt(index); - return item != nullptr ? item->widget() : nullptr; -} - -extern "C" VQT6_API void vqt6_qlayout_set_contents_margins(void* layout, int left, int top, int right, int bottom) { - if (layout == nullptr) return; - static_cast(layout)->setContentsMargins(left, top, right, bottom); -} - -extern "C" VQT6_API void vqt6_qlayout_set_spacing(void* layout, int spacing) { - if (layout == nullptr) return; - static_cast(layout)->setSpacing(spacing); -} - -extern "C" VQT6_API int vqt6_qlayout_spacing(void* layout) { - if (layout == nullptr) return 0; - return static_cast(layout)->spacing(); -} - -extern "C" VQT6_API void vqt6_qlayout_invalidate(void* layout) { - if (layout == nullptr) return; - static_cast(layout)->invalidate(); -} - -extern "C" VQT6_API void* vqt6_qhboxlayout_create(void) { - return new QHBoxLayout(); -} - -extern "C" VQT6_API void* vqt6_qhboxlayout_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QHBoxLayout(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qhboxlayout_add_layout(void* layout, void* child) { - if (layout == nullptr || child == nullptr) return; - static_cast(layout)->addLayout(static_cast(child)); -} - -extern "C" VQT6_API void vqt6_qhboxlayout_add_stretch(void* layout, int stretch) { - if (layout == nullptr) return; - static_cast(layout)->addStretch(stretch); -} - -extern "C" VQT6_API void vqt6_qhboxlayout_add_spacing(void* layout, int size) { - if (layout == nullptr) return; - static_cast(layout)->addSpacing(size); -} - -extern "C" VQT6_API void* vqt6_qvboxlayout_create(void) { - return new QVBoxLayout(); -} - -extern "C" VQT6_API void* vqt6_qvboxlayout_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QVBoxLayout(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qvboxlayout_add_layout(void* layout, void* child) { - if (layout == nullptr || child == nullptr) return; - static_cast(layout)->addLayout(static_cast(child)); -} - -extern "C" VQT6_API void vqt6_qvboxlayout_add_stretch(void* layout, int stretch) { - if (layout == nullptr) return; - static_cast(layout)->addStretch(stretch); -} - -extern "C" VQT6_API void vqt6_qvboxlayout_add_spacing(void* layout, int size) { - if (layout == nullptr) return; - static_cast(layout)->addSpacing(size); -} - -extern "C" VQT6_API void* vqt6_qgridlayout_create(void) { - return new QGridLayout(); -} - -extern "C" VQT6_API void* vqt6_qgridlayout_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QGridLayout(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qgridlayout_add_widget(void* gl, void* w, int row, int col) { - if (gl == nullptr || w == nullptr) return; - static_cast(gl)->addWidget(static_cast(w), row, col); -} - -extern "C" VQT6_API void vqt6_qgridlayout_add_widget_with_span(void* gl, void* w, int row, int col, int row_span, int col_span) { - if (gl == nullptr || w == nullptr) return; - static_cast(gl)->addWidget(static_cast(w), row, col, row_span, col_span); -} - -extern "C" VQT6_API void* vqt6_qformlayout_create(void) { - return new QFormLayout(); -} - -extern "C" VQT6_API void* vqt6_qformlayout_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QFormLayout(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qformlayout_add_row(void* fl, void* label, void* field) { - if (fl == nullptr || label == nullptr || field == nullptr) return; - static_cast(fl)->addRow(*static_cast(label), static_cast(field)); -} - -extern "C" VQT6_API void vqt6_qformlayout_add_row_widget_pair(void* fl, void* label, void* field) { - if (fl == nullptr || label == nullptr || field == nullptr) return; - static_cast(fl)->addRow(static_cast(label), static_cast(field)); -} - -// ============================================================ -// QStackedWidget / QTabWidget -// ============================================================ -extern "C" VQT6_API void* vqt6_qstackedwidget_create(void) { - return new QStackedWidget(); -} - -extern "C" VQT6_API void* vqt6_qstackedwidget_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QStackedWidget(static_cast(parent)); -} - -extern "C" VQT6_API int vqt6_qstackedwidget_add_widget(void* sw, void* w) { - if (sw == nullptr || w == nullptr) return -1; - return static_cast(sw)->addWidget(static_cast(w)); -} - -extern "C" VQT6_API void vqt6_qstackedwidget_remove_widget(void* sw, void* w) { - if (sw == nullptr || w == nullptr) return; - static_cast(sw)->removeWidget(static_cast(w)); -} - -extern "C" VQT6_API int vqt6_qstackedwidget_count(void* sw) { - if (sw == nullptr) return 0; - return static_cast(sw)->count(); -} - -extern "C" VQT6_API int vqt6_qstackedwidget_current_index(void* sw) { - if (sw == nullptr) return -1; - return static_cast(sw)->currentIndex(); -} - -extern "C" VQT6_API void vqt6_qstackedwidget_set_current_index(void* sw, int index) { - if (sw == nullptr) return; - static_cast(sw)->setCurrentIndex(index); -} - -extern "C" VQT6_API void* vqt6_qstackedwidget_current_widget(void* sw) { - if (sw == nullptr) return nullptr; - return static_cast(sw)->currentWidget(); -} - -extern "C" VQT6_API void* vqt6_qstackedwidget_widget(void* sw, int index) { - if (sw == nullptr) return nullptr; - return static_cast(sw)->widget(index); -} - -extern "C" VQT6_API void* vqt6_qtabwidget_create(void) { - return new QTabWidget(); -} - -extern "C" VQT6_API void* vqt6_qtabwidget_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QTabWidget(static_cast(parent)); -} - -extern "C" VQT6_API int vqt6_qtabwidget_add_tab(void* tw, void* w, void* label) { - if (tw == nullptr || w == nullptr || label == nullptr) return -1; - return static_cast(tw)->addTab(static_cast(w), *static_cast(label)); -} - -extern "C" VQT6_API int vqt6_qtabwidget_insert_tab(void* tw, int index, void* w, void* label) { - if (tw == nullptr || w == nullptr || label == nullptr) return -1; - return static_cast(tw)->insertTab(index, static_cast(w), *static_cast(label)); -} - -extern "C" VQT6_API void vqt6_qtabwidget_remove_tab(void* tw, int index) { - if (tw == nullptr) return; - static_cast(tw)->removeTab(index); -} - -extern "C" VQT6_API int vqt6_qtabwidget_count(void* tw) { - if (tw == nullptr) return 0; - return static_cast(tw)->count(); -} - -extern "C" VQT6_API int vqt6_qtabwidget_current_index(void* tw) { - if (tw == nullptr) return -1; - return static_cast(tw)->currentIndex(); -} - -extern "C" VQT6_API void vqt6_qtabwidget_set_current_index(void* tw, int index) { - if (tw == nullptr) return; - static_cast(tw)->setCurrentIndex(index); -} - -extern "C" VQT6_API void* vqt6_qtabwidget_tab_text(void* tw, int index) { - if (tw == nullptr) return nullptr; - return new QString(static_cast(tw)->tabText(index)); -} - -extern "C" VQT6_API void vqt6_qtabwidget_set_tab_text(void* tw, int index, void* text) { - if (tw == nullptr || text == nullptr) return; - static_cast(tw)->setTabText(index, *static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qtabwidget_set_tabs_closable(void* tw, int closable) { - if (tw == nullptr) return; - static_cast(tw)->setTabsClosable(closable != 0); -} - -extern "C" VQT6_API int vqt6_qtabwidget_tabs_closable(void* tw) { - if (tw == nullptr) return 0; - return static_cast(tw)->tabsClosable() ? 1 : 0; -} - -// ============================================================ -// QMenuBar / QMenu / QAction -// ============================================================ -extern "C" VQT6_API void* vqt6_qmenubar_create(void) { - return new QMenuBar(); -} - -extern "C" VQT6_API void* vqt6_qmenubar_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QMenuBar(static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qmenubar_add_menu(void* mb, void* title) { - if (mb == nullptr || title == nullptr) return nullptr; - return static_cast(mb)->addMenu(*static_cast(title)); -} - -extern "C" VQT6_API void vqt6_qmenubar_add_menu_with_menu(void* mb, void* menu) { - if (mb == nullptr || menu == nullptr) return; - static_cast(mb)->addMenu(static_cast(menu)); -} - -extern "C" VQT6_API void vqt6_qmenubar_add_action(void* mb, void* action) { - if (mb == nullptr || action == nullptr) return; - static_cast(mb)->addAction(static_cast(action)); -} - -extern "C" VQT6_API void vqt6_qmenubar_clear(void* mb) { - if (mb == nullptr) return; - static_cast(mb)->clear(); -} - -extern "C" VQT6_API void* vqt6_qmenu_create(void) { - return new QMenu(); -} - -extern "C" VQT6_API void* vqt6_qmenu_create_with_title(void* title) { - if (title == nullptr) return nullptr; - return new QMenu(*static_cast(title)); -} - -extern "C" VQT6_API void* vqt6_qmenu_create_with_title_parent(void* title, void* parent) { - if (title == nullptr || parent == nullptr) return nullptr; - return new QMenu(*static_cast(title), static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qmenu_add_menu(void* menu, void* title) { - if (menu == nullptr || title == nullptr) return nullptr; - return static_cast(menu)->addMenu(*static_cast(title)); -} - -extern "C" VQT6_API void vqt6_qmenu_add_action(void* menu, void* action) { - if (menu == nullptr || action == nullptr) return; - static_cast(menu)->addAction(static_cast(action)); -} - -extern "C" VQT6_API void vqt6_qmenu_add_separator(void* menu) { - if (menu == nullptr) return; - static_cast(menu)->addSeparator(); -} - -extern "C" VQT6_API void vqt6_qmenu_clear(void* menu) { - if (menu == nullptr) return; - static_cast(menu)->clear(); -} - -extern "C" VQT6_API void vqt6_qmenu_set_title(void* menu, void* title) { - if (menu == nullptr || title == nullptr) return; - static_cast(menu)->setTitle(*static_cast(title)); -} - -extern "C" VQT6_API void* vqt6_qmenu_title(void* menu) { - if (menu == nullptr) return nullptr; - return new QString(static_cast(menu)->title()); -} - -extern "C" VQT6_API void* vqt6_qmenu_add_action_with_text(void* menu, void* text) { - if (menu == nullptr || text == nullptr) return nullptr; - return static_cast(menu)->addAction(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qaction_create(void) { - return new QAction(); -} - -extern "C" VQT6_API void* vqt6_qaction_create_with_text(void* text) { - if (text == nullptr) return nullptr; - return new QAction(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qaction_create_with_text_parent(void* text, void* parent) { - if (text == nullptr || parent == nullptr) return nullptr; - return new QAction(*static_cast(text), static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qaction_set_text(void* action, void* text) { - if (action == nullptr || text == nullptr) return; - static_cast(action)->setText(*static_cast(text)); -} - -extern "C" VQT6_API void* vqt6_qaction_text(void* action) { - if (action == nullptr) return nullptr; - return new QString(static_cast(action)->text()); -} - -extern "C" VQT6_API void vqt6_qaction_set_icon(void* action, void* icon) { - if (action == nullptr || icon == nullptr) return; - static_cast(action)->setIcon(*static_cast(icon)); -} - -extern "C" VQT6_API void* vqt6_qaction_icon(void* action) { - if (action == nullptr) return nullptr; - return new QIcon(static_cast(action)->icon()); -} - -extern "C" VQT6_API void vqt6_qaction_set_shortcut(void* action, void* key_sequence) { - if (action == nullptr || key_sequence == nullptr) return; - static_cast(action)->setShortcut(QKeySequence(*static_cast(key_sequence))); -} - -extern "C" VQT6_API void* vqt6_qaction_shortcut(void* action) { - if (action == nullptr) return nullptr; - return new QString(static_cast(action)->shortcut().toString()); -} - -extern "C" VQT6_API void vqt6_qaction_set_checkable(void* action, int checkable) { - if (action == nullptr) return; - static_cast(action)->setCheckable(checkable != 0); -} - -extern "C" VQT6_API int vqt6_qaction_is_checkable(void* action) { - if (action == nullptr) return 0; - return static_cast(action)->isCheckable() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qaction_set_checked(void* action, int checked) { - if (action == nullptr) return; - static_cast(action)->setChecked(checked != 0); -} - -extern "C" VQT6_API int vqt6_qaction_is_checked(void* action) { - if (action == nullptr) return 0; - return static_cast(action)->isChecked() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qaction_set_enabled(void* action, int enabled) { - if (action == nullptr) return; - static_cast(action)->setEnabled(enabled != 0); -} - -extern "C" VQT6_API int vqt6_qaction_is_enabled(void* action) { - if (action == nullptr) return 0; - return static_cast(action)->isEnabled() ? 1 : 0; -} - -extern "C" VQT6_API void vqt6_qaction_trigger(void* action) { - if (action == nullptr) return; - static_cast(action)->trigger(); -} - -// ============================================================ -// QStatusBar / QToolBar -// ============================================================ -extern "C" VQT6_API void* vqt6_qstatusbar_create(void) { - return new QStatusBar(); -} - -extern "C" VQT6_API void* vqt6_qstatusbar_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QStatusBar(static_cast(parent)); -} - -extern "C" VQT6_API void vqt6_qstatusbar_show_message(void* sb, void* message, int timeout_ms) { - if (sb == nullptr || message == nullptr) return; - static_cast(sb)->showMessage(*static_cast(message), timeout_ms); -} - -extern "C" VQT6_API void vqt6_qstatusbar_clear_message(void* sb) { - if (sb == nullptr) return; - static_cast(sb)->clearMessage(); -} - -extern "C" VQT6_API void* vqt6_qstatusbar_current_message(void* sb) { - if (sb == nullptr) return nullptr; - return new QString(static_cast(sb)->currentMessage()); -} - -extern "C" VQT6_API void vqt6_qstatusbar_add_widget(void* sb, void* w, int stretch) { - if (sb == nullptr || w == nullptr) return; - static_cast(sb)->addWidget(static_cast(w), stretch); -} - -extern "C" VQT6_API void vqt6_qstatusbar_add_permanent_widget(void* sb, void* w, int stretch) { - if (sb == nullptr || w == nullptr) return; - static_cast(sb)->addPermanentWidget(static_cast(w), stretch); -} - -extern "C" VQT6_API void* vqt6_qtoolbar_create(void) { - return new QToolBar(); -} - -extern "C" VQT6_API void* vqt6_qtoolbar_create_with_parent(void* parent) { - if (parent == nullptr) return nullptr; - return new QToolBar(static_cast(parent)); -} - -extern "C" VQT6_API void* vqt6_qtoolbar_add_widget(void* tb, void* w) { - if (tb == nullptr || w == nullptr) return nullptr; - return static_cast(tb)->addWidget(static_cast(w)); -} - -extern "C" VQT6_API void vqt6_qtoolbar_add_action(void* tb, void* action) { - if (tb == nullptr || action == nullptr) return; - static_cast(tb)->addAction(static_cast(action)); -} - -extern "C" VQT6_API void vqt6_qtoolbar_add_separator(void* tb) { - if (tb == nullptr) return; - static_cast(tb)->addSeparator(); -} - -extern "C" VQT6_API void vqt6_qtoolbar_set_icon_size(void* tb, int w, int h) { - if (tb == nullptr) return; - static_cast(tb)->setIconSize(QSize(w, h)); -} - -extern "C" VQT6_API void vqt6_qtoolbar_set_orientation(void* tb, int orientation) { - if (tb == nullptr) return; - static_cast(tb)->setOrientation(static_cast(orientation)); -} - -extern "C" VQT6_API int vqt6_qtoolbar_orientation(void* tb) { - if (tb == nullptr) return 0; - return static_cast(static_cast(tb)->orientation()); -} - -// ============================================================ -// QMessageBox -// ============================================================ -extern "C" VQT6_API int vqt6_qmessagebox_information(void* parent, void* title, void* text, int buttons) { - if (title == nullptr || text == nullptr) return 0; - QMessageBox mb(static_cast(0x0400), *static_cast(title), *static_cast(text), - static_cast(buttons), static_cast(parent)); - return mb.exec(); -} - -extern "C" VQT6_API int vqt6_qmessagebox_warning(void* parent, void* title, void* text, int buttons) { - if (title == nullptr || text == nullptr) return 0; - QMessageBox mb(static_cast(0x0200), *static_cast(title), *static_cast(text), - static_cast(buttons), static_cast(parent)); - return mb.exec(); -} - -extern "C" VQT6_API int vqt6_qmessagebox_critical(void* parent, void* title, void* text, int buttons) { - if (title == nullptr || text == nullptr) return 0; - QMessageBox mb(static_cast(0x0100), *static_cast(title), *static_cast(text), - static_cast(buttons), static_cast(parent)); - return mb.exec(); -} - -extern "C" VQT6_API int vqt6_qmessagebox_question(void* parent, void* title, void* text, int buttons) { - if (title == nullptr || text == nullptr) return 0; - QMessageBox mb(static_cast(0x0200), *static_cast(title), *static_cast(text), - static_cast(buttons), static_cast(parent)); - return mb.exec(); -} - -extern "C" VQT6_API void vqt6_qmessagebox_about(void* parent, void* title, void* text) { - if (title == nullptr || text == nullptr) return; - QMessageBox::about(static_cast(parent), *static_cast(title), *static_cast(text)); -} - -extern "C" VQT6_API void vqt6_qmessagebox_about_qt(void* parent) { - QMessageBox::aboutQt(static_cast(parent)); -} - -// ============================================================ -// QFileDialog -// ============================================================ -extern "C" VQT6_API void* vqt6_qfiledialog_get_open_file_name(void* parent, void* caption, void* dir, void* filter) { - QString* result = new QString(QFileDialog::getOpenFileName( - static_cast(parent), - caption != nullptr ? *static_cast(caption) : QString(), - dir != nullptr ? *static_cast(dir) : QString(), - filter != nullptr ? *static_cast(filter) : QString() - )); - return result; -} - -extern "C" VQT6_API void* vqt6_qfiledialog_get_save_file_name(void* parent, void* caption, void* dir, void* filter) { - QString* result = new QString(QFileDialog::getSaveFileName( - static_cast(parent), - caption != nullptr ? *static_cast(caption) : QString(), - dir != nullptr ? *static_cast(dir) : QString(), - filter != nullptr ? *static_cast(filter) : QString() - )); - return result; -} - -extern "C" VQT6_API void* vqt6_qfiledialog_get_existing_directory(void* parent, void* caption, void* dir) { - QString* result = new QString(QFileDialog::getExistingDirectory( - static_cast(parent), - caption != nullptr ? *static_cast(caption) : QString(), - dir != nullptr ? *static_cast(dir) : QString() - )); - return result; -} - -extern "C" VQT6_API void* vqt6_qfiledialog_get_open_file_names(void* parent, void* caption, void* dir, void* filter) { - return new QStringList(QFileDialog::getOpenFileNames( - static_cast(parent), - caption != nullptr ? *static_cast(caption) : QString(), - dir != nullptr ? *static_cast(dir) : QString(), - filter != nullptr ? *static_cast(filter) : QString() - )); -} diff --git a/vqt6 copy/_bridge_widgets.h b/vqt6 copy/_bridge_widgets.h deleted file mode 100644 index 0197377..0000000 --- a/vqt6 copy/_bridge_widgets.h +++ /dev/null @@ -1,432 +0,0 @@ -// ============================================================ -// vqt6/_bridge_widgets.h — QtWidgets C 桥接函数声明 -// ============================================================ - -#ifndef VQT6_BRIDGE_WIDGETS_H -#define VQT6_BRIDGE_WIDGETS_H - -#include "_bridge.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// ============================================================ -// QApplication -// ============================================================ -VQT6_API void* vqt6_qapplication_create(int argc, char** argv); -VQT6_API void* vqt6_qapplication_instance(void); -VQT6_API int vqt6_qapplication_exec(void* app); -VQT6_API void vqt6_qapplication_quit(void* app); -VQT6_API void vqt6_qapplication_exit(void* app, int exit_code); -VQT6_API void vqt6_qapplication_process_events(void* app); -VQT6_API int vqt6_qapplication_desktop_width(void* app); -VQT6_API int vqt6_qapplication_desktop_height(void* app); -VQT6_API void vqt6_qapplication_set_quit_on_last_window_closed(void* app, int quit); -VQT6_API int vqt6_qapplication_quit_on_last_window_closed(void* app); - -// ============================================================ -// QWidget -// ============================================================ -VQT6_API void* vqt6_qwidget_create(void); -VQT6_API void* vqt6_qwidget_create_with_parent(void* parent); -VQT6_API void vqt6_qwidget_show(void* widget); -VQT6_API void vqt6_qwidget_hide(void* widget); -VQT6_API int vqt6_qwidget_close(void* widget); -VQT6_API int vqt6_qwidget_is_visible(void* widget); -VQT6_API void vqt6_qwidget_set_visible(void* widget, int visible); -VQT6_API void vqt6_qwidget_set_geometry(void* widget, int x, int y, int w, int h); -VQT6_API void vqt6_qwidget_geometry(void* widget, int* x, int* y, int* w, int* h); -VQT6_API void vqt6_qwidget_resize(void* widget, int w, int h); -VQT6_API void vqt6_qwidget_size(void* widget, int* w, int* h); -VQT6_API void vqt6_qwidget_move(void* widget, int x, int y); -VQT6_API void vqt6_qwidget_pos(void* widget, int* x, int* y); -VQT6_API int vqt6_qwidget_width(void* widget); -VQT6_API int vqt6_qwidget_height(void* widget); -VQT6_API int vqt6_qwidget_x(void* widget); -VQT6_API int vqt6_qwidget_y(void* widget); -VQT6_API void vqt6_qwidget_set_window_title(void* widget, void* title); -VQT6_API void* vqt6_qwidget_window_title(void* widget); -VQT6_API void vqt6_qwidget_set_text(void* widget, void* text); -VQT6_API void* vqt6_qwidget_text(void* widget); -VQT6_API void vqt6_qwidget_set_enabled(void* widget, int enabled); -VQT6_API int vqt6_qwidget_is_enabled(void* widget); -VQT6_API void vqt6_qwidget_set_parent(void* widget, void* parent); -VQT6_API void* vqt6_qwidget_parent_widget(void* widget); -VQT6_API void vqt6_qwidget_set_focus(void* widget); -VQT6_API void vqt6_qwidget_clear_focus(void* widget); -VQT6_API int vqt6_qwidget_has_focus(void* widget); -VQT6_API void vqt6_qwidget_set_focus_policy(void* widget, int policy); -VQT6_API void vqt6_qwidget_update(void* widget); -VQT6_API void vqt6_qwidget_repaint(void* widget); -VQT6_API void vqt6_qwidget_set_update_enabled(void* widget, int enabled); -VQT6_API void vqt6_qwidget_set_window_flags(void* widget, int flags); -VQT6_API int vqt6_qwidget_window_flags(void* widget); -VQT6_API void vqt6_qwidget_set_cursor(void* widget, void* cursor); -VQT6_API void* vqt6_qwidget_cursor(void* widget); -VQT6_API void vqt6_qwidget_unset_cursor(void* widget); -VQT6_API void vqt6_qwidget_set_tool_tip(void* widget, void* tip); -VQT6_API void* vqt6_qwidget_tool_tip(void* widget); -VQT6_API void vqt6_qwidget_set_status_tip(void* widget, void* tip); -VQT6_API void* vqt6_qwidget_status_tip(void* widget); -VQT6_API void vqt6_qwidget_set_minimum_size(void* widget, int w, int h); -VQT6_API void vqt6_qwidget_set_maximum_size(void* widget, int w, int h); -VQT6_API void vqt6_qwidget_set_fixed_size(void* widget, int w, int h); -VQT6_API void vqt6_qwidget_minimum_size(void* widget, int* w, int* h); -VQT6_API void vqt6_qwidget_maximum_size(void* widget, int* w, int* h); - -// ============================================================ -// QDialog -// ============================================================ -VQT6_API void* vqt6_qdialog_create(void); -VQT6_API void* vqt6_qdialog_create_with_parent(void* parent); -VQT6_API int vqt6_qdialog_exec(void* dialog); -VQT6_API void vqt6_qdialog_done(void* dialog, int result); -VQT6_API void vqt6_qdialog_accept(void* dialog); -VQT6_API void vqt6_qdialog_reject(void* dialog); -VQT6_API void vqt6_qdialog_set_result(void* dialog, int result); -VQT6_API int vqt6_qdialog_result(void* dialog); -VQT6_API void vqt6_qdialog_set_modal(void* dialog, int modal); -VQT6_API int vqt6_qdialog_is_modal(void* dialog); - -// ============================================================ -// QMainWindow -// ============================================================ -VQT6_API void* vqt6_qmainwindow_create(void); -VQT6_API void* vqt6_qmainwindow_create_with_parent(void* parent); -VQT6_API void vqt6_qmainwindow_set_central_widget(void* mw, void* widget); -VQT6_API void* vqt6_qmainwindow_central_widget(void* mw); -VQT6_API void* vqt6_qmainwindow_menu_bar(void* mw); -VQT6_API void vqt6_qmainwindow_set_menu_bar(void* mw, void* menubar); -VQT6_API void* vqt6_qmainwindow_status_bar(void* mw); -VQT6_API void vqt6_qmainwindow_set_status_bar(void* mw, void* statusbar); -VQT6_API void vqt6_qmainwindow_add_tool_bar(void* mw, void* toolbar); -VQT6_API void vqt6_qmainwindow_add_tool_bar_break(void* mw); - -// ============================================================ -// QLabel -// ============================================================ -VQT6_API void* vqt6_qlabel_create(void); -VQT6_API void* vqt6_qlabel_create_with_text(void* text); -VQT6_API void* vqt6_qlabel_create_with_text_parent(void* text, void* parent); -VQT6_API void vqt6_qlabel_set_text(void* label, void* text); -VQT6_API void* vqt6_qlabel_text(void* label); -VQT6_API void vqt6_qlabel_set_alignment(void* label, int alignment); -VQT6_API int vqt6_qlabel_alignment(void* label); -VQT6_API void vqt6_qlabel_set_pixmap(void* label, void* pixmap); -VQT6_API void* vqt6_qlabel_pixmap(void* label); -VQT6_API void vqt6_qlabel_set_indent(void* label, int indent); -VQT6_API void vqt6_qlabel_set_margin(void* label, int margin); -VQT6_API void vqt6_qlabel_set_word_wrap(void* label, int wrap); -VQT6_API int vqt6_qlabel_word_wrap(void* label); - -// ============================================================ -// QPushButton -// ============================================================ -VQT6_API void* vqt6_qpushbutton_create(void); -VQT6_API void* vqt6_qpushbutton_create_with_text(void* text); -VQT6_API void* vqt6_qpushbutton_create_with_text_parent(void* text, void* parent); -VQT6_API void vqt6_qpushbutton_set_text(void* btn, void* text); -VQT6_API void* vqt6_qpushbutton_text(void* btn); -VQT6_API void vqt6_qpushbutton_set_icon(void* btn, void* icon); -VQT6_API void* vqt6_qpushbutton_icon(void* btn); -VQT6_API void vqt6_qpushbutton_set_default(void* btn, int is_default); -VQT6_API int vqt6_qpushbutton_is_default(void* btn); -VQT6_API void vqt6_qpushbutton_set_flat(void* btn, int flat); -VQT6_API int vqt6_qpushbutton_is_flat(void* btn); -VQT6_API void vqt6_qpushbutton_set_checkable(void* btn, int checkable); -VQT6_API int vqt6_qpushbutton_is_checkable(void* btn); -VQT6_API void vqt6_qpushbutton_set_checked(void* btn, int checked); -VQT6_API int vqt6_qpushbutton_is_checked(void* btn); -VQT6_API void vqt6_qpushbutton_click(void* btn); - -// ============================================================ -// QLineEdit -// ============================================================ -VQT6_API void* vqt6_qlineedit_create(void); -VQT6_API void* vqt6_qlineedit_create_with_text(void* text); -VQT6_API void* vqt6_qlineedit_create_with_text_parent(void* text, void* parent); -VQT6_API void* vqt6_qlineedit_text(void* le); -VQT6_API void vqt6_qlineedit_set_text(void* le, void* text); -VQT6_API void* vqt6_qlineedit_placeholder_text(void* le); -VQT6_API void vqt6_qlineedit_set_placeholder_text(void* le, void* text); -VQT6_API void vqt6_qlineedit_set_max_length(void* le, int max); -VQT6_API int vqt6_qlineedit_max_length(void* le); -VQT6_API void vqt6_qlineedit_set_read_only(void* le, int ro); -VQT6_API int vqt6_qlineedit_is_read_only(void* le); -VQT6_API void vqt6_qlineedit_set_echo_mode(void* le, int mode); -VQT6_API int vqt6_qlineedit_echo_mode(void* le); -VQT6_API void vqt6_qlineedit_select_all(void* le); -VQT6_API void vqt6_qlineedit_clear(void* le); - -// ============================================================ -// QTextEdit / QPlainTextEdit -// ============================================================ -VQT6_API void* vqt6_qtextedit_create(void); -VQT6_API void* vqt6_qtextedit_create_with_parent(void* parent); -VQT6_API void* vqt6_qtextedit_to_plain_text(void* te); -VQT6_API void vqt6_qtextedit_set_plain_text(void* te, void* text); -VQT6_API void vqt6_qtextedit_set_html(void* te, void* html); -VQT6_API void* vqt6_qtextedit_to_html(void* te); -VQT6_API void vqt6_qtextedit_append(void* te, void* text); -VQT6_API void vqt6_qtextedit_clear(void* te); -VQT6_API void vqt6_qtextedit_set_read_only(void* te, int ro); -VQT6_API int vqt6_qtextedit_is_read_only(void* te); - -VQT6_API void* vqt6_qplaintextedit_create(void); -VQT6_API void* vqt6_qplaintextedit_create_with_parent(void* parent); -VQT6_API void* vqt6_qplaintextedit_to_plain_text(void* pte); -VQT6_API void vqt6_qplaintextedit_set_plain_text(void* pte, void* text); -VQT6_API void vqt6_qplaintextedit_append(void* pte, void* text); -VQT6_API void vqt6_qplaintextedit_clear(void* pte); -VQT6_API void vqt6_qplaintextedit_set_read_only(void* pte, int ro); -VQT6_API int vqt6_qplaintextedit_line_count(void* pte); - -// ============================================================ -// QCheckBox / QRadioButton -// ============================================================ -VQT6_API void* vqt6_qcheckbox_create(void); -VQT6_API void* vqt6_qcheckbox_create_with_text(void* text); -VQT6_API void* vqt6_qcheckbox_create_with_text_parent(void* text, void* parent); -VQT6_API void vqt6_qcheckbox_set_checked(void* cb, int checked); -VQT6_API int vqt6_qcheckbox_is_checked(void* cb); -VQT6_API void vqt6_qcheckbox_set_text(void* cb, void* text); -VQT6_API void* vqt6_qcheckbox_text(void* cb); -VQT6_API void vqt6_qcheckbox_set_tristate(void* cb, int tristate); -VQT6_API int vqt6_qcheckbox_is_tristate(void* cb); - -VQT6_API void* vqt6_qradiobutton_create(void); -VQT6_API void* vqt6_qradiobutton_create_with_text(void* text); -VQT6_API void* vqt6_qradiobutton_create_with_text_parent(void* text, void* parent); -VQT6_API void vqt6_qradiobutton_set_checked(void* rb, int checked); -VQT6_API int vqt6_qradiobutton_is_checked(void* rb); -VQT6_API void vqt6_qradiobutton_set_text(void* rb, void* text); -VQT6_API void* vqt6_qradiobutton_text(void* rb); - -// ============================================================ -// QComboBox -// ============================================================ -VQT6_API void* vqt6_qcombobox_create(void); -VQT6_API void* vqt6_qcombobox_create_with_parent(void* parent); -VQT6_API void vqt6_qcombobox_add_item(void* cb, void* text); -VQT6_API void vqt6_qcombobox_add_items(void* cb, void* items); -VQT6_API void vqt6_qcombobox_insert_item(void* cb, int index, void* text); -VQT6_API void vqt6_qcombobox_remove_item(void* cb, int index); -VQT6_API void vqt6_qcombobox_clear(void* cb); -VQT6_API int vqt6_qcombobox_count(void* cb); -VQT6_API int vqt6_qcombobox_current_index(void* cb); -VQT6_API void vqt6_qcombobox_set_current_index(void* cb, int index); -VQT6_API void* vqt6_qcombobox_current_text(void* cb); -VQT6_API void* vqt6_qcombobox_item_text(void* cb, int index); -VQT6_API void vqt6_qcombobox_set_editable(void* cb, int editable); -VQT6_API int vqt6_qcombobox_is_editable(void* cb); - -// ============================================================ -// QListWidget -// ============================================================ -VQT6_API void* vqt6_qlistwidget_create(void); -VQT6_API void* vqt6_qlistwidget_create_with_parent(void* parent); -VQT6_API void vqt6_qlistwidget_add_item(void* lw, void* text); -VQT6_API void vqt6_qlistwidget_add_items(void* lw, void* items); -VQT6_API void vqt6_qlistwidget_insert_item(void* lw, int row, void* text); -VQT6_API void vqt6_qlistwidget_remove_item_widget(void* lw, int row); -VQT6_API void* vqt6_qlistwidget_take_item(void* lw, int row); -VQT6_API void vqt6_qlistwidget_clear(void* lw); -VQT6_API int vqt6_qlistwidget_count(void* lw); -VQT6_API int vqt6_qlistwidget_current_row(void* lw); -VQT6_API void vqt6_qlistwidget_set_current_row(void* lw, int row); -VQT6_API void* vqt6_qlistwidget_current_item_text(void* lw); -VQT6_API void* vqt6_qlistwidget_item_text(void* lw, int row); -VQT6_API void vqt6_qlistwidget_set_item_text(void* lw, int row, void* text); - -// ============================================================ -// QProgressBar -// ============================================================ -VQT6_API void* vqt6_qprogressbar_create(void); -VQT6_API void* vqt6_qprogressbar_create_with_parent(void* parent); -VQT6_API void vqt6_qprogressbar_set_value(void* pb, int value); -VQT6_API int vqt6_qprogressbar_value(void* pb); -VQT6_API void vqt6_qprogressbar_set_minimum(void* pb, int min); -VQT6_API void vqt6_qprogressbar_set_maximum(void* pb, int max); -VQT6_API void vqt6_qprogressbar_set_range(void* pb, int min, int max); -VQT6_API int vqt6_qprogressbar_minimum(void* pb); -VQT6_API int vqt6_qprogressbar_maximum(void* pb); -VQT6_API void vqt6_qprogressbar_set_text_visible(void* pb, int visible); -VQT6_API void vqt6_qprogressbar_set_format(void* pb, void* format); -VQT6_API void vqt6_qprogressbar_reset(void* pb); - -// ============================================================ -// QSlider -// ============================================================ -VQT6_API void* vqt6_qslider_create(void); -VQT6_API void* vqt6_qslider_create_with_orientation(int orientation); -VQT6_API void* vqt6_qslider_create_with_orientation_parent(int orientation, void* parent); -VQT6_API void vqt6_qslider_set_value(void* s, int value); -VQT6_API int vqt6_qslider_value(void* s); -VQT6_API void vqt6_qslider_set_minimum(void* s, int min); -VQT6_API void vqt6_qslider_set_maximum(void* s, int max); -VQT6_API void vqt6_qslider_set_range(void* s, int min, int max); -VQT6_API void vqt6_qslider_set_orientation(void* s, int orientation); -VQT6_API int vqt6_qslider_orientation(void* s); -VQT6_API void vqt6_qslider_set_single_step(void* s, int step); -VQT6_API void vqt6_qslider_set_page_step(void* s, int step); - -// ============================================================ -// QSpinBox -// ============================================================ -VQT6_API void* vqt6_qspinbox_create(void); -VQT6_API void* vqt6_qspinbox_create_with_parent(void* parent); -VQT6_API int vqt6_qspinbox_value(void* sb); -VQT6_API void vqt6_qspinbox_set_value(void* sb, int value); -VQT6_API void vqt6_qspinbox_set_minimum(void* sb, int min); -VQT6_API void vqt6_qspinbox_set_maximum(void* sb, int max); -VQT6_API void vqt6_qspinbox_set_range(void* sb, int min, int max); -VQT6_API int vqt6_qspinbox_minimum(void* sb); -VQT6_API int vqt6_qspinbox_maximum(void* sb); -VQT6_API void vqt6_qspinbox_set_single_step(void* sb, int step); -VQT6_API void vqt6_qspinbox_set_prefix(void* sb, void* prefix); -VQT6_API void vqt6_qspinbox_set_suffix(void* sb, void* suffix); -VQT6_API void* vqt6_qspinbox_prefix(void* sb); -VQT6_API void* vqt6_qspinbox_suffix(void* sb); - -// ============================================================ -// Layouts -// ============================================================ -VQT6_API void vqt6_qlayout_add_widget(void* layout, void* widget); -VQT6_API void vqt6_qlayout_remove_widget(void* layout, void* widget); -VQT6_API int vqt6_qlayout_count(void* layout); -VQT6_API void* vqt6_qlayout_item_at(void* layout, int index); -VQT6_API void vqt6_qlayout_set_contents_margins(void* layout, int left, int top, int right, int bottom); -VQT6_API void vqt6_qlayout_set_spacing(void* layout, int spacing); -VQT6_API int vqt6_qlayout_spacing(void* layout); -VQT6_API void vqt6_qlayout_invalidate(void* layout); - -VQT6_API void* vqt6_qhboxlayout_create(void); -VQT6_API void* vqt6_qhboxlayout_create_with_parent(void* parent); -VQT6_API void vqt6_qhboxlayout_add_layout(void* layout, void* child); -VQT6_API void vqt6_qhboxlayout_add_stretch(void* layout, int stretch); -VQT6_API void vqt6_qhboxlayout_add_spacing(void* layout, int size); - -VQT6_API void* vqt6_qvboxlayout_create(void); -VQT6_API void* vqt6_qvboxlayout_create_with_parent(void* parent); -VQT6_API void vqt6_qvboxlayout_add_layout(void* layout, void* child); -VQT6_API void vqt6_qvboxlayout_add_stretch(void* layout, int stretch); -VQT6_API void vqt6_qvboxlayout_add_spacing(void* layout, int size); - -VQT6_API void* vqt6_qgridlayout_create(void); -VQT6_API void* vqt6_qgridlayout_create_with_parent(void* parent); -VQT6_API void vqt6_qgridlayout_add_widget(void* gl, void* w, int row, int col); -VQT6_API void vqt6_qgridlayout_add_widget_with_span(void* gl, void* w, int row, int col, int row_span, int col_span); - -VQT6_API void* vqt6_qformlayout_create(void); -VQT6_API void* vqt6_qformlayout_create_with_parent(void* parent); -VQT6_API void vqt6_qformlayout_add_row(void* fl, void* label, void* field); -VQT6_API void vqt6_qformlayout_add_row_widget_pair(void* fl, void* label, void* field); - -// ============================================================ -// QStackedWidget / QTabWidget -// ============================================================ -VQT6_API void* vqt6_qstackedwidget_create(void); -VQT6_API void* vqt6_qstackedwidget_create_with_parent(void* parent); -VQT6_API int vqt6_qstackedwidget_add_widget(void* sw, void* w); -VQT6_API void vqt6_qstackedwidget_remove_widget(void* sw, void* w); -VQT6_API int vqt6_qstackedwidget_count(void* sw); -VQT6_API int vqt6_qstackedwidget_current_index(void* sw); -VQT6_API void vqt6_qstackedwidget_set_current_index(void* sw, int index); -VQT6_API void* vqt6_qstackedwidget_current_widget(void* sw); -VQT6_API void* vqt6_qstackedwidget_widget(void* sw, int index); - -VQT6_API void* vqt6_qtabwidget_create(void); -VQT6_API void* vqt6_qtabwidget_create_with_parent(void* parent); -VQT6_API int vqt6_qtabwidget_add_tab(void* tw, void* w, void* label); -VQT6_API int vqt6_qtabwidget_insert_tab(void* tw, int index, void* w, void* label); -VQT6_API void vqt6_qtabwidget_remove_tab(void* tw, int index); -VQT6_API int vqt6_qtabwidget_count(void* tw); -VQT6_API int vqt6_qtabwidget_current_index(void* tw); -VQT6_API void vqt6_qtabwidget_set_current_index(void* tw, int index); -VQT6_API void* vqt6_qtabwidget_tab_text(void* tw, int index); -VQT6_API void vqt6_qtabwidget_set_tab_text(void* tw, int index, void* text); -VQT6_API void vqt6_qtabwidget_set_tabs_closable(void* tw, int closable); -VQT6_API int vqt6_qtabwidget_tabs_closable(void* tw); - -// ============================================================ -// QMenuBar / QMenu / QAction -// ============================================================ -VQT6_API void* vqt6_qmenubar_create(void); -VQT6_API void* vqt6_qmenubar_create_with_parent(void* parent); -VQT6_API void* vqt6_qmenubar_add_menu(void* mb, void* title); -VQT6_API void vqt6_qmenubar_add_menu_with_menu(void* mb, void* menu); -VQT6_API void vqt6_qmenubar_add_action(void* mb, void* action); -VQT6_API void vqt6_qmenubar_clear(void* mb); - -VQT6_API void* vqt6_qmenu_create(void); -VQT6_API void* vqt6_qmenu_create_with_title(void* title); -VQT6_API void* vqt6_qmenu_create_with_title_parent(void* title, void* parent); -VQT6_API void* vqt6_qmenu_add_menu(void* menu, void* title); -VQT6_API void vqt6_qmenu_add_action(void* menu, void* action); -VQT6_API void vqt6_qmenu_add_separator(void* menu); -VQT6_API void vqt6_qmenu_clear(void* menu); -VQT6_API void vqt6_qmenu_set_title(void* menu, void* title); -VQT6_API void* vqt6_qmenu_title(void* menu); -VQT6_API void* vqt6_qmenu_add_action_with_text(void* menu, void* text); - -VQT6_API void* vqt6_qaction_create(void); -VQT6_API void* vqt6_qaction_create_with_text(void* text); -VQT6_API void* vqt6_qaction_create_with_text_parent(void* text, void* parent); -VQT6_API void vqt6_qaction_set_text(void* action, void* text); -VQT6_API void* vqt6_qaction_text(void* action); -VQT6_API void vqt6_qaction_set_icon(void* action, void* icon); -VQT6_API void* vqt6_qaction_icon(void* action); -VQT6_API void vqt6_qaction_set_shortcut(void* action, void* key_sequence); -VQT6_API void* vqt6_qaction_shortcut(void* action); -VQT6_API void vqt6_qaction_set_checkable(void* action, int checkable); -VQT6_API int vqt6_qaction_is_checkable(void* action); -VQT6_API void vqt6_qaction_set_checked(void* action, int checked); -VQT6_API int vqt6_qaction_is_checked(void* action); -VQT6_API void vqt6_qaction_set_enabled(void* action, int enabled); -VQT6_API int vqt6_qaction_is_enabled(void* action); -VQT6_API void vqt6_qaction_trigger(void* action); - -// ============================================================ -// QStatusBar / QToolBar -// ============================================================ -VQT6_API void* vqt6_qstatusbar_create(void); -VQT6_API void* vqt6_qstatusbar_create_with_parent(void* parent); -VQT6_API void vqt6_qstatusbar_show_message(void* sb, void* message, int timeout_ms); -VQT6_API void vqt6_qstatusbar_clear_message(void* sb); -VQT6_API void* vqt6_qstatusbar_current_message(void* sb); -VQT6_API void vqt6_qstatusbar_add_widget(void* sb, void* w, int stretch); -VQT6_API void vqt6_qstatusbar_add_permanent_widget(void* sb, void* w, int stretch); - -VQT6_API void* vqt6_qtoolbar_create(void); -VQT6_API void* vqt6_qtoolbar_create_with_parent(void* parent); -VQT6_API void* vqt6_qtoolbar_add_widget(void* tb, void* w); -VQT6_API void vqt6_qtoolbar_add_action(void* tb, void* action); -VQT6_API void vqt6_qtoolbar_add_separator(void* tb); -VQT6_API void vqt6_qtoolbar_set_icon_size(void* tb, int w, int h); -VQT6_API void vqt6_qtoolbar_set_orientation(void* tb, int orientation); -VQT6_API int vqt6_qtoolbar_orientation(void* tb); - -// ============================================================ -// QMessageBox -// ============================================================ -VQT6_API int vqt6_qmessagebox_information(void* parent, void* title, void* text, int buttons); -VQT6_API int vqt6_qmessagebox_warning(void* parent, void* title, void* text, int buttons); -VQT6_API int vqt6_qmessagebox_critical(void* parent, void* title, void* text, int buttons); -VQT6_API int vqt6_qmessagebox_question(void* parent, void* title, void* text, int buttons); -VQT6_API void vqt6_qmessagebox_about(void* parent, void* title, void* text); -VQT6_API void vqt6_qmessagebox_about_qt(void* parent); - -// ============================================================ -// QFileDialog -// ============================================================ -VQT6_API void* vqt6_qfiledialog_get_open_file_name(void* parent, void* caption, void* dir, void* filter); -VQT6_API void* vqt6_qfiledialog_get_save_file_name(void* parent, void* caption, void* dir, void* filter); -VQT6_API void* vqt6_qfiledialog_get_existing_directory(void* parent, void* caption, void* dir); -VQT6_API void* vqt6_qfiledialog_get_open_file_names(void* parent, void* caption, void* dir, void* filter); - -#ifdef __cplusplus -} -#endif - -#endif // VQT6_BRIDGE_WIDGETS_H diff --git a/vqt6 copy/_qtcore.vp b/vqt6 copy/_qtcore.vp deleted file mode 100644 index ddb7035..0000000 --- a/vqt6 copy/_qtcore.vp +++ /dev/null @@ -1,157 +0,0 @@ -import t, c -from stdint import * -from vqt6._types import * - -# ============================================================ -# vqt6/_qtcore.py — QtCore 的 t.State FFI 声明 -# -# 所有函数都是 C 桥接层 (libvqt6_bridge.a) 的 extern "C" 函数 -# 命名规范: vqt6__ -# ============================================================ - -# ============================================================ -# QString — UTF-16 字符串 -# ============================================================ -# 创建 QString(从 UTF-8 C 字符串) -def vqt6_qstring_create(utf8: t.CChar | t.CPtr) -> QtStringPtr | t.State: pass - -# 获取 QString 的 UTF-8 表示(写入 buf,返回实际长度,不含 \0) -# buf 需足够大(建议 4 * qstring.length() + 1) -def vqt6_qstring_to_utf8(qstr: QtStringPtr, buf: t.CChar | t.CPtr, buf_size: t.CSizeT) -> t.CSizeT | t.State: pass - -# 释放 QString -def vqt6_qstring_free(qstr: QtStringPtr) -> t.State: pass - -# 获取 QString 字符数 -def vqt6_qstring_length(qstr: QtStringPtr) -> t.CInt | t.State: pass - -# QString 是否为空 -def vqt6_qstring_is_empty(qstr: QtStringPtr) -> t.CInt | t.State: pass - -# QString 比较 -def vqt6_qstring_equals(qstr: QtStringPtr, other: QtStringPtr) -> t.CInt | t.State: pass - -# QString 拼接(返回新 QString) -def vqt6_qstring_append(qstr: QtStringPtr, other: QtStringPtr) -> QtStringPtr | t.State: pass - - -# ============================================================ -# QByteArray — 字节数组 -# ============================================================ -def vqt6_qbytearray_create(data: t.CVoid | t.CPtr, size: t.CSizeT) -> QtByteArrayPtr | t.State: pass -def vqt6_qbytearray_data(qba: QtByteArrayPtr, out_size: t.CSizeT | t.CPtr) -> t.CVoid | t.CPtr | t.State: pass -def vqt6_qbytearray_size(qba: QtByteArrayPtr) -> t.CSizeT | t.State: pass -def vqt6_qbytearray_free(qba: QtByteArrayPtr) -> t.State: pass - - -# ============================================================ -# QObject — 所有 Qt 对象的基类 -# ============================================================ -# 注意: Qt 对象的内存由 C++ 管理,Viper 端不应直接 free -def vqt6_qobject_delete(obj: QtObjectPtr) -> t.State: pass -def vqt6_qobject_delete_later(obj: QtObjectPtr) -> t.State: pass -def vqt6_qobject_set_object_name(obj: QtObjectPtr, name: QtStringPtr) -> t.State: pass -def vqt6_qobject_object_name(obj: QtObjectPtr) -> QtStringPtr | t.State: pass -def vqt6_qobject_set_parent(child: QtObjectPtr, parent: QtObjectPtr) -> t.State: pass -def vqt6_qobject_parent(obj: QtObjectPtr) -> QtObjectPtr | t.State: pass - -# 信号/槽连接 (简化版: 函数指针形式) -# typedef void (*vqt6_callback_t)(void* user_data); -# vqt6_qobject_connect_typed(sender, signal_id, receiver, slot_id, type) 由 C++ 桥接层处理 -# 由于函数指针在 C ABI 中复杂,我们采用字符串 signal/slot 名 + 全局回调注册表 -def vqt6_qobject_connect(sender: QtObjectPtr, signal_name: t.CChar | t.CPtr, - receiver: QtObjectPtr, slot_name: t.CChar | t.CPtr) -> t.CInt | t.State: pass - -def vqt6_qobject_disconnect(sender: QtObjectPtr, signal_name: t.CChar | t.CPtr, - receiver: QtObjectPtr, slot_name: t.CChar | t.CPtr) -> t.CInt | t.State: pass - -# 事件过滤器 -def vqt6_qobject_install_event_filter(watched: QtObjectPtr, filter: QtObjectPtr) -> t.State: pass -def vqt6_qobject_remove_event_filter(watched: QtObjectPtr, filter: QtObjectPtr) -> t.State: pass - - -# ============================================================ -# QCoreApplication — 事件循环基类 -# ============================================================ -def vqt6_qcoreapp_create(app_name: t.CChar | t.CPtr) -> QtCoreAppPtr | t.State: pass -def vqt6_qcoreapp_instance() -> QtCoreAppPtr | t.State: pass -def vqt6_qcoreapp_exec(app: QtCoreAppPtr) -> t.CInt | t.State: pass -def vqt6_qcoreapp_quit(app: QtCoreAppPtr, exit_code: t.CInt) -> t.State: pass -def vqt6_qcoreapp_exit(app: QtCoreAppPtr, exit_code: t.CInt) -> t.State: pass -def vqt6_qcoreapp_process_events(app: QtCoreAppPtr, flags: t.CInt) -> t.State: pass -def vqt6_qcoreapp_post_event(receiver: QtObjectPtr, event: QtEventPtr) -> t.State: pass -def vqt6_qcoreapp_send_event(receiver: QtObjectPtr, event: QtEventPtr) -> t.CInt | t.State: pass -def vqt6_qcoreapp_organization_name(app: QtCoreAppPtr) -> QtStringPtr | t.State: pass -def vqt6_qcoreapp_set_organization_name(app: QtCoreAppPtr, name: QtStringPtr) -> t.State: pass -def vqt6_qcoreapp_application_name(app: QtCoreAppPtr) -> QtStringPtr | t.State: pass -def vqt6_qcoreapp_set_application_name(app: QtCoreAppPtr, name: QtStringPtr) -> t.State: pass - - -# ============================================================ -# QTimer — 定时器 -# ============================================================ -def vqt6_qtimer_create() -> QtTimerPtr | t.State: pass -def vqt6_qtimer_create_with_parent(parent: QtObjectPtr) -> QtTimerPtr | t.State: pass -def vqt6_qtimer_start(timer: QtTimerPtr, interval_ms: t.CInt) -> t.State: pass -def vqt6_qtimer_stop(timer: QtTimerPtr) -> t.State: pass -def vqt6_qtimer_set_interval(timer: QtTimerPtr, interval_ms: t.CInt) -> t.State: pass -def vqt6_qtimer_interval(timer: QtTimerPtr) -> t.CInt | t.State: pass -def vqt6_qtimer_is_active(timer: QtTimerPtr) -> t.CInt | t.State: pass -def vqt6_qtimer_set_single_shot(timer: QtTimerPtr, single_shot: t.CInt) -> t.State: pass -def vqt6_qtimer_is_single_shot(timer: QtTimerPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QVariant — 通用数据容器 -# ============================================================ -def vqt6_qvariant_create_int(value: t.CInt) -> QtVariantPtr | t.State: pass -def vqt6_qvariant_create_double(value: t.CDouble) -> QtVariantPtr | t.State: pass -def vqt6_qvariant_create_bool(value: t.CInt) -> QtVariantPtr | t.State: pass -def vqt6_qvariant_create_string(s: QtStringPtr) -> QtVariantPtr | t.State: pass -def vqt6_qvariant_to_int(v: QtVariantPtr, ok: t.CInt | t.CPtr) -> t.CInt | t.State: pass -def vqt6_qvariant_to_double(v: QtVariantPtr, ok: t.CInt | t.CPtr) -> t.CDouble | t.State: pass -def vqt6_qvariant_to_bool(v: QtVariantPtr, ok: t.CInt | t.CPtr) -> t.CInt | t.State: pass -def vqt6_qvariant_to_string(v: QtVariantPtr) -> QtStringPtr | t.State: pass -def vqt6_qvariant_type_id(v: QtVariantPtr) -> t.CInt | t.State: pass -def vqt6_qvariant_is_valid(v: QtVariantPtr) -> t.CInt | t.State: pass -def vqt6_qvariant_free(v: QtVariantPtr) -> t.State: pass - - -# ============================================================ -# QEvent — 事件基类 -# ============================================================ -def vqt6_qevent_type(event: QtEventPtr) -> t.CInt | t.State: pass -def vqt6_qevent_accept(event: QtEventPtr) -> t.State: pass -def vqt6_qevent_ignore(event: QtEventPtr) -> t.State: pass -def vqt6_qevent_is_accepted(event: QtEventPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# 字符串列表 (QStringList / QList) -# ============================================================ -def vqt6_qstringlist_create() -> QtStringListPtr | t.State: pass -def vqt6_qstringlist_append(list: QtStringListPtr, str: QtStringPtr) -> t.State: pass -def vqt6_qstringlist_size(list: QtStringListPtr) -> t.CInt | t.State: pass -def vqt6_qstringlist_at(list: QtStringListPtr, index: t.CInt) -> QtStringPtr | t.State: pass -def vqt6_qstringlist_free(list: QtStringListPtr) -> t.State: pass - - -# ============================================================ -# 字节数组列表 (QList) -# ============================================================ -def vqt6_qbytearraylist_create() -> QtByteArrayListPtr | t.State: pass -def vqt6_qbytearraylist_append(list: QtByteArrayListPtr, qba: QtByteArrayPtr) -> t.State: pass -def vqt6_qbytearraylist_size(list: QtByteArrayListPtr) -> t.CInt | t.State: pass -def vqt6_qbytearraylist_at(list: QtByteArrayListPtr, index: t.CInt) -> QtByteArrayPtr | t.State: pass -def vqt6_qbytearraylist_free(list: QtByteArrayListPtr) -> t.State: pass - - -# ============================================================ -# 全局回调注册表 -# ============================================================ -# 用于从 C++ 端回调 Viper 代码 -# Viper 注册一个 slot 函数(用整数 ID 标识),C++ 在触发信号时通过 ID 查找 -# typedef void (*vqt6_slot_callback_t)(int slot_id, void* user_data); -def vqt6_register_slot(slot_id: t.CInt, user_data: t.CVoid | t.CPtr) -> t.State: pass -def vqt6_unregister_slot(slot_id: t.CInt) -> t.State: pass -def vqt6_trigger_slot(slot_id: t.CInt) -> t.State: pass # 测试用 diff --git a/vqt6 copy/_qtgui.vp b/vqt6 copy/_qtgui.vp deleted file mode 100644 index 80f0094..0000000 --- a/vqt6 copy/_qtgui.vp +++ /dev/null @@ -1,237 +0,0 @@ -import t, c -from stdint import * -from vqt6._types import * - -# ============================================================ -# vqt6/_qtgui.py — QtGui 的 t.State FFI 声明 -# ============================================================ - -# ============================================================ -# QColor — 颜色 -# ============================================================ -def vqt6_qcolor_create_rgb(r: t.CInt, g: t.CInt, b: t.CInt) -> QtColorPtr | t.State: pass -def vqt6_qcolor_create_rgba(r: t.CInt, g: t.CInt, b: t.CInt, a: t.CInt) -> QtColorPtr | t.State: pass -def vqt6_qcolor_create_name(name: QtStringPtr) -> QtColorPtr | t.State: pass -def vqt6_qcolor_create_hex(hex_str: QtStringPtr) -> QtColorPtr | t.State: pass -def vqt6_qcolor_red(c: QtColorPtr) -> t.CInt | t.State: pass -def vqt6_qcolor_green(c: QtColorPtr) -> t.CInt | t.State: pass -def vqt6_qcolor_blue(c: QtColorPtr) -> t.CInt | t.State: pass -def vqt6_qcolor_alpha(c: QtColorPtr) -> t.CInt | t.State: pass -def vqt6_qcolor_set_red(c: QtColorPtr, r: t.CInt) -> t.State: pass -def vqt6_qcolor_set_green(c: QtColorPtr, g: t.CInt) -> t.State: pass -def vqt6_qcolor_set_blue(c: QtColorPtr, b: t.CInt) -> t.State: pass -def vqt6_qcolor_set_alpha(c: QtColorPtr, a: t.CInt) -> t.State: pass -def vqt6_qcolor_set_rgb(c: QtColorPtr, r: t.CInt, g: t.CInt, b: t.CInt) -> t.State: pass -def vqt6_qcolor_set_rgba(c: QtColorPtr, r: t.CInt, g: t.CInt, b: t.CInt, a: t.CInt) -> t.State: pass -def vqt6_qcolor_name(c: QtColorPtr) -> QtStringPtr | t.State: pass -def vqt6_qcolor_is_valid(c: QtColorPtr) -> t.CInt | t.State: pass -def vqt6_qcolor_free(c: QtColorPtr) -> t.State: pass - - -# ============================================================ -# QFont — 字体 -# ============================================================ -def vqt6_qfont_create() -> QtFontPtr | t.State: pass -def vqt6_qfont_create_with_family(family: QtStringPtr) -> QtFontPtr | t.State: pass -def vqt6_qfont_create_with_family_size(family: QtStringPtr, point_size: t.CInt) -> QtFontPtr | t.State: pass -def vqt6_qfont_set_family(font: QtFontPtr, family: QtStringPtr) -> t.State: pass -def vqt6_qfont_family(font: QtFontPtr) -> QtStringPtr | t.State: pass -def vqt6_qfont_set_point_size(font: QtFontPtr, point_size: t.CInt) -> t.State: pass -def vqt6_qfont_point_size(font: QtFontPtr) -> t.CInt | t.State: pass -def vqt6_qfont_set_pixel_size(font: QtFontPtr, pixel_size: t.CInt) -> t.State: pass -def vqt6_qfont_pixel_size(font: QtFontPtr) -> t.CInt | t.State: pass -def vqt6_qfont_set_bold(font: QtFontPtr, bold: t.CInt) -> t.State: pass -def vqt6_qfont_bold(font: QtFontPtr) -> t.CInt | t.State: pass -def vqt6_qfont_set_italic(font: QtFontPtr, italic: t.CInt) -> t.State: pass -def vqt6_qfont_italic(font: QtFontPtr) -> t.CInt | t.State: pass -def vqt6_qfont_set_underline(font: QtFontPtr, underline: t.CInt) -> t.State: pass -def vqt6_qfont_underline(font: QtFontPtr) -> t.CInt | t.State: pass -def vqt6_qfont_set_strike_out(font: QtFontPtr, strike_out: t.CInt) -> t.State: pass -def vqt6_qfont_strike_out(font: QtFontPtr) -> t.CInt | t.State: pass -def vqt6_qfont_set_weight(font: QtFontPtr, weight: t.CInt) -> t.State: pass -def vqt6_qfont_weight(font: QtFontPtr) -> t.CInt | t.State: pass -def vqt6_qfont_free(font: QtFontPtr) -> t.State: pass - - -# ============================================================ -# QFontMetrics — 字体度量 -# ============================================================ -def vqt6_qfontmetrics_create(font: QtFontPtr) -> QtFontMetricsPtr | t.State: pass -def vqt6_qfontmetrics_width(fm: QtFontMetricsPtr, text: QtStringPtr) -> t.CInt | t.State: pass -def vqt6_qfontmetrics_height(fm: QtFontMetricsPtr) -> t.CInt | t.State: pass -def vqt6_qfontmetrics_ascent(fm: QtFontMetricsPtr) -> t.CInt | t.State: pass -def vqt6_qfontmetrics_descent(fm: QtFontMetricsPtr) -> t.CInt | t.State: pass -def vqt6_qfontmetrics_free(fm: QtFontMetricsPtr) -> t.State: pass - - -# ============================================================ -# QPixmap — 像素图 -# ============================================================ -def vqt6_qpixmap_create() -> QtPixmapPtr | t.State: pass -def vqt6_qpixmap_create_with_size(w: t.CInt, h: t.CInt) -> QtPixmapPtr | t.State: pass -def vqt6_qpixmap_load(pm: QtPixmapPtr, file_name: QtStringPtr) -> t.CInt | t.State: pass -def vqt6_qpixmap_load_from_data(pm: QtPixmapPtr, data: t.CVoid | t.CPtr, size: t.CSizeT) -> t.CInt | t.State: pass -def vqt6_qpixmap_save(pm: QtPixmapPtr, file_name: QtStringPtr) -> t.CInt | t.State: pass -def vqt6_qpixmap_width(pm: QtPixmapPtr) -> t.CInt | t.State: pass -def vqt6_qpixmap_height(pm: QtPixmapPtr) -> t.CInt | t.State: pass -def vqt6_qpixmap_is_null(pm: QtPixmapPtr) -> t.CInt | t.State: pass -def vqt6_qpixmap_scaled(pm: QtPixmapPtr, w: t.CInt, h: t.CInt) -> QtPixmapPtr | t.State: pass -def vqt6_qpixmap_fill(pm: QtPixmapPtr, color: QtColorPtr) -> t.State: pass -def vqt6_qpixmap_free(pm: QtPixmapPtr) -> t.State: pass - - -# ============================================================ -# QImage — 图像 -# ============================================================ -def vqt6_qimage_create() -> QtImagePtr | t.State: pass -def vqt6_qimage_create_with_size(w: t.CInt, h: t.CInt, format: t.CInt) -> QtImagePtr | t.State: pass -def vqt6_qimage_load(img: QtImagePtr, file_name: QtStringPtr) -> t.CInt | t.State: pass -def vqt6_qimage_save(img: QtImagePtr, file_name: QtStringPtr) -> t.CInt | t.State: pass -def vqt6_qimage_width(img: QtImagePtr) -> t.CInt | t.State: pass -def vqt6_qimage_height(img: QtImagePtr) -> t.CInt | t.State: pass -def vqt6_qimage_format(img: QtImagePtr) -> t.CInt | t.State: pass -def vqt6_qimage_is_null(img: QtImagePtr) -> t.CInt | t.State: pass -def vqt6_qimage_fill(img: QtImagePtr, color: QtColorPtr) -> t.State: pass -def vqt6_qimage_scaled(img: QtImagePtr, w: t.CInt, h: t.CInt) -> QtImagePtr | t.State: pass -def vqt6_qimage_free(img: QtImagePtr) -> t.State: pass - - -# ============================================================ -# QPainter — 绘画器 -# ============================================================ -def vqt6_qpainter_create() -> QtPainterPtr | t.State: pass -def vqt6_qpainter_begin(p: QtPainterPtr, device: QtPixmapPtr) -> t.CInt | t.State: pass -def vqt6_qpainter_end(p: QtPainterPtr) -> t.CInt | t.State: pass -def vqt6_qpainter_is_active(p: QtPainterPtr) -> t.CInt | t.State: pass -def vqt6_qpainter_set_pen(p: QtPainterPtr, pen: QtPenPtr) -> t.State: pass -def vqt6_qpainter_set_brush(p: QtPainterPtr, brush: QtBrushPtr) -> t.State: pass -def vqt6_qpainter_set_font(p: QtPainterPtr, font: QtFontPtr) -> t.State: pass -def vqt6_qpainter_pen(p: QtPainterPtr) -> QtPenPtr | t.State: pass -def vqt6_qpainter_brush(p: QtPainterPtr) -> QtBrushPtr | t.State: pass -def vqt6_qpainter_font(p: QtPainterPtr) -> QtFontPtr | t.State: pass -def vqt6_qpainter_set_opacity(p: QtPainterPtr, opacity: t.CDouble) -> t.State: pass -def vqt6_qpainter_opacity(p: QtPainterPtr) -> t.CDouble | t.State: pass - -# 绘图原语 -def vqt6_qpainter_draw_line(p: QtPainterPtr, x1: t.CInt, y1: t.CInt, x2: t.CInt, y2: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_rect(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qpainter_fill_rect(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt, color: QtColorPtr) -> t.State: pass -def vqt6_qpainter_draw_ellipse(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_arc(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt, start_angle: t.CInt, span_angle: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_chord(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt, start_angle: t.CInt, span_angle: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_pie(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt, start_angle: t.CInt, span_angle: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_polygon(p: QtPainterPtr, points: t.CInt | t.CPtr, point_count: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_polyline(p: QtPainterPtr, points: t.CInt | t.CPtr, point_count: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_point(p: QtPainterPtr, x: t.CInt, y: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_points(p: QtPainterPtr, points: t.CInt | t.CPtr, point_count: t.CInt) -> t.State: pass -def vqt6_qpainter_draw_text(p: QtPainterPtr, x: t.CInt, y: t.CInt, text: QtStringPtr) -> t.State: pass -def vqt6_qpainter_draw_text_in_rect(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt, flags: t.CInt, text: QtStringPtr) -> t.State: pass -def vqt6_qpainter_draw_pixmap(p: QtPainterPtr, x: t.CInt, y: t.CInt, pixmap: QtPixmapPtr) -> t.State: pass -def vqt6_qpainter_draw_image(p: QtPainterPtr, x: t.CInt, y: t.CInt, image: QtImagePtr) -> t.State: pass -def vqt6_qpainter_draw_tiled_pixmap(p: QtPainterPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt, pixmap: QtPixmapPtr) -> t.State: pass - -# 变换 -def vqt6_qpainter_translate(p: QtPainterPtr, dx: t.CInt, dy: t.CInt) -> t.State: pass -def vqt6_qpainter_rotate(p: QtPainterPtr, angle: t.CDouble) -> t.State: pass -def vqt6_qpainter_scale(p: QtPainterPtr, sx: t.CDouble, sy: t.CDouble) -> t.State: pass -def vqt6_qpainter_reset_transform(p: QtPainterPtr) -> t.State: pass -def vqt6_qpainter_save(p: QtPainterPtr) -> t.State: pass -def vqt6_qpainter_restore(p: QtPainterPtr) -> t.State: pass - -def vqt6_qpainter_free(p: QtPainterPtr) -> t.State: pass - - -# ============================================================ -# QPen — 画笔 -# ============================================================ -def vqt6_qpen_create() -> QtPenPtr | t.State: pass -def vqt6_qpen_create_with_color(color: QtColorPtr) -> QtPenPtr | t.State: pass -def vqt6_qpen_create_with_color_width(color: QtColorPtr, width: t.CInt) -> QtPenPtr | t.State: pass -def vqt6_qpen_set_color(pen: QtPenPtr, color: QtColorPtr) -> t.State: pass -def vqt6_qpen_color(pen: QtPenPtr) -> QtColorPtr | t.State: pass -def vqt6_qpen_set_width(pen: QtPenPtr, width: t.CInt) -> t.State: pass -def vqt6_qpen_width(pen: QtPenPtr) -> t.CInt | t.State: pass -def vqt6_qpen_set_style(pen: QtPenPtr, style: t.CInt) -> t.State: pass -def vqt6_qpen_style(pen: QtPenPtr) -> t.CInt | t.State: pass -def vqt6_qpen_free(pen: QtPenPtr) -> t.State: pass - - -# ============================================================ -# QBrush — 画刷 -# ============================================================ -def vqt6_qbrush_create() -> QtBrushPtr | t.State: pass -def vqt6_qbrush_create_with_color(color: QtColorPtr) -> QtBrushPtr | t.State: pass -def vqt6_qbrush_create_with_style(style: t.CInt) -> QtBrushPtr | t.State: pass -def vqt6_qbrush_set_color(brush: QtBrushPtr, color: QtColorPtr) -> t.State: pass -def vqt6_qbrush_color(brush: QtBrushPtr) -> QtColorPtr | t.State: pass -def vqt6_qbrush_set_style(brush: QtBrushPtr, style: t.CInt) -> t.State: pass -def vqt6_qbrush_style(brush: QtBrushPtr) -> t.CInt | t.State: pass -def vqt6_qbrush_free(brush: QtBrushPtr) -> t.State: pass - - -# ============================================================ -# QIcon — 图标 -# ============================================================ -def vqt6_qicon_create() -> QtIconPtr | t.State: pass -def vqt6_qicon_create_with_file(file_name: QtStringPtr) -> QtIconPtr | t.State: pass -def vqt6_qicon_add_file(icon: QtIconPtr, file_name: QtStringPtr) -> t.State: pass -def vqt6_qicon_add_pixmap(icon: QtIconPtr, pixmap: QtPixmapPtr) -> t.State: pass -def vqt6_qicon_is_null(icon: QtIconPtr) -> t.CInt | t.State: pass -def vqt6_qicon_pixmap(icon: QtIconPtr, w: t.CInt, h: t.CInt) -> QtPixmapPtr | t.State: pass -def vqt6_qicon_free(icon: QtIconPtr) -> t.State: pass - - -# ============================================================ -# QCursor — 鼠标光标 -# ============================================================ -def vqt6_qcursor_create() -> QtCursorPtr | t.State: pass -def vqt6_qcursor_create_with_shape(shape: t.CInt) -> QtCursorPtr | t.State: pass -def vqt6_qcursor_pos(x: t.CInt | t.CPtr, y: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qcursor_set_pos(x: t.CInt, y: t.CInt) -> t.State: pass -def vqt6_qcursor_set_shape(cursor: QtCursorPtr, shape: t.CInt) -> t.State: pass -def vqt6_qcursor_shape(cursor: QtCursorPtr) -> t.CInt | t.State: pass -def vqt6_qcursor_free(cursor: QtCursorPtr) -> t.State: pass - - -# ============================================================ -# QKeyEvent — 键盘事件 -# ============================================================ -def vqt6_qkeyevent_create(type: t.CInt, key: t.CInt, modifiers: t.CInt, text: QtStringPtr) -> QtKeyEventPtr | t.State: pass -def vqt6_qkeyevent_key(event: QtKeyEventPtr) -> t.CInt | t.State: pass -def vqt6_qkeyevent_text(event: QtKeyEventPtr) -> QtStringPtr | t.State: pass -def vqt6_qkeyevent_modifiers(event: QtKeyEventPtr) -> t.CInt | t.State: pass -def vqt6_qkeyevent_is_auto_repeat(event: QtKeyEventPtr) -> t.CInt | t.State: pass -def vqt6_qkeyevent_free(event: QtKeyEventPtr) -> t.State: pass - - -# ============================================================ -# QMouseEvent — 鼠标事件 -# ============================================================ -def vqt6_qmouseevent_create(type: t.CInt, local_pos: QtObjectPtr, button: t.CInt, buttons: t.CInt, modifiers: t.CInt) -> QtMouseEventPtr | t.State: pass -def vqt6_qmouseevent_button(event: QtMouseEventPtr) -> t.CInt | t.State: pass -def vqt6_qmouseevent_buttons(event: QtMouseEventPtr) -> t.CInt | t.State: pass -def vqt6_qmouseevent_x(event: QtMouseEventPtr) -> t.CInt | t.State: pass -def vqt6_qmouseevent_y(event: QtMouseEventPtr) -> t.CInt | t.State: pass -def vqt6_qmouseevent_global_x(event: QtMouseEventPtr) -> t.CInt | t.State: pass -def vqt6_qmouseevent_global_y(event: QtMouseEventPtr) -> t.CInt | t.State: pass -def vqt6_qmouseevent_modifiers(event: QtMouseEventPtr) -> t.CInt | t.State: pass -def vqt6_qmouseevent_free(event: QtMouseEventPtr) -> t.State: pass - - -# ============================================================ -# QResizeEvent / QPaintEvent / QCloseEvent -# ============================================================ -def vqt6_qresizeevent_create(width: t.CInt, height: t.CInt, old_width: t.CInt, old_height: t.CInt) -> QtResizeEventPtr | t.State: pass -def vqt6_qresizeevent_size(event: QtResizeEventPtr, w: t.CInt | t.CPtr, h: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qresizeevent_old_size(event: QtResizeEventPtr, w: t.CInt | t.CPtr, h: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qresizeevent_free(event: QtResizeEventPtr) -> t.State: pass - -def vqt6_qpaintevent_create(rect_x: t.CInt, rect_y: t.CInt, rect_w: t.CInt, rect_h: t.CInt) -> QtPaintEventPtr | t.State: pass -def vqt6_qpaintevent_rect(event: QtPaintEventPtr, x: t.CInt | t.CPtr, y: t.CInt | t.CPtr, w: t.CInt | t.CPtr, h: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qpaintevent_free(event: QtPaintEventPtr) -> t.State: pass - -def vqt6_qcloseevent_create() -> QtCloseEventPtr | t.State: pass -def vqt6_qcloseevent_is_accepted(event: QtCloseEventPtr) -> t.CInt | t.State: pass -def vqt6_qcloseevent_accept(event: QtCloseEventPtr) -> t.State: pass -def vqt6_qcloseevent_ignore(event: QtCloseEventPtr) -> t.State: pass -def vqt6_qcloseevent_free(event: QtCloseEventPtr) -> t.State: pass diff --git a/vqt6 copy/_qtnetwork.vp b/vqt6 copy/_qtnetwork.vp deleted file mode 100644 index 6859d8b..0000000 --- a/vqt6 copy/_qtnetwork.vp +++ /dev/null @@ -1,184 +0,0 @@ -import t, c -from stdint import * -from vqt6._types import * - -# ============================================================ -# vqt6/_qtnetwork.py — QtNetwork 的 t.State FFI 声明 -# ============================================================ - -# ============================================================ -# QHostAddress — IP 地址 -# ============================================================ -def vqt6_qhostaddress_create() -> QtHostAddressPtr | t.State: pass -def vqt6_qhostaddress_create_with_ipv4(ipv4: t.CUInt32T) -> QtHostAddressPtr | t.State: pass -def vqt6_qhostaddress_create_with_string(address: QtStringPtr) -> QtHostAddressPtr | t.State: pass -def vqt6_qhostaddress_create_with_local_host() -> QtHostAddressPtr | t.State: pass -def vqt6_qhostaddress_create_with_local_ipv4() -> QtHostAddressPtr | t.State: pass -def vqt6_qhostaddress_create_with_broadcast() -> QtHostAddressPtr | t.State: pass -def vqt6_qhostaddress_create_with_any_ipv4() -> QtHostAddressPtr | t.State: pass -def vqt6_qhostaddress_to_string(addr: QtHostAddressPtr) -> QtStringPtr | t.State: pass -def vqt6_qhostaddress_to_ipv4(addr: QtHostAddressPtr) -> t.CUInt32T | t.State: pass -def vqt6_qhostaddress_is_null(addr: QtHostAddressPtr) -> t.CInt | t.State: pass -def vqt6_qhostaddress_is_loopback(addr: QtHostAddressPtr) -> t.CInt | t.State: pass -def vqt6_qhostaddress_is_broadcast(addr: QtHostAddressPtr) -> t.CInt | t.State: pass -def vqt6_qhostaddress_protocol(addr: QtHostAddressPtr) -> t.CInt | t.State: pass -def vqt6_qhostaddress_free(addr: QtHostAddressPtr) -> t.State: pass - - -# ============================================================ -# QAbstractSocket — TCP/UDP 套接字基类 -# ============================================================ -# 套接字状态 -QT_SOCKET_UNCONNECTED_STATE: t.CDefine = 0 -QT_SOCKET_HOST_LOOKUP_STATE: t.CDefine = 1 -QT_SOCKET_CONNECTING_STATE: t.CDefine = 2 -QT_SOCKET_CONNECTED_STATE: t.CDefine = 3 -QT_SOCKET_BOUND_STATE: t.CDefine = 4 -QT_SOCKET_LISTENING_STATE: t.CDefine = 5 -QT_SOCKET_CLOSING_STATE: t.CDefine = 6 - -# 套接字类型 -QT_SOCKET_TCP: t.CDefine = 0 -QT_SOCKET_UDP: t.CDefine = 1 - -# 套接字错误 -QT_SOCKET_NO_ERROR: t.CDefine = 0 - -# 通用方法 -def vqt6_qabstractsocket_state(socket: QtAbstractSocketPtr) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_error(socket: QtAbstractSocketPtr) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_error_string(socket: QtAbstractSocketPtr) -> QtStringPtr | t.State: pass -def vqt6_qabstractsocket_connect_to_host(socket: QtAbstractSocketPtr, host_name: QtStringPtr, port: t.CUInt16T) -> t.State: pass -def vqt6_qabstractsocket_connect_to_host_with_addr(socket: QtAbstractSocketPtr, address: QtHostAddressPtr, port: t.CUInt16T) -> t.State: pass -def vqt6_qabstractsocket_disconnect_from_host(socket: QtAbstractSocketPtr) -> t.State: pass -def vqt6_qabstractsocket_wait_for_connected(socket: QtAbstractSocketPtr, timeout_ms: t.CInt) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_wait_for_ready_read(socket: QtAbstractSocketPtr, timeout_ms: t.CInt) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_wait_for_bytes_written(socket: QtAbstractSocketPtr, timeout_ms: t.CInt) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_wait_for_disconnected(socket: QtAbstractSocketPtr, timeout_ms: t.CInt) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_is_valid(socket: QtAbstractSocketPtr) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_is_open(socket: QtAbstractSocketPtr) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_flush(socket: QtAbstractSocketPtr) -> t.CInt | t.State: pass -def vqt6_qabstractsocket_close(socket: QtAbstractSocketPtr) -> t.State: pass -def vqt6_qabstractsocket_abort(socket: QtAbstractSocketPtr) -> t.State: pass -def vqt6_qabstractsocket_read(socket: QtAbstractSocketPtr, buf: t.CVoid | t.CPtr, max_size: t.CSizeT) -> t.CSizeT | t.State: pass -def vqt6_qabstractsocket_read_all(socket: QtAbstractSocketPtr, out_size: t.CSizeT | t.CPtr) -> t.CVoid | t.CPtr | t.State: pass -def vqt6_qabstractsocket_write(socket: QtAbstractSocketPtr, data: t.CVoid | t.CPtr, size: t.CSizeT) -> t.CSizeT | t.State: pass -def vqt6_qabstractsocket_bytes_available(socket: QtAbstractSocketPtr) -> t.CSizeT | t.State: pass -def vqt6_qabstractsocket_bytes_to_write(socket: QtAbstractSocketPtr) -> t.CSizeT | t.State: pass -def vqt6_qabstractsocket_peer_address(socket: QtAbstractSocketPtr) -> QtHostAddressPtr | t.State: pass -def vqt6_qabstractsocket_peer_port(socket: QtAbstractSocketPtr) -> t.CUInt16T | t.State: pass -def vqt6_qabstractsocket_local_address(socket: QtAbstractSocketPtr) -> QtHostAddressPtr | t.State: pass -def vqt6_qabstractsocket_local_port(socket: QtAbstractSocketPtr) -> t.CUInt16T | t.State: pass - - -# ============================================================ -# QTcpSocket — TCP 套接字 -# ============================================================ -def vqt6_qtcpsocket_create() -> QtTcpSocketPtr | t.State: pass -def vqt6_qtcpsocket_create_with_parent(parent: QtObjectPtr) -> QtTcpSocketPtr | t.State: pass -def vqt6_qtcpsocket_connect_to_host(socket: QtTcpSocketPtr, host_name: QtStringPtr, port: t.CUInt16T, mode: t.CInt) -> t.State: pass -def vqt6_qtcpsocket_connect_to_host_with_addr(socket: QtTcpSocketPtr, address: QtHostAddressPtr, port: t.CUInt16T, mode: t.CInt) -> t.State: pass -def vqt6_qtcpsocket_set_socket_descriptor(socket: QtTcpSocketPtr, socket_descriptor: t.CInt) -> t.CInt | t.State: pass -def vqt6_qtcpsocket_socket_descriptor(socket: QtTcpSocketPtr) -> t.CInt | t.State: pass -def vqt6_qtcpsocket_set_proxy(socket: QtTcpSocketPtr, proxy_type: t.CInt) -> t.State: pass -def vqt6_qtcpsocket_abort(socket: QtTcpSocketPtr) -> t.State: pass - - -# ============================================================ -# QUdpSocket — UDP 套接字 -# ============================================================ -def vqt6_qudpsocket_create() -> QtUdpSocketPtr | t.State: pass -def vqt6_qudpsocket_create_with_parent(parent: QtObjectPtr) -> QtUdpSocketPtr | t.State: pass -def vqt6_qudpsocket_bind(socket: QtUdpSocketPtr, port: t.CUInt16T) -> t.CInt | t.State: pass -def vqt6_qudpsocket_bind_with_addr(socket: QtUdpSocketPtr, address: QtHostAddressPtr, port: t.CUInt16T) -> t.CInt | t.State: pass -def vqt6_qudpsocket_close(socket: QtUdpSocketPtr) -> t.State: pass -def vqt6_qudpsocket_write_datagram(socket: QtUdpSocketPtr, data: t.CVoid | t.CPtr, size: t.CSizeT, host: QtHostAddressPtr, port: t.CUInt16T) -> t.CSizeT | t.State: pass -def vqt6_qudpsocket_read_datagram(socket: QtUdpSocketPtr, data: t.CVoid | t.CPtr, max_size: t.CSizeT, host: QtHostAddressPtr, port: t.CUInt16T | t.CPtr) -> t.CSizeT | t.State: pass -def vqt6_qudpsocket_has_pending_datagrams(socket: QtUdpSocketPtr) -> t.CInt | t.State: pass -def vqt6_qudpsocket_pending_datagram_size(socket: QtUdpSocketPtr) -> t.CSizeT | t.State: pass -def vqt6_qudpsocket_join_multicast_group(socket: QtUdpSocketPtr, group_address: QtHostAddressPtr) -> t.CInt | t.State: pass -def vqt6_qudpsocket_leave_multicast_group(socket: QtUdpSocketPtr, group_address: QtHostAddressPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QNetworkRequest — 网络请求 -# ============================================================ -def vqt6_qnetworkrequest_create() -> QtNetworkRequestPtr | t.State: pass -def vqt6_qnetworkrequest_create_with_url(url: QtStringPtr) -> QtNetworkRequestPtr | t.State: pass -def vqt6_qnetworkrequest_set_url(req: QtNetworkRequestPtr, url: QtStringPtr) -> t.State: pass -def vqt6_qnetworkrequest_url(req: QtNetworkRequestPtr) -> QtStringPtr | t.State: pass -def vqt6_qnetworkrequest_set_header(req: QtNetworkRequestPtr, header_type: t.CInt, value: QtVariantPtr) -> t.State: pass -def vqt6_qnetworkrequest_header(req: QtNetworkRequestPtr, header_type: t.CInt) -> QtVariantPtr | t.State: pass -def vqt6_qnetworkrequest_set_raw_header(req: QtNetworkRequestPtr, header_name: t.CChar | t.CPtr, value: t.CVoid | t.CPtr, value_size: t.CSizeT) -> t.State: pass -def vqt6_qnetworkrequest_raw_header(req: QtNetworkRequestPtr, header_name: t.CChar | t.CPtr, out_size: t.CSizeT | t.CPtr) -> t.CVoid | t.CPtr | t.State: pass -def vqt6_qnetworkrequest_set_attribute(req: QtNetworkRequestPtr, attr_type: t.CInt, value: QtVariantPtr) -> t.State: pass -def vqt6_qnetworkrequest_attribute(req: QtNetworkRequestPtr, attr_type: t.CInt) -> QtVariantPtr | t.State: pass -def vqt6_qnetworkrequest_free(req: QtNetworkRequestPtr) -> t.State: pass - - -# ============================================================ -# QNetworkAccessManager — HTTP 客户端管理器 -# ============================================================ -def vqt6_qnetworkaccessmanager_create() -> QtNetworkAccessManagerPtr | t.State: pass -def vqt6_qnetworkaccessmanager_create_with_parent(parent: QtObjectPtr) -> QtNetworkAccessManagerPtr | t.State: pass -def vqt6_qnetworkaccessmanager_get(nam: QtNetworkAccessManagerPtr, req: QtNetworkRequestPtr) -> QtNetworkReplyPtr | t.State: pass -def vqt6_qnetworkaccessmanager_post(nam: QtNetworkAccessManagerPtr, req: QtNetworkRequestPtr, data: t.CVoid | t.CPtr, size: t.CSizeT) -> QtNetworkReplyPtr | t.State: pass -def vqt6_qnetworkaccessmanager_put(nam: QtNetworkAccessManagerPtr, req: QtNetworkRequestPtr, data: t.CVoid | t.CPtr, size: t.CSizeT) -> QtNetworkReplyPtr | t.State: pass -def vqt6_qnetworkaccessmanager_delete_resource(nam: QtNetworkAccessManagerPtr, req: QtNetworkRequestPtr) -> QtNetworkReplyPtr | t.State: pass -def vqt6_qnetworkaccessmanager_head(nam: QtNetworkAccessManagerPtr, req: QtNetworkRequestPtr) -> QtNetworkReplyPtr | t.State: pass -def vqt6_qnetworkaccessmanager_set_cookie_store(nam: QtNetworkAccessManagerPtr, store: QtObjectPtr) -> t.State: pass - - -# ============================================================ -# QNetworkReply — 网络响应 -# ============================================================ -def vqt6_qnetworkreply_url(reply: QtNetworkReplyPtr) -> QtStringPtr | t.State: pass -def vqt6_qnetworkreply_request(reply: QtNetworkReplyPtr) -> QtNetworkRequestPtr | t.State: pass -def vqt6_qnetworkreply_error(reply: QtNetworkReplyPtr) -> t.CInt | t.State: pass -def vqt6_qnetworkreply_error_string(reply: QtNetworkReplyPtr) -> QtStringPtr | t.State: pass -def vqt6_qnetworkreply_is_finished(reply: QtNetworkReplyPtr) -> t.CInt | t.State: pass -def vqt6_qnetworkreply_is_running(reply: QtNetworkReplyPtr) -> t.CInt | t.State: pass -def vqt6_qnetworkreply_abort(reply: QtNetworkReplyPtr) -> t.State: pass -def vqt6_qnetworkreply_read(reply: QtNetworkReplyPtr, buf: t.CVoid | t.CPtr, max_size: t.CSizeT) -> t.CSizeT | t.State: pass -def vqt6_qnetworkreply_read_all(reply: QtNetworkReplyPtr, out_size: t.CSizeT | t.CPtr) -> t.CVoid | t.CPtr | t.State: pass -def vqt6_qnetworkreply_bytes_available(reply: QtNetworkReplyPtr) -> t.CSizeT | t.State: pass -def vqt6_qnetworkreply_header(reply: QtNetworkReplyPtr, header_type: t.CInt) -> QtVariantPtr | t.State: pass -def vqt6_qnetworkreply_raw_header(reply: QtNetworkReplyPtr, header_name: t.CChar | t.CPtr, out_size: t.CSizeT | t.CPtr) -> t.CVoid | t.CPtr | t.State: pass -def vqt6_qnetworkreply_attribute(reply: QtNetworkReplyPtr, attribute_code: t.CInt) -> QtVariantPtr | t.State: pass -def vqt6_qnetworkreply_attribute_int(reply: QtNetworkReplyPtr, attribute_code: t.CInt, default_value: t.CInt) -> t.CInt | t.State: pass -def vqt6_qnetworkreply_set_raw_header(reply: QtNetworkReplyPtr, header_name: t.CChar | t.CPtr, value: t.CVoid | t.CPtr, value_size: t.CSizeT) -> t.State: pass - - -# ============================================================ -# 套接字类型枚举 -# ============================================================ -# 套接字类型 -QT_ABSTRACT_SOCKET_TCP: t.CDefine = 0 -QT_ABSTRACT_SOCKET_UDP: t.CDefine = 1 - -# 网络层协议 -QT_NETWORK_IPV4_PROTOCOL: t.CDefine = 0 -QT_NETWORK_IPV6_PROTOCOL: t.CDefine = 1 -QT_NETWORK_ANY_IP_PROTOCOL: t.CDefine = 2 - -# 主机地址特殊情况 -QT_HOST_ADDRESS_LOCAL_HOST: t.CDefine = 0x00000000 -QT_HOST_ADDRESS_LOCAL_HOST_IPV6: t.CDefine = 0x00000001 -QT_HOST_ADDRESS_BROADCAST: t.CDefine = 0x00000002 -QT_HOST_ADDRESS_ANY_IPV4: t.CDefine = 0x00000004 -QT_HOST_ADDRESS_ANY_IPV6: t.CDefine = 0x00000005 - - -# ============================================================ -# 已知端口常量 -# ============================================================ -QT_PORT_FTP: t.CDefine = 21 -QT_PORT_SSH: t.CDefine = 22 -QT_PORT_TELNET: t.CDefine = 23 -QT_PORT_SMTP: t.CDefine = 25 -QT_PORT_DNS: t.CDefine = 53 -QT_PORT_HTTP: t.CDefine = 80 -QT_PORT_POP3: t.CDefine = 110 -QT_PORT_IMAP: t.CDefine = 143 -QT_PORT_HTTPS: t.CDefine = 443 -QT_PORT_SMB: t.CDefine = 445 diff --git a/vqt6 copy/_qtwidgets.vp b/vqt6 copy/_qtwidgets.vp deleted file mode 100644 index 025d026..0000000 --- a/vqt6 copy/_qtwidgets.vp +++ /dev/null @@ -1,478 +0,0 @@ -import t, c -from stdint import * -from vqt6._types import * - -# ============================================================ -# vqt6/_qtwidgets.py — QtWidgets 的 t.State FFI 声明 -# ============================================================ - -# ============================================================ -# QApplication — GUI 应用入口 -# ============================================================ -# argc/argv 通过单独的 buffer 数组传入(Viper 中 C 数组使用指针+长度) -def vqt6_qapplication_create(argc: t.CInt, argv: t.CPtr | t.CPtr) -> QtAppPtr | t.State: pass -def vqt6_qapplication_instance() -> QtAppPtr | t.State: pass -def vqt6_qapplication_exec(app: QtAppPtr) -> t.CInt | t.State: pass -def vqt6_qapplication_quit(app: QtAppPtr) -> t.State: pass -def vqt6_qapplication_exit(app: QtAppPtr, exit_code: t.CInt) -> t.State: pass -def vqt6_qapplication_process_events(app: QtAppPtr) -> t.State: pass -def vqt6_qapplication_desktop_width(app: QtAppPtr) -> t.CInt | t.State: pass -def vqt6_qapplication_desktop_height(app: QtAppPtr) -> t.CInt | t.State: pass -def vqt6_qapplication_set_quit_on_last_window_closed(app: QtAppPtr, quit: t.CInt) -> t.State: pass -def vqt6_qapplication_quit_on_last_window_closed(app: QtAppPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QWidget — 所有窗口的基类 -# ============================================================ -def vqt6_qwidget_create() -> QtWidgetPtr | t.State: pass -def vqt6_qwidget_create_with_parent(parent: QtWidgetPtr) -> QtWidgetPtr | t.State: pass -def vqt6_qwidget_show(widget: QtWidgetPtr) -> t.State: pass -def vqt6_qwidget_hide(widget: QtWidgetPtr) -> t.State: pass -def vqt6_qwidget_close(widget: QtWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qwidget_is_visible(widget: QtWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qwidget_set_visible(widget: QtWidgetPtr, visible: t.CInt) -> t.State: pass - -# 几何 -def vqt6_qwidget_set_geometry(widget: QtWidgetPtr, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qwidget_geometry(widget: QtWidgetPtr, x: t.CInt | t.CPtr, y: t.CInt | t.CPtr, w: t.CInt | t.CPtr, h: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qwidget_resize(widget: QtWidgetPtr, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qwidget_size(widget: QtWidgetPtr, w: t.CInt | t.CPtr, h: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qwidget_move(widget: QtWidgetPtr, x: t.CInt, y: t.CInt) -> t.State: pass -def vqt6_qwidget_pos(widget: QtWidgetPtr, x: t.CInt | t.CPtr, y: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qwidget_width(widget: QtWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qwidget_height(widget: QtWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qwidget_x(widget: QtWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qwidget_y(widget: QtWidgetPtr) -> t.CInt | t.State: pass - -# 文本与标题 -def vqt6_qwidget_set_window_title(widget: QtWidgetPtr, title: QtStringPtr) -> t.State: pass -def vqt6_qwidget_window_title(widget: QtWidgetPtr) -> QtStringPtr | t.State: pass -def vqt6_qwidget_set_text(widget: QtWidgetPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qwidget_text(widget: QtWidgetPtr) -> QtStringPtr | t.State: pass - -# 启用 -def vqt6_qwidget_set_enabled(widget: QtWidgetPtr, enabled: t.CInt) -> t.State: pass -def vqt6_qwidget_is_enabled(widget: QtWidgetPtr) -> t.CInt | t.State: pass - -# 父对象 -def vqt6_qwidget_set_parent(widget: QtWidgetPtr, parent: QtWidgetPtr) -> t.State: pass -def vqt6_qwidget_parent_widget(widget: QtWidgetPtr) -> QtWidgetPtr | t.State: pass - -# 焦点 -def vqt6_qwidget_set_focus(widget: QtWidgetPtr) -> t.State: pass -def vqt6_qwidget_clear_focus(widget: QtWidgetPtr) -> t.State: pass -def vqt6_qwidget_has_focus(widget: QtWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qwidget_set_focus_policy(widget: QtWidgetPtr, policy: t.CInt) -> t.State: pass - -# 更新 -def vqt6_qwidget_update(widget: QtWidgetPtr) -> t.State: pass -def vqt6_qwidget_repaint(widget: QtWidgetPtr) -> t.State: pass -def vqt6_qwidget_set_update_enabled(widget: QtWidgetPtr, enabled: t.CInt) -> t.State: pass - -# 窗口标志 -def vqt6_qwidget_set_window_flags(widget: QtWidgetPtr, flags: t.CInt) -> t.State: pass -def vqt6_qwidget_window_flags(widget: QtWidgetPtr) -> t.CInt | t.State: pass - -# 鼠标光标 -def vqt6_qwidget_set_cursor(widget: QtWidgetPtr, cursor: QtCursorPtr) -> t.State: pass -def vqt6_qwidget_cursor(widget: QtWidgetPtr) -> QtCursorPtr | t.State: pass -def vqt6_qwidget_unset_cursor(widget: QtWidgetPtr) -> t.State: pass - -# 工具提示 -def vqt6_qwidget_set_tool_tip(widget: QtWidgetPtr, tip: QtStringPtr) -> t.State: pass -def vqt6_qwidget_tool_tip(widget: QtWidgetPtr) -> QtStringPtr | t.State: pass - -# 状态栏提示 -def vqt6_qwidget_set_status_tip(widget: QtWidgetPtr, tip: QtStringPtr) -> t.State: pass -def vqt6_qwidget_status_tip(widget: QtWidgetPtr) -> QtStringPtr | t.State: pass - -# 最小/最大尺寸 -def vqt6_qwidget_set_minimum_size(widget: QtWidgetPtr, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qwidget_set_maximum_size(widget: QtWidgetPtr, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qwidget_set_fixed_size(widget: QtWidgetPtr, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qwidget_minimum_size(widget: QtWidgetPtr, w: t.CInt | t.CPtr, h: t.CInt | t.CPtr) -> t.State: pass -def vqt6_qwidget_maximum_size(widget: QtWidgetPtr, w: t.CInt | t.CPtr, h: t.CInt | t.CPtr) -> t.State: pass - - -# ============================================================ -# QDialog — 对话框 -# ============================================================ -def vqt6_qdialog_create() -> QtDialogPtr | t.State: pass -def vqt6_qdialog_create_with_parent(parent: QtWidgetPtr) -> QtDialogPtr | t.State: pass -def vqt6_qdialog_exec(dialog: QtDialogPtr) -> t.CInt | t.State: pass -def vqt6_qdialog_done(dialog: QtDialogPtr, result: t.CInt) -> t.State: pass -def vqt6_qdialog_accept(dialog: QtDialogPtr) -> t.State: pass -def vqt6_qdialog_reject(dialog: QtDialogPtr) -> t.State: pass -def vqt6_qdialog_set_result(dialog: QtDialogPtr, result: t.CInt) -> t.State: pass -def vqt6_qdialog_result(dialog: QtDialogPtr) -> t.CInt | t.State: pass -def vqt6_qdialog_set_modal(dialog: QtDialogPtr, modal: t.CInt) -> t.State: pass -def vqt6_qdialog_is_modal(dialog: QtDialogPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QMainWindow — 主窗口 -# ============================================================ -def vqt6_qmainwindow_create() -> QtMainWindowPtr | t.State: pass -def vqt6_qmainwindow_create_with_parent(parent: QtWidgetPtr) -> QtMainWindowPtr | t.State: pass -def vqt6_qmainwindow_set_central_widget(mw: QtMainWindowPtr, widget: QtWidgetPtr) -> t.State: pass -def vqt6_qmainwindow_central_widget(mw: QtMainWindowPtr) -> QtWidgetPtr | t.State: pass -def vqt6_qmainwindow_menu_bar(mw: QtMainWindowPtr) -> QtMenuBarPtr | t.State: pass -def vqt6_qmainwindow_set_menu_bar(mw: QtMainWindowPtr, menubar: QtMenuBarPtr) -> t.State: pass -def vqt6_qmainwindow_status_bar(mw: QtMainWindowPtr) -> QtStatusBarPtr | t.State: pass -def vqt6_qmainwindow_set_status_bar(mw: QtMainWindowPtr, statusbar: QtStatusBarPtr) -> t.State: pass -def vqt6_qmainwindow_add_tool_bar(mw: QtMainWindowPtr, toolbar: QtToolBarPtr) -> t.State: pass -def vqt6_qmainwindow_add_tool_bar_break(mw: QtMainWindowPtr) -> t.State: pass - - -# ============================================================ -# QLabel — 标签 -# ============================================================ -def vqt6_qlabel_create() -> QtLabelPtr | t.State: pass -def vqt6_qlabel_create_with_text(text: QtStringPtr) -> QtLabelPtr | t.State: pass -def vqt6_qlabel_create_with_text_parent(text: QtStringPtr, parent: QtWidgetPtr) -> QtLabelPtr | t.State: pass -def vqt6_qlabel_set_text(label: QtLabelPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qlabel_text(label: QtLabelPtr) -> QtStringPtr | t.State: pass -def vqt6_qlabel_set_alignment(label: QtLabelPtr, alignment: t.CInt) -> t.State: pass -def vqt6_qlabel_alignment(label: QtLabelPtr) -> t.CInt | t.State: pass -def vqt6_qlabel_set_pixmap(label: QtLabelPtr, pixmap: QtPixmapPtr) -> t.State: pass -def vqt6_qlabel_pixmap(label: QtLabelPtr) -> QtPixmapPtr | t.State: pass -def vqt6_qlabel_set_indent(label: QtLabelPtr, indent: t.CInt) -> t.State: pass -def vqt6_qlabel_set_margin(label: QtLabelPtr, margin: t.CInt) -> t.State: pass -def vqt6_qlabel_set_word_wrap(label: QtLabelPtr, wrap: t.CInt) -> t.State: pass -def vqt6_qlabel_word_wrap(label: QtLabelPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QPushButton — 按钮 -# ============================================================ -def vqt6_qpushbutton_create() -> QtPushButtonPtr | t.State: pass -def vqt6_qpushbutton_create_with_text(text: QtStringPtr) -> QtPushButtonPtr | t.State: pass -def vqt6_qpushbutton_create_with_text_parent(text: QtStringPtr, parent: QtWidgetPtr) -> QtPushButtonPtr | t.State: pass -def vqt6_qpushbutton_set_text(btn: QtPushButtonPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qpushbutton_text(btn: QtPushButtonPtr) -> QtStringPtr | t.State: pass -def vqt6_qpushbutton_set_icon(btn: QtPushButtonPtr, icon: QtIconPtr) -> t.State: pass -def vqt6_qpushbutton_icon(btn: QtPushButtonPtr) -> QtIconPtr | t.State: pass -def vqt6_qpushbutton_set_default(btn: QtPushButtonPtr, is_default: t.CInt) -> t.State: pass -def vqt6_qpushbutton_is_default(btn: QtPushButtonPtr) -> t.CInt | t.State: pass -def vqt6_qpushbutton_set_flat(btn: QtPushButtonPtr, flat: t.CInt) -> t.State: pass -def vqt6_qpushbutton_is_flat(btn: QtPushButtonPtr) -> t.CInt | t.State: pass -def vqt6_qpushbutton_set_checkable(btn: QtPushButtonPtr, checkable: t.CInt) -> t.State: pass -def vqt6_qpushbutton_is_checkable(btn: QtPushButtonPtr) -> t.CInt | t.State: pass -def vqt6_qpushbutton_set_checked(btn: QtPushButtonPtr, checked: t.CInt) -> t.State: pass -def vqt6_qpushbutton_is_checked(btn: QtPushButtonPtr) -> t.CInt | t.State: pass -def vqt6_qpushbutton_click(btn: QtPushButtonPtr) -> t.State: pass - - -# ============================================================ -# QLineEdit — 单行输入框 -# ============================================================ -def vqt6_qlineedit_create() -> QtLineEditPtr | t.State: pass -def vqt6_qlineedit_create_with_text(text: QtStringPtr) -> QtLineEditPtr | t.State: pass -def vqt6_qlineedit_create_with_text_parent(text: QtStringPtr, parent: QtWidgetPtr) -> QtLineEditPtr | t.State: pass -def vqt6_qlineedit_text(le: QtLineEditPtr) -> QtStringPtr | t.State: pass -def vqt6_qlineedit_set_text(le: QtLineEditPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qlineedit_placeholder_text(le: QtLineEditPtr) -> QtStringPtr | t.State: pass -def vqt6_qlineedit_set_placeholder_text(le: QtLineEditPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qlineedit_set_max_length(le: QtLineEditPtr, max: t.CInt) -> t.State: pass -def vqt6_qlineedit_max_length(le: QtLineEditPtr) -> t.CInt | t.State: pass -def vqt6_qlineedit_set_read_only(le: QtLineEditPtr, ro: t.CInt) -> t.State: pass -def vqt6_qlineedit_is_read_only(le: QtLineEditPtr) -> t.CInt | t.State: pass -def vqt6_qlineedit_set_echo_mode(le: QtLineEditPtr, mode: t.CInt) -> t.State: pass -def vqt6_qlineedit_echo_mode(le: QtLineEditPtr) -> t.CInt | t.State: pass -def vqt6_qlineedit_select_all(le: QtLineEditPtr) -> t.State: pass -def vqt6_qlineedit_clear(le: QtLineEditPtr) -> t.State: pass - - -# ============================================================ -# QTextEdit / QPlainTextEdit — 多行文本编辑器 -# ============================================================ -def vqt6_qtextedit_create() -> QtTextEditPtr | t.State: pass -def vqt6_qtextedit_create_with_parent(parent: QtWidgetPtr) -> QtTextEditPtr | t.State: pass -def vqt6_qtextedit_to_plain_text(te: QtTextEditPtr) -> QtStringPtr | t.State: pass -def vqt6_qtextedit_set_plain_text(te: QtTextEditPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qtextedit_set_html(te: QtTextEditPtr, html: QtStringPtr) -> t.State: pass -def vqt6_qtextedit_to_html(te: QtTextEditPtr) -> QtStringPtr | t.State: pass -def vqt6_qtextedit_append(te: QtTextEditPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qtextedit_clear(te: QtTextEditPtr) -> t.State: pass -def vqt6_qtextedit_set_read_only(te: QtTextEditPtr, ro: t.CInt) -> t.State: pass -def vqt6_qtextedit_is_read_only(te: QtTextEditPtr) -> t.CInt | t.State: pass - -def vqt6_qplaintextedit_create() -> QtPlainTextEditPtr | t.State: pass -def vqt6_qplaintextedit_create_with_parent(parent: QtWidgetPtr) -> QtPlainTextEditPtr | t.State: pass -def vqt6_qplaintextedit_to_plain_text(pte: QtPlainTextEditPtr) -> QtStringPtr | t.State: pass -def vqt6_qplaintextedit_set_plain_text(pte: QtPlainTextEditPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qplaintextedit_append(pte: QtPlainTextEditPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qplaintextedit_clear(pte: QtPlainTextEditPtr) -> t.State: pass -def vqt6_qplaintextedit_set_read_only(pte: QtPlainTextEditPtr, ro: t.CInt) -> t.State: pass -def vqt6_qplaintextedit_line_count(pte: QtPlainTextEditPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QCheckBox / QRadioButton — 复选/单选 -# ============================================================ -def vqt6_qcheckbox_create() -> QtCheckBoxPtr | t.State: pass -def vqt6_qcheckbox_create_with_text(text: QtStringPtr) -> QtCheckBoxPtr | t.State: pass -def vqt6_qcheckbox_create_with_text_parent(text: QtStringPtr, parent: QtWidgetPtr) -> QtCheckBoxPtr | t.State: pass -def vqt6_qcheckbox_set_checked(cb: QtCheckBoxPtr, checked: t.CInt) -> t.State: pass -def vqt6_qcheckbox_is_checked(cb: QtCheckBoxPtr) -> t.CInt | t.State: pass -def vqt6_qcheckbox_set_text(cb: QtCheckBoxPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qcheckbox_text(cb: QtCheckBoxPtr) -> QtStringPtr | t.State: pass -def vqt6_qcheckbox_set_tristate(cb: QtCheckBoxPtr, tristate: t.CInt) -> t.State: pass -def vqt6_qcheckbox_is_tristate(cb: QtCheckBoxPtr) -> t.CInt | t.State: pass - -def vqt6_qradiobutton_create() -> QtRadioButtonPtr | t.State: pass -def vqt6_qradiobutton_create_with_text(text: QtStringPtr) -> QtRadioButtonPtr | t.State: pass -def vqt6_qradiobutton_create_with_text_parent(text: QtStringPtr, parent: QtWidgetPtr) -> QtRadioButtonPtr | t.State: pass -def vqt6_qradiobutton_set_checked(rb: QtRadioButtonPtr, checked: t.CInt) -> t.State: pass -def vqt6_qradiobutton_is_checked(rb: QtRadioButtonPtr) -> t.CInt | t.State: pass -def vqt6_qradiobutton_set_text(rb: QtRadioButtonPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qradiobutton_text(rb: QtRadioButtonPtr) -> QtStringPtr | t.State: pass - - -# ============================================================ -# QComboBox — 下拉框 -# ============================================================ -def vqt6_qcombobox_create() -> QtComboBoxPtr | t.State: pass -def vqt6_qcombobox_create_with_parent(parent: QtWidgetPtr) -> QtComboBoxPtr | t.State: pass -def vqt6_qcombobox_add_item(cb: QtComboBoxPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qcombobox_add_items(cb: QtComboBoxPtr, items: QtStringListPtr) -> t.State: pass -def vqt6_qcombobox_insert_item(cb: QtComboBoxPtr, index: t.CInt, text: QtStringPtr) -> t.State: pass -def vqt6_qcombobox_remove_item(cb: QtComboBoxPtr, index: t.CInt) -> t.State: pass -def vqt6_qcombobox_clear(cb: QtComboBoxPtr) -> t.State: pass -def vqt6_qcombobox_count(cb: QtComboBoxPtr) -> t.CInt | t.State: pass -def vqt6_qcombobox_current_index(cb: QtComboBoxPtr) -> t.CInt | t.State: pass -def vqt6_qcombobox_set_current_index(cb: QtComboBoxPtr, index: t.CInt) -> t.State: pass -def vqt6_qcombobox_current_text(cb: QtComboBoxPtr) -> QtStringPtr | t.State: pass -def vqt6_qcombobox_item_text(cb: QtComboBoxPtr, index: t.CInt) -> QtStringPtr | t.State: pass -def vqt6_qcombobox_set_editable(cb: QtComboBoxPtr, editable: t.CInt) -> t.State: pass -def vqt6_qcombobox_is_editable(cb: QtComboBoxPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QListWidget — 列表控件 -# ============================================================ -def vqt6_qlistwidget_create() -> QtListWidgetPtr | t.State: pass -def vqt6_qlistwidget_create_with_parent(parent: QtWidgetPtr) -> QtListWidgetPtr | t.State: pass -def vqt6_qlistwidget_add_item(lw: QtListWidgetPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qlistwidget_add_items(lw: QtListWidgetPtr, items: QtStringListPtr) -> t.State: pass -def vqt6_qlistwidget_insert_item(lw: QtListWidgetPtr, row: t.CInt, text: QtStringPtr) -> t.State: pass -def vqt6_qlistwidget_remove_item_widget(lw: QtListWidgetPtr, row: t.CInt) -> t.State: pass -def vqt6_qlistwidget_take_item(lw: QtListWidgetPtr, row: t.CInt) -> QtListWidgetItemPtr | t.State: pass -def vqt6_qlistwidget_clear(lw: QtListWidgetPtr) -> t.State: pass -def vqt6_qlistwidget_count(lw: QtListWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qlistwidget_current_row(lw: QtListWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qlistwidget_set_current_row(lw: QtListWidgetPtr, row: t.CInt) -> t.State: pass -def vqt6_qlistwidget_current_item_text(lw: QtListWidgetPtr) -> QtStringPtr | t.State: pass -def vqt6_qlistwidget_item_text(lw: QtListWidgetPtr, row: t.CInt) -> QtStringPtr | t.State: pass -def vqt6_qlistwidget_set_item_text(lw: QtListWidgetPtr, row: t.CInt, text: QtStringPtr) -> t.State: pass - - -# ============================================================ -# QProgressBar — 进度条 -# ============================================================ -def vqt6_qprogressbar_create() -> QtProgressBarPtr | t.State: pass -def vqt6_qprogressbar_create_with_parent(parent: QtWidgetPtr) -> QtProgressBarPtr | t.State: pass -def vqt6_qprogressbar_set_value(pb: QtProgressBarPtr, value: t.CInt) -> t.State: pass -def vqt6_qprogressbar_value(pb: QtProgressBarPtr) -> t.CInt | t.State: pass -def vqt6_qprogressbar_set_minimum(pb: QtProgressBarPtr, min: t.CInt) -> t.State: pass -def vqt6_qprogressbar_set_maximum(pb: QtProgressBarPtr, max: t.CInt) -> t.State: pass -def vqt6_qprogressbar_set_range(pb: QtProgressBarPtr, min: t.CInt, max: t.CInt) -> t.State: pass -def vqt6_qprogressbar_minimum(pb: QtProgressBarPtr) -> t.CInt | t.State: pass -def vqt6_qprogressbar_maximum(pb: QtProgressBarPtr) -> t.CInt | t.State: pass -def vqt6_qprogressbar_set_text_visible(pb: QtProgressBarPtr, visible: t.CInt) -> t.State: pass -def vqt6_qprogressbar_set_format(pb: QtProgressBarPtr, format: QtStringPtr) -> t.State: pass -def vqt6_qprogressbar_reset(pb: QtProgressBarPtr) -> t.State: pass - - -# ============================================================ -# QSlider — 滑块 -# ============================================================ -def vqt6_qslider_create() -> QtSliderPtr | t.State: pass -def vqt6_qslider_create_with_orientation(orientation: t.CInt) -> QtSliderPtr | t.State: pass -def vqt6_qslider_create_with_orientation_parent(orientation: t.CInt, parent: QtWidgetPtr) -> QtSliderPtr | t.State: pass -def vqt6_qslider_set_value(s: QtSliderPtr, value: t.CInt) -> t.State: pass -def vqt6_qslider_value(s: QtSliderPtr) -> t.CInt | t.State: pass -def vqt6_qslider_set_minimum(s: QtSliderPtr, min: t.CInt) -> t.State: pass -def vqt6_qslider_set_maximum(s: QtSliderPtr, max: t.CInt) -> t.State: pass -def vqt6_qslider_set_range(s: QtSliderPtr, min: t.CInt, max: t.CInt) -> t.State: pass -def vqt6_qslider_set_orientation(s: QtSliderPtr, orientation: t.CInt) -> t.State: pass -def vqt6_qslider_orientation(s: QtSliderPtr) -> t.CInt | t.State: pass -def vqt6_qslider_set_single_step(s: QtSliderPtr, step: t.CInt) -> t.State: pass -def vqt6_qslider_set_page_step(s: QtSliderPtr, step: t.CInt) -> t.State: pass - - -# ============================================================ -# QSpinBox — 数字输入框 -# ============================================================ -def vqt6_qspinbox_create() -> QtSpinBoxPtr | t.State: pass -def vqt6_qspinbox_create_with_parent(parent: QtWidgetPtr) -> QtSpinBoxPtr | t.State: pass -def vqt6_qspinbox_value(sb: QtSpinBoxPtr) -> t.CInt | t.State: pass -def vqt6_qspinbox_set_value(sb: QtSpinBoxPtr, value: t.CInt) -> t.State: pass -def vqt6_qspinbox_set_minimum(sb: QtSpinBoxPtr, min: t.CInt) -> t.State: pass -def vqt6_qspinbox_set_maximum(sb: QtSpinBoxPtr, max: t.CInt) -> t.State: pass -def vqt6_qspinbox_set_range(sb: QtSpinBoxPtr, min: t.CInt, max: t.CInt) -> t.State: pass -def vqt6_qspinbox_minimum(sb: QtSpinBoxPtr) -> t.CInt | t.State: pass -def vqt6_qspinbox_maximum(sb: QtSpinBoxPtr) -> t.CInt | t.State: pass -def vqt6_qspinbox_set_single_step(sb: QtSpinBoxPtr, step: t.CInt) -> t.State: pass -def vqt6_qspinbox_set_prefix(sb: QtSpinBoxPtr, prefix: QtStringPtr) -> t.State: pass -def vqt6_qspinbox_set_suffix(sb: QtSpinBoxPtr, suffix: QtStringPtr) -> t.State: pass -def vqt6_qspinbox_prefix(sb: QtSpinBoxPtr) -> QtStringPtr | t.State: pass -def vqt6_qspinbox_suffix(sb: QtSpinBoxPtr) -> QtStringPtr | t.State: pass - - -# ============================================================ -# 布局 - QLayout / QBoxLayout / QGridLayout / QFormLayout -# ============================================================ -def vqt6_qlayout_add_widget(layout: QtLayoutPtr, widget: QtWidgetPtr) -> t.State: pass -def vqt6_qlayout_remove_widget(layout: QtLayoutPtr, widget: QtWidgetPtr) -> t.State: pass -def vqt6_qlayout_count(layout: QtLayoutPtr) -> t.CInt | t.State: pass -def vqt6_qlayout_item_at(layout: QtLayoutPtr, index: t.CInt) -> QtWidgetPtr | t.State: pass -def vqt6_qlayout_set_contents_margins(layout: QtLayoutPtr, left: t.CInt, top: t.CInt, right: t.CInt, bottom: t.CInt) -> t.State: pass -def vqt6_qlayout_set_spacing(layout: QtLayoutPtr, spacing: t.CInt) -> t.State: pass -def vqt6_qlayout_spacing(layout: QtLayoutPtr) -> t.CInt | t.State: pass -def vqt6_qlayout_invalidate(layout: QtLayoutPtr) -> t.State: pass - -# QHBoxLayout -def vqt6_qhboxlayout_create() -> QtBoxLayoutPtr | t.State: pass -def vqt6_qhboxlayout_create_with_parent(parent: QtWidgetPtr) -> QtBoxLayoutPtr | t.State: pass -def vqt6_qhboxlayout_add_layout(layout: QtBoxLayoutPtr, child: QtLayoutPtr) -> t.State: pass -def vqt6_qhboxlayout_add_stretch(layout: QtBoxLayoutPtr, stretch: t.CInt) -> t.State: pass -def vqt6_qhboxlayout_add_spacing(layout: QtBoxLayoutPtr, size: t.CInt) -> t.State: pass - -# QVBoxLayout -def vqt6_qvboxlayout_create() -> QtBoxLayoutPtr | t.State: pass -def vqt6_qvboxlayout_create_with_parent(parent: QtWidgetPtr) -> QtBoxLayoutPtr | t.State: pass -def vqt6_qvboxlayout_add_layout(layout: QtBoxLayoutPtr, child: QtLayoutPtr) -> t.State: pass -def vqt6_qvboxlayout_add_stretch(layout: QtBoxLayoutPtr, stretch: t.CInt) -> t.State: pass -def vqt6_qvboxlayout_add_spacing(layout: QtBoxLayoutPtr, size: t.CInt) -> t.State: pass - -# QGridLayout -def vqt6_qgridlayout_create() -> QtGridLayoutPtr | t.State: pass -def vqt6_qgridlayout_create_with_parent(parent: QtWidgetPtr) -> QtGridLayoutPtr | t.State: pass -def vqt6_qgridlayout_add_widget(gl: QtGridLayoutPtr, w: QtWidgetPtr, row: t.CInt, col: t.CInt) -> t.State: pass -def vqt6_qgridlayout_add_widget_with_span(gl: QtGridLayoutPtr, w: QtWidgetPtr, row: t.CInt, col: t.CInt, row_span: t.CInt, col_span: t.CInt) -> t.State: pass - -# QFormLayout -def vqt6_qformlayout_create() -> QtFormLayoutPtr | t.State: pass -def vqt6_qformlayout_create_with_parent(parent: QtWidgetPtr) -> QtFormLayoutPtr | t.State: pass -def vqt6_qformlayout_add_row(fl: QtFormLayoutPtr, label: QtStringPtr, field: QtWidgetPtr) -> t.State: pass -def vqt6_qformlayout_add_row_widget_pair(fl: QtFormLayoutPtr, label: QtWidgetPtr, field: QtWidgetPtr) -> t.State: pass - - -# ============================================================ -# QStackedWidget / QTabWidget -# ============================================================ -def vqt6_qstackedwidget_create() -> QtStackedWidgetPtr | t.State: pass -def vqt6_qstackedwidget_create_with_parent(parent: QtWidgetPtr) -> QtStackedWidgetPtr | t.State: pass -def vqt6_qstackedwidget_add_widget(sw: QtStackedWidgetPtr, w: QtWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qstackedwidget_remove_widget(sw: QtStackedWidgetPtr, w: QtWidgetPtr) -> t.State: pass -def vqt6_qstackedwidget_count(sw: QtStackedWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qstackedwidget_current_index(sw: QtStackedWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qstackedwidget_set_current_index(sw: QtStackedWidgetPtr, index: t.CInt) -> t.State: pass -def vqt6_qstackedwidget_current_widget(sw: QtStackedWidgetPtr) -> QtWidgetPtr | t.State: pass -def vqt6_qstackedwidget_widget(sw: QtStackedWidgetPtr, index: t.CInt) -> QtWidgetPtr | t.State: pass - -def vqt6_qtabwidget_create() -> QtTabWidgetPtr | t.State: pass -def vqt6_qtabwidget_create_with_parent(parent: QtWidgetPtr) -> QtTabWidgetPtr | t.State: pass -def vqt6_qtabwidget_add_tab(tw: QtTabWidgetPtr, w: QtWidgetPtr, label: QtStringPtr) -> t.CInt | t.State: pass -def vqt6_qtabwidget_insert_tab(tw: QtTabWidgetPtr, index: t.CInt, w: QtWidgetPtr, label: QtStringPtr) -> t.CInt | t.State: pass -def vqt6_qtabwidget_remove_tab(tw: QtTabWidgetPtr, index: t.CInt) -> t.State: pass -def vqt6_qtabwidget_count(tw: QtTabWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qtabwidget_current_index(tw: QtTabWidgetPtr) -> t.CInt | t.State: pass -def vqt6_qtabwidget_set_current_index(tw: QtTabWidgetPtr, index: t.CInt) -> t.State: pass -def vqt6_qtabwidget_tab_text(tw: QtTabWidgetPtr, index: t.CInt) -> QtStringPtr | t.State: pass -def vqt6_qtabwidget_set_tab_text(tw: QtTabWidgetPtr, index: t.CInt, text: QtStringPtr) -> t.State: pass -def vqt6_qtabwidget_set_tabs_closable(tw: QtTabWidgetPtr, closable: t.CInt) -> t.State: pass -def vqt6_qtabwidget_tabs_closable(tw: QtTabWidgetPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QMenuBar / QMenu / QAction -# ============================================================ -def vqt6_qmenubar_create() -> QtMenuBarPtr | t.State: pass -def vqt6_qmenubar_create_with_parent(parent: QtWidgetPtr) -> QtMenuBarPtr | t.State: pass -def vqt6_qmenubar_add_menu(mb: QtMenuBarPtr, title: QtStringPtr) -> QtMenuPtr | t.State: pass -def vqt6_qmenubar_add_menu_with_menu(mb: QtMenuBarPtr, menu: QtMenuPtr) -> t.State: pass -def vqt6_qmenubar_add_action(mb: QtMenuBarPtr, action: QtActionPtr) -> t.State: pass -def vqt6_qmenubar_clear(mb: QtMenuBarPtr) -> t.State: pass - -def vqt6_qmenu_create() -> QtMenuPtr | t.State: pass -def vqt6_qmenu_create_with_title(title: QtStringPtr) -> QtMenuPtr | t.State: pass -def vqt6_qmenu_create_with_title_parent(title: QtStringPtr, parent: QtWidgetPtr) -> QtMenuPtr | t.State: pass -def vqt6_qmenu_add_menu(menu: QtMenuPtr, title: QtStringPtr) -> QtMenuPtr | t.State: pass -def vqt6_qmenu_add_action(menu: QtMenuPtr, action: QtActionPtr) -> t.State: pass -def vqt6_qmenu_add_separator(menu: QtMenuPtr) -> t.State: pass -def vqt6_qmenu_clear(menu: QtMenuPtr) -> t.State: pass -def vqt6_qmenu_set_title(menu: QtMenuPtr, title: QtStringPtr) -> t.State: pass -def vqt6_qmenu_title(menu: QtMenuPtr) -> QtStringPtr | t.State: pass -def vqt6_qmenu_add_action_with_text(menu: QtMenuPtr, text: QtStringPtr) -> QtActionPtr | t.State: pass - -def vqt6_qaction_create() -> QtActionPtr | t.State: pass -def vqt6_qaction_create_with_text(text: QtStringPtr) -> QtActionPtr | t.State: pass -def vqt6_qaction_create_with_text_parent(text: QtStringPtr, parent: QtWidgetPtr) -> QtActionPtr | t.State: pass -def vqt6_qaction_set_text(action: QtActionPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qaction_text(action: QtActionPtr) -> QtStringPtr | t.State: pass -def vqt6_qaction_set_icon(action: QtActionPtr, icon: QtIconPtr) -> t.State: pass -def vqt6_qaction_icon(action: QtActionPtr) -> QtIconPtr | t.State: pass -def vqt6_qaction_set_shortcut(action: QtActionPtr, key_sequence: QtStringPtr) -> t.State: pass -def vqt6_qaction_shortcut(action: QtActionPtr) -> QtStringPtr | t.State: pass -def vqt6_qaction_set_checkable(action: QtActionPtr, checkable: t.CInt) -> t.State: pass -def vqt6_qaction_is_checkable(action: QtActionPtr) -> t.CInt | t.State: pass -def vqt6_qaction_set_checked(action: QtActionPtr, checked: t.CInt) -> t.State: pass -def vqt6_qaction_is_checked(action: QtActionPtr) -> t.CInt | t.State: pass -def vqt6_qaction_set_enabled(action: QtActionPtr, enabled: t.CInt) -> t.State: pass -def vqt6_qaction_is_enabled(action: QtActionPtr) -> t.CInt | t.State: pass -def vqt6_qaction_trigger(action: QtActionPtr) -> t.State: pass - - -# ============================================================ -# QStatusBar / QToolBar -# ============================================================ -def vqt6_qstatusbar_create() -> QtStatusBarPtr | t.State: pass -def vqt6_qstatusbar_create_with_parent(parent: QtWidgetPtr) -> QtStatusBarPtr | t.State: pass -def vqt6_qstatusbar_show_message(sb: QtStatusBarPtr, message: QtStringPtr, timeout_ms: t.CInt) -> t.State: pass -def vqt6_qstatusbar_clear_message(sb: QtStatusBarPtr) -> t.State: pass -def vqt6_qstatusbar_current_message(sb: QtStatusBarPtr) -> QtStringPtr | t.State: pass -def vqt6_qstatusbar_add_widget(sb: QtStatusBarPtr, w: QtWidgetPtr, stretch: t.CInt) -> t.State: pass -def vqt6_qstatusbar_add_permanent_widget(sb: QtStatusBarPtr, w: QtWidgetPtr, stretch: t.CInt) -> t.State: pass - -def vqt6_qtoolbar_create() -> QtToolBarPtr | t.State: pass -def vqt6_qtoolbar_create_with_parent(parent: QtWidgetPtr) -> QtToolBarPtr | t.State: pass -def vqt6_qtoolbar_add_widget(tb: QtToolBarPtr, w: QtWidgetPtr) -> QtActionPtr | t.State: pass -def vqt6_qtoolbar_add_action(tb: QtToolBarPtr, action: QtActionPtr) -> t.State: pass -def vqt6_qtoolbar_add_separator(tb: QtToolBarPtr) -> t.State: pass -def vqt6_qtoolbar_set_icon_size(tb: QtToolBarPtr, w: t.CInt, h: t.CInt) -> t.State: pass -def vqt6_qtoolbar_set_orientation(tb: QtToolBarPtr, orientation: t.CInt) -> t.State: pass -def vqt6_qtoolbar_orientation(tb: QtToolBarPtr) -> t.CInt | t.State: pass - - -# ============================================================ -# QMessageBox — 消息对话框(静态方法) -# ============================================================ -def vqt6_qmessagebox_information(parent: QtWidgetPtr, title: QtStringPtr, text: QtStringPtr, buttons: t.CInt) -> t.CInt | t.State: pass -def vqt6_qmessagebox_warning(parent: QtWidgetPtr, title: QtStringPtr, text: QtStringPtr, buttons: t.CInt) -> t.CInt | t.State: pass -def vqt6_qmessagebox_critical(parent: QtWidgetPtr, title: QtStringPtr, text: QtStringPtr, buttons: t.CInt) -> t.CInt | t.State: pass -def vqt6_qmessagebox_question(parent: QtWidgetPtr, title: QtStringPtr, text: QtStringPtr, buttons: t.CInt) -> t.CInt | t.State: pass -def vqt6_qmessagebox_about(parent: QtWidgetPtr, title: QtStringPtr, text: QtStringPtr) -> t.State: pass -def vqt6_qmessagebox_about_qt(parent: QtWidgetPtr) -> t.State: pass - - -# ============================================================ -# QFileDialog — 文件选择对话框(静态方法) -# ============================================================ -def vqt6_qfiledialog_get_open_file_name(parent: QtWidgetPtr, caption: QtStringPtr, dir: QtStringPtr, filter: QtStringPtr) -> QtStringPtr | t.State: pass -def vqt6_qfiledialog_get_save_file_name(parent: QtWidgetPtr, caption: QtStringPtr, dir: QtStringPtr, filter: QtStringPtr) -> QtStringPtr | t.State: pass -def vqt6_qfiledialog_get_existing_directory(parent: QtWidgetPtr, caption: QtStringPtr, dir: QtStringPtr) -> QtStringPtr | t.State: pass -def vqt6_qfiledialog_get_open_file_names(parent: QtWidgetPtr, caption: QtStringPtr, dir: QtStringPtr, filter: QtStringPtr) -> QtStringListPtr | t.State: pass - - -# ============================================================ -# QColorDialog / QFontDialog / QInputDialog — 各种对话框 -# ============================================================ -def vqt6_qcolordialog_get_color(initial: QtColorPtr, parent: QtWidgetPtr, title: QtStringPtr) -> QtColorPtr | t.State: pass -def vqt6_qfontdialog_get_font(initial: QtFontPtr, parent: QtWidgetPtr, title: QtStringPtr) -> QtFontPtr | t.State: pass -def vqt6_qinputdialog_get_text(parent: QtWidgetPtr, title: QtStringPtr, label: QtStringPtr, echo_mode: t.CInt, text: QtStringPtr, ok_pressed: t.CInt | t.CPtr) -> QtStringPtr | t.State: pass -def vqt6_qinputdialog_get_int(parent: QtWidgetPtr, title: QtStringPtr, label: QtStringPtr, value: t.CInt, min_val: t.CInt, max_val: t.CInt, step: t.CInt, ok_pressed: t.CInt | t.CPtr) -> t.CInt | t.State: pass -def vqt6_qinputdialog_get_double(parent: QtWidgetPtr, title: QtStringPtr, label: QtStringPtr, value: t.CDouble, min_val: t.CDouble, max_val: t.CDouble, decimals: t.CInt, ok_pressed: t.CInt | t.CPtr) -> t.CDouble | t.State: pass -def vqt6_qinputdialog_get_item(parent: QtWidgetPtr, title: QtStringPtr, label: QtStringPtr, items: QtStringListPtr, current: t.CInt, editable: t.CInt, ok_pressed: t.CInt | t.CPtr) -> QtStringPtr | t.State: pass diff --git a/vqt6 copy/_types.vp b/vqt6 copy/_types.vp deleted file mode 100644 index 86d1fe5..0000000 --- a/vqt6 copy/_types.vp +++ /dev/null @@ -1,186 +0,0 @@ -import t -from stdint import * - -# ============================================================ -# vqt6/_types.py — 公共类型定义 -# -# Qt6 C++ 类在 Viper 端都是不透明指针 (void*) -# 不暴露 C++ 类的内部布局,只暴露指针 -# ============================================================ - -# 不透明指针 typedef(Qt6 C++ 类的 Viper 端表示) -QtObjectPtr: t.CTypedef = t.CVoid | t.CPtr # void* 通用不透明指针 -QtStringPtr: t.CTypedef = t.CVoid | t.CPtr # QString* -QtByteArrayPtr: t.CTypedef = t.CVoid | t.CPtr # QByteArray* -QtVariantPtr: t.CTypedef = t.CVoid | t.CPtr # QVariant* -QtObjectListPtr: t.CTypedef = t.CVoid | t.CPtr # QList* -QtStringListPtr: t.CTypedef = t.CVoid | t.CPtr # QStringList* -QtByteArrayListPtr: t.CTypedef = t.CVoid | t.CPtr # QList* -QtEventPtr: t.CTypedef = t.CVoid | t.CPtr # QEvent* - -# QtCore -QtCoreAppPtr: t.CTypedef = t.CVoid | t.CPtr # QCoreApplication* -QtTimerPtr: t.CTypedef = t.CVoid | t.CPtr # QTimer* -QtObjectPtr: t.CTypedef = t.CVoid | t.CPtr # QObject* -QtThreadPtr: t.CTypedef = t.CVoid | t.CPtr # QThread* -QtMutexPtr: t.CTypedef = t.CVoid | t.CPtr # QMutex* -QtWaitConditionPtr: t.CTypedef = t.CVoid | t.CPtr # QWaitCondition* - -# QtGui -QtColorPtr: t.CTypedef = t.CVoid | t.CPtr # QColor* -QtFontPtr: t.CTypedef = t.CVoid | t.CPtr # QFont* -QtFontMetricsPtr: t.CTypedef = t.CVoid | t.CPtr # QFontMetrics* -QtPixmapPtr: t.CTypedef = t.CVoid | t.CPtr # QPixmap* -QtImagePtr: t.CTypedef = t.CVoid | t.CPtr # QImage* -QtPainterPtr: t.CTypedef = t.CVoid | t.CPtr # QPainter* -QtPenPtr: t.CTypedef = t.CVoid | t.CPtr # QPen* -QtBrushPtr: t.CTypedef = t.CVoid | t.CPtr # QBrush* -QtIconPtr: t.CTypedef = t.CVoid | t.CPtr # QIcon* -QtKeyEventPtr: t.CTypedef = t.CVoid | t.CPtr # QKeyEvent* -QtMouseEventPtr: t.CTypedef = t.CVoid | t.CPtr # QMouseEvent* -QtResizeEventPtr: t.CTypedef = t.CVoid | t.CPtr # QResizeEvent* -QtPaintEventPtr: t.CTypedef = t.CVoid | t.CPtr # QPaintEvent* -QtCloseEventPtr: t.CTypedef = t.CVoid | t.CPtr # QCloseEvent* -QtCursorPtr: t.CTypedef = t.CVoid | t.CPtr # QCursor* - -# QtWidgets -QtAppPtr: t.CTypedef = t.CVoid | t.CPtr # QApplication* -QtWidgetPtr: t.CTypedef = t.CVoid | t.CPtr # QWidget* -QtDialogPtr: t.CTypedef = t.CVoid | t.CPtr # QDialog* -QtMainWindowPtr: t.CTypedef = t.CVoid | t.CPtr # QMainWindow* -QtLabelPtr: t.CTypedef = t.CVoid | t.CPtr # QLabel* -QtPushButtonPtr: t.CTypedef = t.CVoid | t.CPtr # QPushButton* -QtLineEditPtr: t.CTypedef = t.CVoid | t.CPtr # QLineEdit* -QtTextEditPtr: t.CTypedef = t.CVoid | t.CPtr # QTextEdit* -QtPlainTextEditPtr: t.CTypedef = t.CVoid | t.CPtr # QPlainTextEdit* -QtCheckBoxPtr: t.CTypedef = t.CVoid | t.CPtr # QCheckBox* -QtRadioButtonPtr: t.CTypedef = t.CVoid | t.CPtr # QRadioButton* -QtComboBoxPtr: t.CTypedef = t.CVoid | t.CPtr # QComboBox* -QtListWidgetPtr: t.CTypedef = t.CVoid | t.CPtr # QListWidget* -QtListWidgetItemPtr: t.CTypedef = t.CVoid | t.CPtr # QListWidgetItem* -QtProgressBarPtr: t.CTypedef = t.CVoid | t.CPtr # QProgressBar* -QtSliderPtr: t.CTypedef = t.CVoid | t.CPtr # QSlider* -QtSpinBoxPtr: t.CTypedef = t.CVoid | t.CPtr # QSpinBox* -QtLayoutPtr: t.CTypedef = t.CVoid | t.CPtr # QLayout* -QtBoxLayoutPtr: t.CTypedef = t.CVoid | t.CPtr # QHBoxLayout / QVBoxLayout* -QtGridLayoutPtr: t.CTypedef = t.CVoid | t.CPtr # QGridLayout* -QtFormLayoutPtr: t.CTypedef = t.CVoid | t.CPtr # QFormLayout* -QtStackedWidgetPtr: t.CTypedef = t.CVoid | t.CPtr # QStackedWidget* -QtTabWidgetPtr: t.CTypedef = t.CVoid | t.CPtr # QTabWidget* -QtMenuBarPtr: t.CTypedef = t.CVoid | t.CPtr # QMenuBar* -QtMenuPtr: t.CTypedef = t.CVoid | t.CPtr # QMenu* -QtActionPtr: t.CTypedef = t.CVoid | t.CPtr # QAction* -QtStatusBarPtr: t.CTypedef = t.CVoid | t.CPtr # QStatusBar* -QtToolBarPtr: t.CTypedef = t.CVoid | t.CPtr # QToolBar* -QtMessageBoxPtr: t.CTypedef = t.CVoid | t.CPtr # QMessageBox* -QtFileDialogPtr: t.CTypedef = t.CVoid | t.CPtr # QFileDialog* -QtColorDialogPtr: t.CTypedef = t.CVoid | t.CPtr # QColorDialog* -QtFontDialogPtr: t.CTypedef = t.CVoid | t.CPtr # QFontDialog* -QtInputDialogPtr: t.CTypedef = t.CVoid | t.CPtr # QInputDialog* - -# QtNetwork -QtTcpSocketPtr: t.CTypedef = t.CVoid | t.CPtr # QTcpSocket* -QtUdpSocketPtr: t.CTypedef = t.CVoid | t.CPtr # QUdpSocket* -QtHostAddressPtr: t.CTypedef = t.CVoid | t.CPtr # QHostAddress* -QtAbstractSocketPtr: t.CTypedef = t.CVoid | t.CPtr # QAbstractSocket* -QtNetworkAccessManagerPtr: t.CTypedef = t.CVoid | t.CPtr # QNetworkAccessManager* -QtNetworkReplyPtr: t.CTypedef = t.CVoid | t.CPtr # QNetworkReply* -QtNetworkRequestPtr: t.CTypedef = t.CVoid | t.CPtr # QNetworkRequest* - -# ============================================================ -# Qt 通用常量(C++ 枚举值的 C 兼容定义) -# ============================================================ - -# Qt 键盘按键 (Qt::Key) -QT_KEY_ESCAPE: t.CDefine = 0x01000000 -QT_KEY_TAB: t.CDefine = 0x01000001 -QT_KEY_BACKTAB: t.CDefine = 0x01000002 -QT_KEY_BACKSPACE: t.CDefine = 0x01000003 -QT_KEY_RETURN: t.CDefine = 0x01000004 -QT_KEY_ENTER: t.CDefine = 0x01000005 -QT_KEY_INSERT: t.CDefine = 0x01000006 -QT_KEY_DELETE: t.CDefine = 0x01000007 -QT_KEY_PAUSE: t.CDefine = 0x01000008 -QT_KEY_PRINT: t.CDefine = 0x01000009 -QT_KEY_HOME: t.CDefine = 0x01000010 -QT_KEY_END: t.CDefine = 0x01000011 -QT_KEY_LEFT: t.CDefine = 0x01000012 -QT_KEY_UP: t.CDefine = 0x01000013 -QT_KEY_RIGHT: t.CDefine = 0x01000014 -QT_KEY_DOWN: t.CDefine = 0x01000015 -QT_KEY_PAGEUP: t.CDefine = 0x01000016 -QT_KEY_PAGEDOWN: t.CDefine = 0x01000017 -QT_KEY_SHIFT: t.CDefine = 0x01000020 -QT_KEY_CONTROL: t.CDefine = 0x01000021 -QT_KEY_META: t.CDefine = 0x01000022 -QT_KEY_ALT: t.CDefine = 0x01000023 -QT_KEY_F1: t.CDefine = 0x01000030 -QT_KEY_F2: t.CDefine = 0x01000031 -QT_KEY_F12: t.CDefine = 0x0100003b -QT_KEY_SPACE: t.CDefine = 0x20 -QT_KEY_A: t.CDefine = 0x41 -QT_KEY_Z: t.CDefine = 0x5a -QT_KEY_0: t.CDefine = 0x30 -QT_KEY_9: t.CDefine = 0x39 - -# Qt 鼠标按键 (Qt::MouseButton) -QT_NO_BUTTON: t.CDefine = 0x00000000 -QT_LEFT_BUTTON: t.CDefine = 0x00000001 -QT_RIGHT_BUTTON: t.CDefine = 0x00000002 -QT_MID_BUTTON: t.CDefine = 0x00000004 - -# Qt::AlignmentFlag -QT_ALIGN_LEFT: t.CDefine = 0x0001 -QT_ALIGN_RIGHT: t.CDefine = 0x0002 -QT_ALIGN_HCENTER: t.CDefine = 0x0004 -QT_ALIGN_TOP: t.CDefine = 0x0020 -QT_ALIGN_BOTTOM: t.CDefine = 0x0040 -QT_ALIGN_VCENTER: t.CDefine = 0x0080 -QT_ALIGN_CENTER: t.CDefine = QT_ALIGN_HCENTER | QT_ALIGN_VCENTER - -# Qt::Orientation -QT_HORIZONTAL: t.CDefine = 0x1 -QT_VERTICAL: t.CDefine = 0x2 - -# Qt 焦点 -QT_NO_FOCUS: t.CDefine = 0x00 -QT_TAB_FOCUS: t.CDefine = 0x01 -QT_CLICK_FOCUS: t.CDefine = 0x02 -QT_STRONG_FOCUS: t.CDefine = QT_TAB_FOCUS | QT_CLICK_FOCUS -QT_WHEEL_FOCUS: t.CDefine = 0x04 -QT_ALL_FOCUS: t.CDefine = QT_STRONG_FOCUS | QT_WHEEL_FOCUS - -# Qt::WindowFlag -QT_WINDOW: t.CDefine = 0x00000001 -QT_DIALOG: t.CDefine = 0x00000002 | QT_WINDOW -QT_SHEET: t.CDefine = 0x00000004 | QT_WINDOW -QT_DRAWER: t.CDefine = QT_SHEET | 0x00000008 -QT_POPUP: t.CDefine = 0x00000008 | QT_WINDOW -QT_TOOL: t.CDefine = 0x0000000a | QT_WINDOW -QT_TOOLTIP: t.CDefine = 0x0000000c | QT_WINDOW -QT_SPLASH_SCREEN: t.CDefine = 0x0000000e | QT_WINDOW - -QT_WINDOW_TITLE: t.CDefine = 0x00000001 -QT_WINDOW_SYSTEM_MENU: t.CDefine = 0x00000002 -QT_WINDOW_MIN_MAX_BUTTONS: t.CDefine = 0x00000004 -QT_WINDOW_CLOSE_BUTTON: t.CDefine = 0x08000000 -QT_WINDOW_CONTEXT_HELP_BUTTON: t.CDefine = 0x00000008 - -# QMessageBox 标准按钮 -QT_OK: t.CDefine = 0x00000400 -QT_CANCEL: t.CDefine = 0x00400000 -QT_YES: t.CDefine = 0x00004000 -QT_NO: t.CDefine = 0x00010000 -QT_CLOSE: t.CDefine = 0x00200000 - -# 事件类型 -QT_EVENT_NONE: t.CDefine = 0 -QT_EVENT_KEY: t.CDefine = 6 -QT_EVENT_MOUSE_BUTTON_PRESS: t.CDefine = 2 -QT_EVENT_MOUSE_BUTTON_RELEASE: t.CDefine = 3 -QT_EVENT_MOUSE_MOVE: t.CDefine = 5 -QT_EVENT_PAINT: t.CDefine = 12 -QT_EVENT_RESIZE: t.CDefine = 14 -QT_EVENT_CLOSE: t.CDefine = 19 -QT_EVENT_SHOW: t.CDefine = 17 -QT_EVENT_HIDE: t.CDefine = 18 diff --git a/vqt6/__init__.vp b/vqt6/__init__.vp index 0609092..630510a 100644 --- a/vqt6/__init__.vp +++ b/vqt6/__init__.vp @@ -1044,6 +1044,35 @@ class QListWidget: vqt6_qlistwidget_set_item_text(self._ptr, row, qs) vqt6_qstring_free(qs) + def addBubble(self, text: str, qss: str, right_align: int = 0, + max_bubble_w: int = 420, hpad: int = 28, vpad: int = 16): + """追加一条聊天气泡(微信/QQ 风格,右=自己/左=对方) + + qss: 气泡 QLabel 样式(如 background-color/border-radius/padding) + right_align: 1=右对齐(自己),0=左对齐(对方) + max_bubble_w: 气泡最大宽度(超出自动换行) + hpad: QSS padding 左右合计(用于气泡宽度估算) + vpad: QSS padding 上下合计(用于气泡高度计算,防底部裁切) + """ + tqs: QtStringPtr = vqt6_qstring_create(text) + qqs: QtStringPtr = vqt6_qstring_create(qss) + vqt6_qlistwidget_add_bubble(self._ptr, tqs, qqs, right_align, max_bubble_w, hpad, vpad) + vqt6_qstring_free(qqs) + vqt6_qstring_free(tqs) + + def replaceLastBubble(self, text: str, qss: str, right_align: int = 0, + max_bubble_w: int = 420, hpad: int = 28, vpad: int = 16): + """删除最后一条气泡并按新文本重建(流式回复逐字刷新用,参数同 addBubble)""" + tqs: QtStringPtr = vqt6_qstring_create(text) + qqs: QtStringPtr = vqt6_qstring_create(qss) + vqt6_qlistwidget_replace_last_bubble(self._ptr, tqs, qqs, right_align, + max_bubble_w, hpad, vpad) + vqt6_qstring_free(qqs) + vqt6_qstring_free(tqs) + + def scrollToBottom(self): + vqt6_qlistwidget_scroll_to_bottom(self._ptr) + def currentRowChanged(self, cb: bytes, data: bytes = 0): vqt6_qlistwidget_connect_current_row_changed(self._ptr, cb, data) diff --git a/vqt6/_bridge_widgets.cpp b/vqt6/_bridge_widgets.cpp index 5885e58..52e61ac 100644 --- a/vqt6/_bridge_widgets.cpp +++ b/vqt6/_bridge_widgets.cpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include #include @@ -1348,6 +1350,120 @@ extern "C" VQT6_API void vqt6_qlistwidget_set_item_text(void* lw, int row, void* if (it != nullptr) it->setText(*static_cast(text)); } +// ============================================================ +// 聊天气泡行(QListWidget + setItemWidget 实现,微信/QQ 风格) +// +// 在列表末尾插入一行:透明容器 + QHBoxLayout(右对齐先 addStretch, +// 左对齐后 addStretch),气泡本体是 QLabel(wordWrap + 指定 QSS)。 +// 气泡宽度按文本最长行自动收缩,超过 max_bubble_w 才换行定宽; +// 行高首帧估算 + 事件循环后按真实 heightForWidth 二次修正。 +// replace_last_bubble:删除最后一条后重建(流式回复逐字刷新用)。 +// ============================================================ +static void Vqt6AddBubbleImpl(QListWidget* list, const QString& msg, + const QString& qss, int right_align, + int max_bubble_w, int hpad, int vpad) { + if (list == nullptr) return; + int maxw = max_bubble_w > 0 ? max_bubble_w : 420; + + QWidget* row = new QWidget(list->viewport()); + QHBoxLayout* lay = new QHBoxLayout(row); + lay->setContentsMargins(8, 3, 8, 3); + lay->setSpacing(0); + if (right_align) lay->addStretch(1); + + QLabel* bubble = new QLabel(msg, row); + bubble->setWordWrap(true); + bubble->setTextInteractionFlags(Qt::TextSelectableByMouse); + if (!qss.isEmpty()) bubble->setStyleSheet(qss); + bubble->ensurePolished(); // 让祖先 QSS(如全局 Microsoft YaHei)先生效再测量 + + QFontMetrics fm(bubble->font()); + int textw = 0; + const QStringList lines = msg.split(QLatin1Char('\n')); + for (const QString& line : lines) { + int lw_line = fm.horizontalAdvance(line); + if (lw_line > textw) textw = lw_line; + } + int pad = hpad > 0 ? hpad : 28; // QSS padding 左右合计 + int bubble_w = textw + pad + 6; // +6 兜底边框/圆整误差 + if (bubble_w > maxw) bubble_w = maxw; + bubble->setFixedWidth(bubble_w); + + lay->addWidget(bubble); + if (!right_align) lay->addStretch(1); + + // 初始行高估算(供第一帧,稍后按真实布局修正) + int content_w = bubble_w - pad; + if (content_w < 10) content_w = bubble_w; + int vpad_i = vpad > 0 ? vpad : 16; + QRect text_rect = fm.boundingRect(QRect(0, 0, content_w, 20000), + int(Qt::TextWordWrap), msg); + int est_h = text_rect.height() + vpad_i + 6; + if (est_h < fm.height() + vpad_i + 6) est_h = fm.height() + vpad_i + 6; + + int vw_est = list->viewport()->width(); + if (vw_est < bubble_w + 24) vw_est = bubble_w + 24; + + QListWidgetItem* item = new QListWidgetItem(list); + item->setFlags(Qt::NoItemFlags); + list->setItemWidget(item, row); + item->setSizeHint(QSize(vw_est, est_h)); + list->scrollToBottom(); + + // 布局后二次修正:按实际 heightForWidth 重设行高,避免文字底部裁切 + QTimer::singleShot(0, list, [list, item]() { + if (list == nullptr || item == nullptr) return; + if (list->row(item) < 0) return; + QWidget* w = list->itemWidget(item); + if (w == nullptr) return; + QLayout* ly = w->layout(); + if (ly != nullptr) ly->activate(); + int vw = list->viewport()->width(); + int h = w->heightForWidth(vw); + if (h < 10) h = w->sizeHint().height(); + item->setSizeHint(QSize(vw, h + 2)); + list->scrollToBottom(); + }); +} + +extern "C" VQT6_API void vqt6_qlistwidget_add_bubble(void* lw, void* text, void* qss, + int right_align, int max_bubble_w, + int hpad, int vpad) { + QListWidget* list = static_cast(lw); + if (list == nullptr || text == nullptr) return; + QString msg = *static_cast(text); + if (msg.isEmpty()) msg = QStringLiteral(" "); + QString qss_s = qss ? *static_cast(qss) : QString(); + Vqt6AddBubbleImpl(list, msg, qss_s, right_align, max_bubble_w, hpad, vpad); +} + +// 流式刷新:删除最后一条气泡后按新文本重建(保留其 QSS/对齐样式参数) +extern "C" VQT6_API void vqt6_qlistwidget_replace_last_bubble(void* lw, void* text, void* qss, + int right_align, int max_bubble_w, + int hpad, int vpad) { + QListWidget* list = static_cast(lw); + if (list == nullptr || text == nullptr) return; + QString msg = *static_cast(text); + QString qss_s = qss ? *static_cast(qss) : QString(); + if (list->count() > 0) { + int last = list->count() - 1; + QListWidgetItem* item = list->takeItem(last); + if (item != nullptr) { + QWidget* w = list->itemWidget(item); + list->removeItemWidget(item); + delete item; + if (w != nullptr) w->deleteLater(); + } + } + if (msg.isEmpty()) msg = QStringLiteral(" "); + Vqt6AddBubbleImpl(list, msg, qss_s, right_align, max_bubble_w, hpad, vpad); +} + +extern "C" VQT6_API void vqt6_qlistwidget_scroll_to_bottom(void* lw) { + if (lw == nullptr) return; + static_cast(lw)->scrollToBottom(); +} + // ============================================================ // QProgressBar // ============================================================ diff --git a/vqt6/_bridge_widgets.h b/vqt6/_bridge_widgets.h index cacebc0..50cd948 100644 --- a/vqt6/_bridge_widgets.h +++ b/vqt6/_bridge_widgets.h @@ -246,6 +246,15 @@ VQT6_API void vqt6_qlistwidget_set_current_row(void* lw, int row); VQT6_API void* vqt6_qlistwidget_current_item_text(void* lw); VQT6_API void* vqt6_qlistwidget_item_text(void* lw, int row); VQT6_API void vqt6_qlistwidget_set_item_text(void* lw, int row, void* text); +// 聊天气泡行:在列表尾部插入右/左对齐的 QLabel 气泡(setItemWidget 实现) +VQT6_API void vqt6_qlistwidget_add_bubble(void* lw, void* text, void* qss, + int right_align, int max_bubble_w, + int hpad, int vpad); +// 流式刷新:删除最后一条气泡后按新文本重建 +VQT6_API void vqt6_qlistwidget_replace_last_bubble(void* lw, void* text, void* qss, + int right_align, int max_bubble_w, + int hpad, int vpad); +VQT6_API void vqt6_qlistwidget_scroll_to_bottom(void* lw); // ============================================================ // QTreeWidget / QTreeWidgetItem diff --git a/vqt6/_qtwidgets.vp b/vqt6/_qtwidgets.vp index 574998f..1631594 100644 --- a/vqt6/_qtwidgets.vp +++ b/vqt6/_qtwidgets.vp @@ -275,6 +275,15 @@ def vqt6_qlistwidget_set_current_row(lw: QtListWidgetPtr, row: t.CInt) -> t.Stat def vqt6_qlistwidget_current_item_text(lw: QtListWidgetPtr) -> QtStringPtr | t.State: pass def vqt6_qlistwidget_item_text(lw: QtListWidgetPtr, row: t.CInt) -> QtStringPtr | t.State: pass def vqt6_qlistwidget_set_item_text(lw: QtListWidgetPtr, row: t.CInt, text: QtStringPtr) -> t.State: pass +# 聊天气泡行:右/左对齐气泡(setItemWidget 实现);hpad/vpad = QSS padding 左右/上下合计像素 +def vqt6_qlistwidget_add_bubble(lw: QtListWidgetPtr, text: QtStringPtr, qss: QtStringPtr, + right_align: t.CInt, max_bubble_w: t.CInt, + hpad: t.CInt, vpad: t.CInt) -> t.State: pass +# 流式刷新:删除最后一条气泡后按新文本重建 +def vqt6_qlistwidget_replace_last_bubble(lw: QtListWidgetPtr, text: QtStringPtr, qss: QtStringPtr, + right_align: t.CInt, max_bubble_w: t.CInt, + hpad: t.CInt, vpad: t.CInt) -> t.State: pass +def vqt6_qlistwidget_scroll_to_bottom(lw: QtListWidgetPtr) -> t.State: pass # ============================================================ diff --git a/vthreading.vp b/vthreading.vp index 12a1b4c..c3bfe78 100644 --- a/vthreading.vp +++ b/vthreading.vp @@ -69,6 +69,17 @@ class Thread: self.handle = NULL +def wait_handle(h: HANDLE, ms: ULONG) -> BOOL: + """等待线程/进程句柄变为有信号(超时 ms),返回是否成功等待到。""" + return WaitForSingleObject(h, ms) == WAIT_OBJECT_0 + + +def close_handle(h: HANDLE): + """关闭线程/进程句柄(配合 wait_handle 使用,避免句柄泄漏)。""" + if h != NULL: + CloseHandle(h) + + class local: """TLS (Thread Local Storage) encapsulation.