Qt.QueuedConnection никогда не отправляет сообщение

1

Почему эта программа ничего не печатает?

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class A(QObject):
    def __init__(self):
        super(A, self).__init__()

    sig = pyqtSignal()

    @pyqtSlot()
    def slot(self):
        print("received")

a = A()
a.sig.connect(a.slot, Qt.QueuedConnection)

a.sig.emit()
a.sig.emit()
a.sig.emit()

Если я удалю Qt.QueuedConnection, он работает так, как ожидалось. Я пытаюсь проверить, будет ли Qt.QueuedConnection автоматически удалять повторяющиеся события.

Теги:
qt
pyqt

1 ответ

3
Лучший ответ

Я не эксперт с Python (или PyQt), но соединение в очереди оказывается доставлено только после того, как приложение снова войдет в цикл событий, тогда как нормальное соединение соответствует вызову прямой функции. Поэтому я предполагаю, что в вашем случае вам нужно подождать, пока приложение не войдет в цикл событий для вызываемого слота (хотя я не вижу в вашем коде какого-либо объекта приложения).

РЕДАКТИРОВАТЬ: И я сомневаюсь, что он удаляет повторяющиеся вызовы, поскольку Qt не знает, является ли это дублированным вызовом или концептуально другим вызовом, который должен выполняться дополнительно.

  • 0
    Ах, вы поняли.
  • 0
    Да, ты прав. Жаль, что у Qt нет типа соединения, которое использует повторяющиеся вызовы.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню