PyQt (but possibly C++) Very simple signal/slot "transference"/encapsulation?
This is a question for PyQt. However, I may be able to adapt a C++ solution, depnding on what it is....
I inherited code using a
QLineEdit. I have to change that into a (what I call) a "composite" widget, consisting of a
QWidgetwhich holds a
QHBoxLayoutwhich in turn holds the original
QLineEdit, plus a
QPushButton; the button leads to something which can populate the
I'm OK with the design, apart from signal/slot handling. The outside world used to go
QLineEdit.editingFinished.connect(...). To encapsulate, I'd like it to go
CompositeWidget.editingFinished.connect(...), rather than addressing the
QLineEditdirectly. So I want to simply "transfer" the existing
editingFinishedsignal/slot from the
This is for PyQt 5 only, not earlier versions. So far I've never had to use PyQt
@pySignal/Slotor whatever they are), and I'm not sure I ought need to, given the definition in
QtWidgets.pyiis already as plain as
def editingFinished(self) -> None: ...
So, given that I regard minimal code as neat/desired, what is like the minimum I need to write to achieve this? I will need the outside world to be able to
connect(), my widget needs to be able to
emit()it (when the user has finished interacting via the button, widget populates the
QLineEditand needs that to raise
editingFinishedsignal to the outside world). I think that's it!
From a C++ point of view: no problem. Signal chaining is indeed the recommended way to propagate in such a case. Just connect the original signal to your custom signal and you should be good to go.
For PyQt, I have discovered the magic of
pyqtSignal()function for the simplest "redirection". So the code looks like:
class JDateEdit(QWidget): # *** THE NEXT LINE IS THE PyQt MAGIC.... *** # class variable for "editingFinished" signal editingFinished = QtCore.pyqtSignal() def initUI(self): # lineEdit holds the date self.lineEdit = QLineEdit(self) ... # connect self.lineEdit.editingFinished signal to self.editingFinished signal self.lineEdit.editingFinished.connect(self.editingFinished) de = JDateEdit() de.editingFinished.connect(...)
Dunno how this compares to whatever in C++ ...
Same as before except that you will have two
Q_SIGNALin the connect statement if using the old version.