かなり古い質問ですが、誰かが役に立つと思うかもしれません。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));
}
}