2011-11-18 23 views
7

是否可以將樣式表應用於與QCombobox綁定的QCompleter的彈出窗口部分?如果沒有,它是否需要委託魔術?如果是這樣,那麼甚至可能如此工作,因爲他們往往混淆了我的地獄。這裏是我的小部件代碼:在PyQt中爲QCompleter的彈出窗口設計樣式

class autoFillField(QComboBox): 
    def __init__(self, parent=None): 
     super(autoFillField, self).__init__(parent) 

     self.setFocusPolicy(Qt.NoFocus) 
     self.setEditable(True) 

     self.addItem("") 

     self.pFilterModel = QSortFilterProxyModel(self) 
     self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive) 
     self.pFilterModel.setSourceModel(self.model()) 

     self.completer = QCompleter(self.pFilterModel, self) 
     self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) 
     self.setCompleter(self.completer) 
     self.setStyleSheet(STYLING FOR COMBOBOX HERE, BUT NOT POPUP) 

     self.lineEdit().textEdited[unicode].connect(self.pFilterModel.setFilterFixedString) 

    def on_completer_activated(self, text): 
     if text: 
      index = self.findText(text) 
      self.setCurrentIndex(index) 

    def setModel(self, model): 
     super(autoFillField, self).setModel(model) 
     self.pFilterModel.setSourceModel(model) 
     self.completer.setModel(self.pFilterModel) 

    def setModelColumn(self, column): 
     self.completer.setCompletionColumn(column) 
     self.pFilterModel.setFilterKeyColumn(column) 
     super(autoFillField, self).setModelColumn(column) 

會彈出造型發生在ComboBox類,或將其中的數據是通過爲addItems輸入外發生的呢?提前致謝。

回答

14

設置popup of the completer的樣式表,它將成爲QListView對象。這裏是一個可運行的例子(彈出的背景應該是黃色的):

#!/usr/bin/python 

import sys 
from PyQt4 import QtGui, QtCore 

app = QtGui.QApplication(sys.argv) 

w = QtGui.QComboBox() 
w.setEditable(True) 
c = QtGui.QCompleter(['Hello', 'World']) 
c.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion) 
c.popup().setStyleSheet("background-color: yellow") 
w.setCompleter(c) 
w.show() 

sys.exit(app.exec_()) 
+0

完美!我幾乎希望它不像抓住.popup()那麼簡單,但我不會抱怨。謝謝你,先生! – Cryptite