2022-04-29 22:23:57 +02:00
|
|
|
from PyQt6.QtWidgets import QWidget
|
|
|
|
|
|
2024-06-28 11:48:30 +02:00
|
|
|
import mobase_tests.qt_widgets as m
|
2022-04-29 22:23:57 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class PyWidget(QWidget):
|
2024-06-28 11:48:30 +02:00
|
|
|
def heightForWidth(self, a0: int) -> int:
|
|
|
|
|
return a0 * 3 + 4
|
2022-04-29 22:23:57 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class PyCustomWidget(m.CustomWidget):
|
|
|
|
|
def __init__(self, name: str):
|
|
|
|
|
super().__init__(name)
|
|
|
|
|
|
|
|
|
|
def heightForWidth(self, value: int) -> int:
|
|
|
|
|
return value * 6 - 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_qt_widget():
|
|
|
|
|
# own cpp
|
|
|
|
|
w = m.make_widget_own_cpp("w1")
|
|
|
|
|
assert m.is_alive("w1")
|
|
|
|
|
assert m.is_owned_cpp("w1")
|
|
|
|
|
|
|
|
|
|
del w
|
|
|
|
|
assert m.is_alive("w1")
|
|
|
|
|
|
|
|
|
|
# own py
|
|
|
|
|
w = m.make_widget_own_py("w2")
|
|
|
|
|
assert m.is_alive("w2")
|
|
|
|
|
assert not m.is_owned_cpp("w2")
|
|
|
|
|
|
|
|
|
|
del w
|
|
|
|
|
assert not m.is_alive("w2")
|
|
|
|
|
|
|
|
|
|
# transfer to C++
|
|
|
|
|
w = PyWidget()
|
|
|
|
|
m.send_to_cpp("w3", w)
|
|
|
|
|
|
|
|
|
|
# delete the reference w - this should NOT delete the underlying object since it
|
|
|
|
|
# was transferred to C++
|
|
|
|
|
del w
|
|
|
|
|
assert m.is_alive("w3")
|
|
|
|
|
assert m.is_owned_cpp("w3")
|
|
|
|
|
|
|
|
|
|
# if the Python object is dead (BAD!), this will crash horrible
|
|
|
|
|
assert m.heightForWidth("w3", 4) == 4 * 3 + 4
|
|
|
|
|
|
|
|
|
|
# CustomWidget as a qholder, so the construction itself transfers the ownership
|
|
|
|
|
# to C++
|
|
|
|
|
w = PyCustomWidget("w4")
|
|
|
|
|
w.set_parent_cpp()
|
|
|
|
|
assert m.is_alive("w4")
|
|
|
|
|
assert m.heightForWidth("w4", 7) == 6 * 7 - 5
|
|
|
|
|
assert w.heightForWidth(7) == 6 * 7 - 5
|
|
|
|
|
|
|
|
|
|
# can call function not defined and not bound through the delegate
|
|
|
|
|
assert not w.hasHeightForWidth()
|
|
|
|
|
|
|
|
|
|
del w
|
|
|
|
|
assert m.is_alive("w4")
|
|
|
|
|
assert m.heightForWidth("w4", 7) == 6 * 7 - 5
|