我目前正面临一个关于Qt和QTreeView样式表的问题。我只想用粗体写出树中选择的当前项。我以前做过研究,在许多论坛上给出的解决办法是:
myView->setStyleSheet("QTreeView::item:selected {font: bold;}");但这对我不管用。我尝试了QTreeView {font: bold;},它可以工作(对每一项),QTreeView::item:selected {background-color:red;}也能工作。为什么字体对选定的项无效?谢谢!
发布于 2014-09-17 12:43:57
很老的问题,但也许有人会发现它有用。我在使用QT5.3时也遇到了同样的问题。
我发现了一些关于qt中心的信息,它不能由样式表来完成。
是否有办法在QListWidget中更改所选项目的字体大小(或最小字体大小)?不,因为这种字体样式选项适用于QWidgets,所以您可以将字体(或其他类似字体大小)样式选项应用于整个QWidget (在本例中为QListWidget),而不是应用于派生QWidget (即QListWidget的选择项)的特殊行为。
我认为它也适用于QTreeView,因为我也无法改变它的风格。我可以改变边框,颜色,背景色,但不涉及字体。首先,我认为我必须重新实现paintEvent函数,因为我要重新实现QTreeView。这也没什么用。
解决方案:
但我找到了一些使用QStyledItemDelegate的解决办法。基本上,您必须将QTreeView子类,然后是子类QStyledItemDelegate。也许它可以在没有子类QTreeView的情况下工作,但是您必须以某种方式捕获一些带有选定和取消选择的项的信号,并调用setItemDelegateForRow和setItemDelegateForColumn (它应该只改变相交单元格)。
以这种方式重新实现QStyledItemDelegate::way:
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));
}
}https://stackoverflow.com/questions/13413156
复制相似问题