8

PyQT 4.8.3を使用して、2つのQListWidgetsを使用してダイアログを作成し、両方とも複数選択できるようにしています。

  1. これらのQListWidgetsが有効になっている場合、選択されたアイテムはQListWidgetにフォーカスがある場合にのみ青色で強調表示され、フォーカスがない場合はハイライトが薄い灰色になります。

  2. また、QListWidgetsが無効になっている場合、フォーカスがないにもかかわらず、選択したアイテムが青色で強調表示されていることもわかりました。

ここに画像の説明を入力してください

ユーザーが1つのリストから別のリストに移動すると、これは非常に混乱します。

開発者として、私はライトグレー/焦点が合っていない、ブルー/無効な動作は望ましくないと思います。それらを変更するためのアドバイスをいただければ幸いです。

QListWidget、QListView、QAbstractViewのドキュメントを調べましたが、該当するものは何も見つかりませんでした。また、運がなくてもスタイルシートのドキュメントを調べました。

4

3 に答える 3

10

ここではスタイルシートを使用します。この例では、この中で選択されたアイテムがQListWidget青色で強調表示され、QListWidgetが無効になっている場合、またはフォーカスがない場合、灰色に変わります。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class myWindow(QtGui.QWidget):

    def __init__(self, parent=None):
        super(myWindow, self).__init__(parent)

        self.setStyleSheet( """ QListWidget:item:selected:active {
                                     background: blue;
                                }
                                QListWidget:item:selected:!active {
                                     background: gray;
                                }
                                QListWidget:item:selected:disabled {
                                     background: gray;
                                }
                                QListWidget:item:selected:!disabled {
                                     background: blue;
                                }
                                """
                                )

        self.listWidget = QtGui.QListWidget(self)
        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

        self.button = QtGui.QPushButton(self)
        self.button.setText("Disable the list!")
        self.button.clicked.connect(self.on_button_clicked)

        self.layout = QtGui.QVBoxLayout(self)
        self.layout.addWidget(self.button)
        self.layout.addWidget(self.listWidget)

        for itemNumber in range(5):
            item = QtGui.QListWidgetItem(self.listWidget)
            item.setText("Item {0}".format(itemNumber))
            self.listWidget.addItem(item)


    @QtCore.pyqtSlot()
    def on_button_clicked(self):
        enable = False if self.listWidget.isEnabled() else True

        self.listWidget.setEnabled(enable)

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('myWindow')

    main = myWindow()
    main.show()

    sys.exit(app.exec_())
于 2013-01-15T08:13:59.260 に答える
2

最も簡単なアプローチは、 QPaletteを変更することです(スタイルシートが機能しない場合)。
変更したい値(のみ)でQListViewのパレットを設定するだけです。

そのようなことをしてください:

QPalette customPalette;
QPalette orginalPallete = listView->palette();
customPalette->setBrush(QPalette::Disabled, QPalette::Highlight,
                        orginalPallete.brush(QPalette::Active, QPalette::Highlight));
listView->setPalette(customPalette);

パレットプロパティがどのように機能するかを読むことをお勧めします(親とQApplicationからの値をマージするため、変更したいものだけを設定する必要があります)。
QApplicationのパレットを変更することにより、この色をグローバルに変更することもできます。

于 2013-01-15T11:07:47.917 に答える
1

QItemDelegateを使用して、カスタム表示機能を提供できます。お役に立てば幸いです。再実装できます

virtual void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
于 2013-01-15T05:23:35.573 に答える