diff --git a/vqt6/__init__.vp b/vqt6/__init__.vp index be5fbd1..0609092 100644 --- a/vqt6/__init__.vp +++ b/vqt6/__init__.vp @@ -85,6 +85,56 @@ def _w_text_of(qstr: QtStringPtr) -> str: return s +# ============================================================ +# 树状控件统计助手(返回 int,规避跨模块 FFI 返回指针) +# 叶子勾选态: 0=未选 1=半选 2=选中 +# ============================================================ +def qtree_checked_count(tw: QtTreeWidgetPtr) -> int: + """统计被勾选的叶子节点数""" + n: int = 0 + gi: int = 0 + top_n: int = vqt6_qtreewidget_top_level_item_count(tw) + while gi < top_n: + g: QtTreeWidgetItemPtr = vqt6_qtreewidget_top_level_item(tw, gi) + ci: int = 0 + cn: int = vqt6_qtreewidgetitem_child_count(g) + while ci < cn: + it: QtTreeWidgetItemPtr = vqt6_qtreewidgetitem_child(g, ci) + if vqt6_qtreewidgetitem_check_state(it) == 2: + n += 1 + ci += 1 + gi += 1 + return n + + +def qtree_checked_size(tw: QtTreeWidgetPtr) -> int: + """统计被勾选叶子节点的磁盘占用合计(MB)""" + mb: int = 0 + gi: int = 0 + top_n: int = vqt6_qtreewidget_top_level_item_count(tw) + while gi < top_n: + g: QtTreeWidgetItemPtr = vqt6_qtreewidget_top_level_item(tw, gi) + ci: int = 0 + cn: int = vqt6_qtreewidgetitem_child_count(g) + while ci < cn: + it: QtTreeWidgetItemPtr = vqt6_qtreewidgetitem_child(g, ci) + if vqt6_qtreewidgetitem_check_state(it) == 2: + mb += vqt6_qtreewidgetitem_data_int(it) + ci += 1 + gi += 1 + return mb + + +def qtree_click_toggle(tw: QtTreeWidgetPtr): + """点击带子节点的当前行 → 展开/折叠""" + cur: QtTreeWidgetItemPtr = vqt6_qtreewidget_current_item(tw) + if cur is None: + return + if vqt6_qtreewidgetitem_child_count(cur) > 0: + ex: int = vqt6_qtreewidgetitem_is_expanded(cur) + vqt6_qtreewidgetitem_set_expanded(cur, 1 - ex) + + @t.NoVTable class QApplication: """QApplication 包装(不透明指针)""" @@ -1016,6 +1066,132 @@ class QListWidget: _w_set_enabled(self._ptr, enabled) +@t.NoVTable +class QTreeWidgetItem: + """QTreeWidgetItem 包装(树节点,勾选态 0=未选 2=选中)""" + _ptr: QtTreeWidgetItemPtr + + def __init__(self, text: str = ""): + qs: QtStringPtr = vqt6_qstring_create(text) + self._ptr = vqt6_qtreewidgetitem_create(qs) + vqt6_qstring_free(qs) + if self._ptr is None: + raise RuntimeError("Failed to create QTreeWidgetItem") + + def setText(self, text: str): + qs: QtStringPtr = vqt6_qstring_create(text) + vqt6_qtreewidgetitem_set_text(self._ptr, qs) + vqt6_qstring_free(qs) + + def text(self) -> str: + return _w_text_of(vqt6_qtreewidgetitem_text(self._ptr)) + + def addChild(self, child: "QTreeWidgetItem"): + vqt6_qtreewidgetitem_add_child(self._ptr, child._ptr) + + def childCount(self) -> int: + return vqt6_qtreewidgetitem_child_count(self._ptr) + + def child(self, index: int) -> "QTreeWidgetItem": + it = QTreeWidgetItem() + it._ptr = vqt6_qtreewidgetitem_child(self._ptr, index) + return it + + def setCheckable(self, checkable: int): + vqt6_qtreewidgetitem_set_checkable(self._ptr, checkable) + + def setChecked(self, checked: int): + if checked != 0: + vqt6_qtreewidgetitem_set_check_state(self._ptr, 2) + else: + vqt6_qtreewidgetitem_set_check_state(self._ptr, 0) + + def isChecked(self) -> int: + return vqt6_qtreewidgetitem_check_state(self._ptr) + + def setSize(self, mb: int): + """把磁盘占用(MB)存到节点 UserRole(统计用)""" + vqt6_qtreewidgetitem_set_data_int(self._ptr, mb) + + def setExpanded(self, expanded: int): + vqt6_qtreewidgetitem_set_expanded(self._ptr, expanded) + + def isExpanded(self) -> int: + return vqt6_qtreewidgetitem_is_expanded(self._ptr) + + +@t.NoVTable +class QTreeWidget: + """QTreeWidget 包装""" + _ptr: QtTreeWidgetPtr + + def __init__(self, parent: "QWidget | None" = None): + if parent is not None and parent._ptr is not None: + self._ptr = vqt6_qtreewidget_create_with_parent(parent._ptr) + else: + self._ptr = vqt6_qtreewidget_create() + if self._ptr is None: + raise RuntimeError("Failed to create QTreeWidget") + + def addTopLevelItem(self, item: "QTreeWidgetItem"): + vqt6_qtreewidget_add_top_level_item(self._ptr, item._ptr) + + def insertTopLevelItem(self, index: int, item: "QTreeWidgetItem"): + vqt6_qtreewidget_insert_top_level_item(self._ptr, index, item._ptr) + + def topLevelItemCount(self) -> int: + return vqt6_qtreewidget_top_level_item_count(self._ptr) + + def topLevelItem(self, index: int) -> "QTreeWidgetItem": + it = QTreeWidgetItem() + it._ptr = vqt6_qtreewidget_top_level_item(self._ptr, index) + return it + + def currentItem(self) -> "QTreeWidgetItem": + it = QTreeWidgetItem() + it._ptr = vqt6_qtreewidget_current_item(self._ptr) + return it + + def expandAll(self): + vqt6_qtreewidget_expand_all(self._ptr) + + def collapseAll(self): + vqt6_qtreewidget_collapse_all(self._ptr) + + def setHeaderHidden(self, hidden: int): + vqt6_qtreewidget_set_header_hidden(self._ptr, hidden) + + def setColumnCount(self, count: int): + vqt6_qtreewidget_set_column_count(self._ptr, count) + + def setItemExpanded(self, item: "QTreeWidgetItem", expanded: int): + vqt6_qtreewidget_set_item_expanded(self._ptr, item._ptr, expanded) + + def itemChanged(self, cb: bytes, data: bytes = 0): + vqt6_qtreewidget_connect_item_changed(self._ptr, cb, data) + + def itemClicked(self, cb: bytes, data: bytes = 0): + vqt6_qtreewidget_connect_item_clicked(self._ptr, cb, data) + + def show(self): + _w_show(self._ptr) + + def hide(self): + _w_hide(self._ptr) + + def setGeometry(self, x: int, y: int, w: int, h: int): + _w_set_geometry(self._ptr, x, y, w, h) + + def resize(self, w: int, h: int): + _w_resize(self._ptr, w, h) + + def move(self, x: int, y: int): + _w_move(self._ptr, x, y) + + def setEnabled(self, enabled: int): + _w_set_enabled(self._ptr, enabled) + + @t.NoVTable class QTabWidget: """QTabWidget 包装""" @@ -1603,6 +1779,7 @@ __all__ = [ "QLineEdit", "QCheckBox", "QRadioButton", "QComboBox", "QSlider", "QSpinBox", "QProgressBar", "QTextEdit", "QPlainTextEdit", "QListWidget", + "QTreeWidget", "QTreeWidgetItem", "QTabWidget", "QStackedWidget", "QHBoxLayout", "QVBoxLayout", "QGridLayout", "QMessageBox", "QFileDialog", "QTimer", @@ -1611,6 +1788,7 @@ __all__ = [ # 类型 "QtObjectPtr", "QtStringPtr", "QtByteArrayPtr", "QtWidgetPtr", "QtAppPtr", "QtLabelPtr", "QtPushButtonPtr", + "QtTreeWidgetPtr", "QtTreeWidgetItemPtr", "QtColorPtr", "QtFontPtr", "QtPixmapPtr", "QtImagePtr", "QtPainterPtr", "QtTcpSocketPtr", "QtHostAddressPtr", "QtNetworkRequestPtr", "QtNetworkReplyPtr", # 常量 diff --git a/vqt6/_bridge_widgets.cpp b/vqt6/_bridge_widgets.cpp index 2e57ca2..ec3422e 100644 --- a/vqt6/_bridge_widgets.cpp +++ b/vqt6/_bridge_widgets.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -42,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -768,6 +770,11 @@ extern "C" VQT6_API void vqt6_qplaintextedit_append_utf8(void* pte, const char* static_cast(pte)->appendPlainText(QString::fromUtf8(utf8)); } +extern "C" VQT6_API void vqt6_qplaintextedit_set_plain_text_utf8(void* pte, const char* utf8) { + if (pte == nullptr || utf8 == nullptr) return; + static_cast(pte)->setPlainText(QString::fromUtf8(utf8)); +} + extern "C" VQT6_API void vqt6_qwidget_set_stylesheet_utf8(void* widget, const char* utf8) { if (widget == nullptr || utf8 == nullptr) return; static_cast(widget)->setStyleSheet(QString::fromUtf8(utf8)); @@ -1766,6 +1773,144 @@ extern "C" VQT6_API void* vqt6_qfiledialog_get_open_file_names(void* parent, voi )); } +// ============================================================ +// QTreeWidget / QTreeWidgetItem +// ============================================================ +extern "C" VQT6_API void* vqt6_qtreewidget_create(void) { + return new QTreeWidget(); +} + +extern "C" VQT6_API void* vqt6_qtreewidget_create_with_parent(void* parent) { + if (parent == nullptr) return nullptr; + return new QTreeWidget(static_cast(parent)); +} + +extern "C" VQT6_API void vqt6_qtreewidget_add_top_level_item(void* tw, void* item) { + if (tw == nullptr || item == nullptr) return; + static_cast(tw)->addTopLevelItem(static_cast(item)); +} + +extern "C" VQT6_API void vqt6_qtreewidget_insert_top_level_item(void* tw, int index, void* item) { + if (tw == nullptr || item == nullptr) return; + static_cast(tw)->insertTopLevelItem(index, static_cast(item)); +} + +extern "C" VQT6_API int vqt6_qtreewidget_top_level_item_count(void* tw) { + if (tw == nullptr) return 0; + return static_cast(tw)->topLevelItemCount(); +} + +extern "C" VQT6_API void* vqt6_qtreewidget_top_level_item(void* tw, int index) { + if (tw == nullptr) return nullptr; + return static_cast(tw)->topLevelItem(index); +} + +extern "C" VQT6_API void* vqt6_qtreewidget_current_item(void* tw) { + if (tw == nullptr) return nullptr; + return static_cast(tw)->currentItem(); +} + +extern "C" VQT6_API void vqt6_qtreewidget_expand_all(void* tw) { + if (tw == nullptr) return; + static_cast(tw)->expandAll(); +} + +extern "C" VQT6_API void vqt6_qtreewidget_collapse_all(void* tw) { + if (tw == nullptr) return; + static_cast(tw)->collapseAll(); +} + +extern "C" VQT6_API void vqt6_qtreewidget_set_header_hidden(void* tw, int hidden) { + if (tw == nullptr) return; + static_cast(tw)->setHeaderHidden(hidden != 0); +} + +extern "C" VQT6_API void vqt6_qtreewidget_set_column_count(void* tw, int count) { + if (tw == nullptr) return; + static_cast(tw)->setColumnCount(count); +} + +extern "C" VQT6_API void vqt6_qtreewidget_set_item_expanded(void* tw, void* item, int expanded) { + if (item == nullptr) return; + (void)tw; + static_cast(item)->setExpanded(expanded != 0); +} + +extern "C" VQT6_API void* vqt6_qtreewidgetitem_create(void* text) { + QTreeWidgetItem* it = new QTreeWidgetItem(); + if (text != nullptr) it->setText(0, *static_cast(text)); + return it; +} + +extern "C" VQT6_API void vqt6_qtreewidgetitem_add_child(void* item, void* child) { + if (item == nullptr || child == nullptr) return; + static_cast(item)->addChild(static_cast(child)); +} + +extern "C" VQT6_API int vqt6_qtreewidgetitem_child_count(void* item) { + if (item == nullptr) return 0; + return static_cast(item)->childCount(); +} + +extern "C" VQT6_API void* vqt6_qtreewidgetitem_child(void* item, int index) { + if (item == nullptr) return nullptr; + return static_cast(item)->child(index); +} + +extern "C" VQT6_API void vqt6_qtreewidgetitem_set_text(void* item, void* text) { + if (item == nullptr || text == nullptr) return; + static_cast(item)->setText(0, *static_cast(text)); +} + +extern "C" VQT6_API void* vqt6_qtreewidgetitem_text(void* item) { + if (item == nullptr) return nullptr; + return new QString(static_cast(item)->text(0)); +} + +extern "C" VQT6_API void vqt6_qtreewidgetitem_set_checkable(void* item, int checkable) { + if (item == nullptr) return; + QTreeWidgetItem* it = static_cast(item); + Qt::ItemFlags f = it->flags(); + if (checkable != 0) f |= Qt::ItemIsUserCheckable; + else f &= ~Qt::ItemIsUserCheckable; + it->setFlags(f); +} + +extern "C" VQT6_API void vqt6_qtreewidgetitem_set_check_state(void* item, int state) { + if (item == nullptr) return; + Qt::CheckState cs = Qt::Unchecked; + if (state == 1) cs = Qt::PartiallyChecked; + else if (state == 2) cs = Qt::Checked; + static_cast(item)->setCheckState(0, cs); +} + +extern "C" VQT6_API int vqt6_qtreewidgetitem_check_state(void* item) { + if (item == nullptr) return 0; + return static_cast(static_cast(item)->checkState(0)); +} + +extern "C" VQT6_API void vqt6_qtreewidgetitem_set_expanded(void* item, int expanded) { + if (item == nullptr) return; + static_cast(item)->setExpanded(expanded != 0); +} + +extern "C" VQT6_API int vqt6_qtreewidgetitem_is_expanded(void* item) { + if (item == nullptr) return 0; + return static_cast(item)->isExpanded() ? 1 : 0; +} + +extern "C" VQT6_API void vqt6_qtreewidgetitem_set_data_int(void* item, int value) { + if (item == nullptr) return; + static_cast(item)->setData(0, Qt::UserRole, QVariant(value)); +} + +extern "C" VQT6_API int vqt6_qtreewidgetitem_data_int(void* item) { + if (item == nullptr) return 0; + bool ok = false; + int v = static_cast(item)->data(0, Qt::UserRole).toInt(&ok); + return ok ? v : 0; +} + // ============================================================ // 信号连接(Qt 信号 → Viper 回调 vqt6_slot_callback_t) // 模式:vqt6_signal_register 分配 slot_id → Qt lambda 连接信号 → @@ -1900,3 +2045,23 @@ extern "C" VQT6_API void vqt6_qaction_connect_triggered(void* action, vqt6_slot_ vqt6_trigger_slot(slot_id); }); } + +extern "C" VQT6_API void vqt6_qtreewidget_connect_item_changed(void* tw, vqt6_slot_callback_t cb, void* user_data) { + if (tw == nullptr) return; + int slot_id = vqt6_signal_register(cb, user_data); + if (slot_id < 0) return; + QObject::connect(static_cast(tw), &QTreeWidget::itemChanged, + static_cast(tw), [slot_id](QTreeWidgetItem*, int) { + vqt6_trigger_slot(slot_id); + }); +} + +extern "C" VQT6_API void vqt6_qtreewidget_connect_item_clicked(void* tw, vqt6_slot_callback_t cb, void* user_data) { + if (tw == nullptr) return; + int slot_id = vqt6_signal_register(cb, user_data); + if (slot_id < 0) return; + QObject::connect(static_cast(tw), &QTreeWidget::itemClicked, + static_cast(tw), [slot_id](QTreeWidgetItem*, int) { + vqt6_trigger_slot(slot_id); + }); +} diff --git a/vqt6/_bridge_widgets.h b/vqt6/_bridge_widgets.h index df086bd..34d369b 100644 --- a/vqt6/_bridge_widgets.h +++ b/vqt6/_bridge_widgets.h @@ -52,6 +52,7 @@ VQT6_API void* vqt6_qwidget_text(void* widget); // UTF-8 便捷版:直接传 C 字符串(Viper str),内部转 QString,避免 Viper 端手动创建/释放 QString VQT6_API void vqt6_qlabel_set_text_utf8(void* label, const char* utf8); VQT6_API void vqt6_qplaintextedit_append_utf8(void* pte, const char* utf8); +VQT6_API void vqt6_qplaintextedit_set_plain_text_utf8(void* pte, const char* utf8); // Qt 样式表(QSS):直接传 C 字符串,深色主题等外观定制 VQT6_API void vqt6_qwidget_set_stylesheet_utf8(void* widget, const char* utf8); VQT6_API void vqt6_qwidget_set_enabled(void* widget, int enabled); @@ -244,6 +245,36 @@ 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); +// ============================================================ +// QTreeWidget / QTreeWidgetItem +// ============================================================ +VQT6_API void* vqt6_qtreewidget_create(void); +VQT6_API void* vqt6_qtreewidget_create_with_parent(void* parent); +VQT6_API void vqt6_qtreewidget_add_top_level_item(void* tw, void* item); +VQT6_API void vqt6_qtreewidget_insert_top_level_item(void* tw, int index, void* item); +VQT6_API int vqt6_qtreewidget_top_level_item_count(void* tw); +VQT6_API void* vqt6_qtreewidget_top_level_item(void* tw, int index); +VQT6_API void* vqt6_qtreewidget_current_item(void* tw); +VQT6_API void vqt6_qtreewidget_expand_all(void* tw); +VQT6_API void vqt6_qtreewidget_collapse_all(void* tw); +VQT6_API void vqt6_qtreewidget_set_header_hidden(void* tw, int hidden); +VQT6_API void vqt6_qtreewidget_set_column_count(void* tw, int count); +VQT6_API void vqt6_qtreewidget_set_item_expanded(void* tw, void* item, int expanded); + +VQT6_API void* vqt6_qtreewidgetitem_create(void* text); +VQT6_API void vqt6_qtreewidgetitem_add_child(void* item, void* child); +VQT6_API int vqt6_qtreewidgetitem_child_count(void* item); +VQT6_API void* vqt6_qtreewidgetitem_child(void* item, int index); +VQT6_API void vqt6_qtreewidgetitem_set_text(void* item, void* text); +VQT6_API void* vqt6_qtreewidgetitem_text(void* item); +VQT6_API void vqt6_qtreewidgetitem_set_checkable(void* item, int checkable); +VQT6_API void vqt6_qtreewidgetitem_set_check_state(void* item, int state); +VQT6_API int vqt6_qtreewidgetitem_check_state(void* item); +VQT6_API void vqt6_qtreewidgetitem_set_expanded(void* item, int expanded); +VQT6_API int vqt6_qtreewidgetitem_is_expanded(void* item); +VQT6_API void vqt6_qtreewidgetitem_set_data_int(void* item, int value); +VQT6_API int vqt6_qtreewidgetitem_data_int(void* item); + // ============================================================ // QProgressBar // ============================================================ diff --git a/vqt6/_qtwidgets.vp b/vqt6/_qtwidgets.vp index 3102327..b327038 100644 --- a/vqt6/_qtwidgets.vp +++ b/vqt6/_qtwidgets.vp @@ -209,6 +209,7 @@ def vqt6_qplaintextedit_set_plain_text(pte: QtPlainTextEditPtr, text: QtStringPt def vqt6_qplaintextedit_append(pte: QtPlainTextEditPtr, text: QtStringPtr) -> t.State: pass # UTF-8 便捷版:直接传 Viper str,避免手动创建/释放 QString def vqt6_qplaintextedit_append_utf8(pte: QtPlainTextEditPtr, text: t.CChar | t.CPtr) -> t.State: pass +def vqt6_qplaintextedit_set_plain_text_utf8(pte: QtPlainTextEditPtr, text: t.CChar | t.CPtr) -> 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 @@ -274,6 +275,37 @@ def vqt6_qlistwidget_item_text(lw: QtListWidgetPtr, row: t.CInt) -> QtStringPtr def vqt6_qlistwidget_set_item_text(lw: QtListWidgetPtr, row: t.CInt, text: QtStringPtr) -> t.State: pass +# ============================================================ +# QTreeWidget / QTreeWidgetItem — 树状控件 +# ============================================================ +def vqt6_qtreewidget_create() -> QtTreeWidgetPtr | t.State: pass +def vqt6_qtreewidget_create_with_parent(parent: QtWidgetPtr) -> QtTreeWidgetPtr | t.State: pass +def vqt6_qtreewidget_add_top_level_item(tw: QtTreeWidgetPtr, item: QtTreeWidgetItemPtr) -> t.State: pass +def vqt6_qtreewidget_insert_top_level_item(tw: QtTreeWidgetPtr, index: t.CInt, item: QtTreeWidgetItemPtr) -> t.State: pass +def vqt6_qtreewidget_top_level_item_count(tw: QtTreeWidgetPtr) -> t.CInt | t.State: pass +def vqt6_qtreewidget_top_level_item(tw: QtTreeWidgetPtr, index: t.CInt) -> QtTreeWidgetItemPtr | t.State: pass +def vqt6_qtreewidget_current_item(tw: QtTreeWidgetPtr) -> QtTreeWidgetItemPtr | t.State: pass +def vqt6_qtreewidget_expand_all(tw: QtTreeWidgetPtr) -> t.State: pass +def vqt6_qtreewidget_collapse_all(tw: QtTreeWidgetPtr) -> t.State: pass +def vqt6_qtreewidget_set_header_hidden(tw: QtTreeWidgetPtr, hidden: t.CInt) -> t.State: pass +def vqt6_qtreewidget_set_column_count(tw: QtTreeWidgetPtr, count: t.CInt) -> t.State: pass +def vqt6_qtreewidget_set_item_expanded(tw: QtTreeWidgetPtr, item: QtTreeWidgetItemPtr, expanded: t.CInt) -> t.State: pass + +def vqt6_qtreewidgetitem_create(text: QtStringPtr) -> QtTreeWidgetItemPtr | t.State: pass +def vqt6_qtreewidgetitem_add_child(item: QtTreeWidgetItemPtr, child: QtTreeWidgetItemPtr) -> t.State: pass +def vqt6_qtreewidgetitem_child_count(item: QtTreeWidgetItemPtr) -> t.CInt | t.State: pass +def vqt6_qtreewidgetitem_child(item: QtTreeWidgetItemPtr, index: t.CInt) -> QtTreeWidgetItemPtr | t.State: pass +def vqt6_qtreewidgetitem_set_text(item: QtTreeWidgetItemPtr, text: QtStringPtr) -> t.State: pass +def vqt6_qtreewidgetitem_text(item: QtTreeWidgetItemPtr) -> QtStringPtr | t.State: pass +def vqt6_qtreewidgetitem_set_checkable(item: QtTreeWidgetItemPtr, checkable: t.CInt) -> t.State: pass +def vqt6_qtreewidgetitem_set_check_state(item: QtTreeWidgetItemPtr, state: t.CInt) -> t.State: pass +def vqt6_qtreewidgetitem_check_state(item: QtTreeWidgetItemPtr) -> t.CInt | t.State: pass +def vqt6_qtreewidgetitem_set_expanded(item: QtTreeWidgetItemPtr, expanded: t.CInt) -> t.State: pass +def vqt6_qtreewidgetitem_is_expanded(item: QtTreeWidgetItemPtr) -> t.CInt | t.State: pass +def vqt6_qtreewidgetitem_set_data_int(item: QtTreeWidgetItemPtr, value: t.CInt) -> t.State: pass +def vqt6_qtreewidgetitem_data_int(item: QtTreeWidgetItemPtr) -> t.CInt | t.State: pass + + # ============================================================ # QProgressBar — 进度条 # ============================================================ @@ -501,3 +533,5 @@ def vqt6_qprogressbar_connect_value_changed(pb: QtProgressBarPtr, cb: bytes, use def vqt6_qlistwidget_connect_current_row_changed(lw: QtListWidgetPtr, cb: bytes, user_data: bytes) -> t.State: pass def vqt6_qtabwidget_connect_current_changed(tw: QtTabWidgetPtr, cb: bytes, user_data: bytes) -> t.State: pass def vqt6_qaction_connect_triggered(action: QtActionPtr, cb: bytes, user_data: bytes) -> t.State: pass +def vqt6_qtreewidget_connect_item_changed(tw: QtTreeWidgetPtr, cb: bytes, user_data: bytes) -> t.State: pass +def vqt6_qtreewidget_connect_item_clicked(tw: QtTreeWidgetPtr, cb: bytes, user_data: bytes) -> t.State: pass diff --git a/vqt6/_types.vp b/vqt6/_types.vp index 86d1fe5..20beb31 100644 --- a/vqt6/_types.vp +++ b/vqt6/_types.vp @@ -58,6 +58,8 @@ 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* +QtTreeWidgetPtr: t.CTypedef = t.CVoid | t.CPtr # QTreeWidget* +QtTreeWidgetItemPtr: t.CTypedef = t.CVoid | t.CPtr # QTreeWidgetItem* QtProgressBarPtr: t.CTypedef = t.CVoid | t.CPtr # QProgressBar* QtSliderPtr: t.CTypedef = t.CVoid | t.CPtr # QSlider* QtSpinBoxPtr: t.CTypedef = t.CVoid | t.CPtr # QSpinBox*