2015-01-26 2 views
1

은 내가 QTextBrowser() 객체가 있습니다href에 메소드 이름을 지정하는 방법은 무엇입니까?

self.PAddressLink = QTextBrowser() 

나는이 QTextBrowser에 배치 링크를 클릭 할 필요를, 그리고 새로운 대화 상자를 열어야합니다.

self.PAddressLink.setHtml("<html><body><a href=#>+Add Permanent Address</a></body></html>") 

나는 어쨌든 아래 코드를 사용하여 새 창을 열 수 있습니다

self.PAddressLink.anchorClicked.connect(self.AddPAddress) #self.AddPAddress is the method of displaying a dialog box. 

을하지만 난 HREF에서 self.AddPAddress를 배치하고 여분의 문 아래를 사용하지 않도록 할 수 있는지 알 필요가 :

self.PAddressLink.anchorClicked.connect(self.AddPAddress) #self.AddPAddress 

답변

1

가능성이 높습니다. 어떤 쉬운 방법도 쉬지 마라. 당신은 신호와 슬롯 시스템을 재 구현할 것입니다.

버튼과 마찬가지로 클릭 신호를 슬롯에 연결해야합니다. 이것이 작동하도록 설계된 방법입니다.

+0

내가 여러 링크를 사용해야 할 경우 어떤 단일 QTextBrowser를 사용하려면 여러 QTextBrowsers를 사용해야합니다. – Ejaz

+0

anchorClicked 신호는 URL을 슬롯으로 전달하므로'self.AddPAddress'가 URL을 다르게 처리하도록 만들 수 있습니다. – Sevanteri

2

약간 해킹 된 방법으로이 작업을 수행 할 수 있습니다.

기본적으로 링크를 버튼으로 처리하고 각 링크마다 다른 처리기를 호출하려고합니다. 그래서, 가정의 모든 처리기가 동일한 개체 (예 : self)에 정의 된, 당신이 뭔가를 할 수 있습니다 : 어쩌면

self.PAddressLink.setHtml("<a href="AddPAddress">...</a>") 
    self.PAddressLink.anchorClicked.connect(self.handleLinkClicked) 
    ... 

    def handleLinkClicked(self, url): 
     if url.host(): 
      # handle normal urls here if necessary... 
     else: 
      getattr(self, url.toString())() 

또는 단지 :

 else: 
      key = url.toString() 
      if key == 'AddPAddress': 
       # open dialog... 
      elif key == 'SomethingElse': 
       # do something else... 
관련 문제