1

現在、Qt と QTreeView のスタイルシートに関する問題に直面しています。ツリーで現在選択されている項目を太字で表示したいだけです。私は以前に調査を行いましたが、多くのフォーラムで提供されている解決策は次のとおりです。

myView->setStyleSheet("QTreeView::item:selected {font: bold;}");

しかし、これは私にはうまくいきません。QTreeView {font: bold;}どのアイテムが(すべてのアイテムに対して)機能するかを試してみましたが、QTreeView::item:selected {background-color:red;}機能します。選択したアイテムのフォントが機能しないのはなぜですか? ありがとう !

4

1 に答える 1

2

かなり古い質問ですが、誰かが役に立つと思うかもしれません。Qt 5.3を使用して同じ問題を抱えています。

qt-centerで、スタイルシートでは実行できないという情報を見つけました。

QListWidget で選択した項目のフォントの太さ (またはフォント サイズの最小値) を変更する方法はありますか? いいえ、そのようなフォント スタイル オプションは QWidget に適用されるため、派生 QWidget の特別な動作、つまり QListWidget の選択項目ではなく、QWidget 全体 (この場合は QListWidget) にフォント (またはその他のフォント サイズ) スタイル オプションを適用できます。 .

スタイルを変更できなかったので、QTreeViewにも当てはまると思います。境界線、色、背景色を変更できますが、フォントに関しては何も変更できません。まず、QTreeView を再実装しているので、paintEvent 関数を再実装する必要があると考えました。これもうまくいきませんでした。

回避策:

しかし、QStyledItemDelegate を使用していくつかの回避策を見つけました。基本的に、QTreeView をサブクラス化し、次に QStyledItemDelegate をサブクラス化する必要があります。QTreeView をサブクラス化しなくてもうまくいくかもしれませんが、選択した項目と選択解除した項目で何らかのシグナルをキャッチし、setItemDelegateForRow と setItemDelegateForColumn を呼び出す必要があります (交差するセルのみを変更する必要があります)。

この方法で QStyledItemDelegate::paint を再実装します。

QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItemV4 editedOpt = option;
    editedOpt.font = QFont("Arial", 23, 500);
    initStyleOption( &editedOpt, index );
    QStyledItemDelegate::paint(painter, editedOpt, index);
}

QTreeView::selectionChanged (または単純な QTreeView と catch QItemSelectionModel::selectionChanged) を再実装します。

void CustomTreeView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
    foreach(const QModelIndex &index, selected.indexes()) {
        setItemDelegateForRow(index.row(), new CustomDelegate(this));
        setItemDelegateForColumn(index.column(), new CustomDelegate(this));
    }
    foreach(const QModelIndex &index, deselected.indexes()) {
        setItemDelegateForRow(index.row(), new QStyledItemDelegate(this));
        setItemDelegateForColumn(index.column(), new QStyledItemDelegate(this));
    }
}
于 2014-09-17T12:43:57.823 に答える