Что такое элемент SLOT()SLOT()

#python #qt #qt4 #pyqt #pyqt4

#python #qt #qt4 #pyqt #pyqt4

Вопрос:

Я пытаюсь использовать следующее, чтобы добавить опцию в пользовательское контекстное меню, вызываемое правой кнопкой мыши, в окне редактирования текста QsciScintilla:

 fileMenu.addAction(self.ui.textEdit_one.tr("amp;Get"), self, self.addToConfig)
  

где addToConfig — это метод или «слот» для моего приложения.
FileMenu ожидает следующий формат:

 QAction QMenu.addAction (self, QString text, QObject receiver, SLOT()SLOT() member, QKeySequence shortcut = 0)
  

Я пробовал использовать множество комбинаций QtCore.SLOT(‘self.addToConfig()’), но, похоже, не удается получить правильный формат.

Я продолжаю получать вариации:

 QMenu.addAction(QString, QObject, SLOT(), QKeySequence shortcut=0): argument 3 has unexpected type 'instancemethod'
  

или

 Object::connect: No such slot StartQT4::addToConfig()
Object::connect:  (receiver name: 'EditorWindow')
  

Ответ №1:

Вы пытаетесь смешать сигналы / слоты старого стиля с сигналами / слотами нового стиля. Для соединений в старом стиле вы бы передали объект ( self ) в качестве одного параметра, а следующим, в вашем случае, было бы SLOT('addToConfig(<arg types...>)') .

Однако вам следует просто использовать соединения в новом стиле, что означает простой вызов fileMenu.addAction(self.ui.textEdit_one.tr("amp;Get"), self.addToConfig) , см.: http://pyqt.sourceforge.net/Docs/PyQt4/qmenu.html#addAction-5

Комментарии:

1. Я не думаю, что правильно понял поле «приемник». QAction QMenu.addAction (self, QString text, вызываемый приемник, QKeySequence shortcut = 0) отлично сработало, спасибо!

2. Да, в исходной подписи, которую вы пробовали, она искала приемник типа QObject (он же объект, а не метод), где в качестве подписи, которую вы сейчас используете, ожидается приемник типа callable (он же метод). В любом случае, рад, что смог помочь!