2011-11-18 241 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