参考:
https://stackoverflow.com/questions/64631653/pyside-2-qvariantmap-signal-qt5-15-qt5-12
之前在Python这边用Qt的话,用的是PyQt。但是后来看到一些资料说PyQt是不能用于商业用途的,所以需要改成用PySide。
PySide和PyQt的用法大部分一样,但是有些语法不一样。这里给出个例子,简单介绍Signal、Slot、QVariant的使用:
from PySide2.QtCore import QObject, Slot, Signal
class RootComObj(QObject):
def __init__(self):
super().__init__()
# 用来发送信息到C++那边去,主要是告知此时的状态
serverToClient = Signal("QVariant")
# 这个是供c++那边直接调用的槽函数,可以用来设置参数,也可以通过返回值读取参数。
# 这里只是提供基础的数据通讯,复杂的通讯可以在这个基础上实现自己的封装
# The slot exposed to a remote client.
@Slot("QVariant", result="QVariant")
def clientToServer(self, cmd):
print("c to s:", cmd)
return cmd
有时候,我们只是要使用无界面程序。对于这些无界面的程序,要使用QCoreApplication,而不要用QApplication,因为使用QApplication的话,需要调用ui渲染引擎(xcb、linuxFB等)。
from PySide2.QtCore import QCoreApplication
# from PySide2.QtWidgets import QApplication
def main():
app = QCoreApplication(sys.argv)
...
假如需要使用QApplication的话,可以这样:
https://blog.csdn.net/qq_41976422/article/details/108242662
import sys,os
import PySide2
dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path