2014-03-24 1 views
1

여러 QtGui.QLineEdits에서 입력 한 내용을 다른 매개 변수로 같은 기능으로 확인하고 싶습니다. 나는 QtCore.SignalMapper를 시도했다. 이것은 테스트 응용 프로그램에서 내 코드입니다 :QtCore.SignalMapper로 슬롯 호출하기

self.signalMapper = QtCore.QSignalMapper(self) 
    QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8('returnPressed()')), self.signalMapper.map) 
    QtCore.QObject.connect(self.lineEdit_341, QtCore.SIGNAL(_fromUtf8("returnPressed()")), self.signalMapper.map) 
    self.signalMapper.setMapping(self.lineEdit_331,'links') 
    self.signalMapper.setMapping(self.lineEdit_341,'rechts') 
    QtCore.QObject.connect(self.signalMapper, QtCore.SIGNAL(_fromUtf8("mapped(QString)")),self.test) 

signalMapper이 존재하고 모든 커넥트는 '진정한'반환하지만 슬롯이 호출되지 않습니다 ('연결'과 'setMapping'의 순서를 변경 한 후 동일) . 슬롯에 lineEdits 신호를 연결 작동 :

QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8("returnPressed()")), self.test_1) 

내 코드의 문제점은 무엇입니까? 도움을 주셔서 감사합니다

답변

1

코드에 가장 중요한 점은 new-style syntax 대신에 신호를 연결하는 데 오류가 발생하기 쉽고 오류가 발생하기 쉬운 구식 구문을 사용한다는 것입니다.

self.signalMapper = QtCore.QSignalMapper(self) 
    self.lineEdit_331.returnPressed.connect(self.signalMapper.map) 
    self.lineEdit_331.returnPressed.connect(self.signalMapper.map) 
    self.signalMapper.setMapping(self.lineEdit_331, 'links') 
    self.signalMapper.setMapping(self.lineEdit_341, 'rechts') 
    self.signalMapper.mapped[str].connect(self.test) 

당신이 원래의 코드가 작동하지 않았는지 궁금하다면 첫 번째 두 개의 연결 슬롯을 이용해야하기 때문에, 그것의 : 여기

은 예제 코드의 다시 쓰기입니다. 그것은 있었어야 :

QtCore.QObject.connect(
     self.lineEdit_331, QtCore.SIGNAL('returnPressed()'), 
     self.signalMapper, QtCore.SLOT('map()')) 

QSignalMapper.map 두 가지 오버로드가 있기 때문에, 그래서 당신은 당신이 사용하고자하는 하나를 지정하기 위해 필요한 것입니다.

+0

새로운 스타일 구문으로 다시 쓰는 것이 효과적입니다. 팁 덕택에 이전 스타일 구문이 완료되지 않았다고 설명하는대로 완료됩니다. 이전 스타일의 구문을 사용하기 전에 나는 새로운 스타일을 성공하지 않고 시도했습니다. 당신은 설명을주었습니다 : 저는 마지막 줄에 '[str]'을 잊었습니다. –

+0

@ user3455890 이상한. 귀하의 질문에 정확한 코드를 테스트하고 슬롯을 사용하는 것은 나를 위해 그것을 해결하는 유일한 방법입니다. 하지만 어쩌면 pyqt/sip, 또는 무언가의 버전에 따라 달라질 수 있습니다 ... – ekhumoro

+0

제가 생각하기에 그것은 마지막 연결의 Qstring입니다, 여기를보십시오 : http://stackoverflow.com/questions/1400858/how-to-create- qstring-in-pyqt4. 내 테스트 응용 프로그램에 'Try/Except'를 추가하면 제대로 작동합니다. 그래서 가장 중요한 힌트는 Your '[str]'입니다. 여러분의 성원에 감사 드리며, 지금부터는 새로운 스타일의 구문을 사용합니다 :-) –