首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt: Windows /7上的QStyledItemDelegate in QTableView?

PyQt: Windows /7上的QStyledItemDelegate in QTableView?
EN

Stack Overflow用户
提问于 2011-10-22 14:33:55
回答 2查看 1.9K关注 0票数 1

我想让一个单元格/行在QTableView中看起来像这样

当运行Ubuntu时,QStyledItemDelegate同时适用于QTreeViewQTableView,但在Windows上,它只能在QTreeView上工作,而且只有在我不重新实现paint方法的情况下才能工作。

所以我的两个问题是:

如何使QStyledItemDelegateQTableView中看起来像上面的图像

如何在重新实现QStyledItemDelegate时使paint看起来类似于上面的映像

文本旁边的图像是而不是所必需的。我只是在寻找风格悬停和选择框。以防万一,我的Qt版本是4.7.2。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-29 23:42:04

我终于想够了。

我没有解决的是,为什么不重写QStyledItemDelegate.paint()与重写它有不同的效果:

代码语言:javascript
复制
def paint(self, painter, option, index):
    QStyledItemDelegate.paint(self, painter, option, index)

但这不是我问题的一部分。

我解决的问题是如何在手工绘画时获得自然的外观。以前,在绘制项目时,我使用了:

代码语言:javascript
复制
QApplication.style().drawControl(QStyle.CE_ItemViewItem, option, painter)

其中有一个问题就是不画本土的焦点或选择。我看了一下QApplication.style().drawControl()的方法签名

代码语言:javascript
复制
void QStyle::drawControl ( ControlElement element, const QStyleOption * option,
                           QPainter * painter, const QWidget * widget = 0 )

并注意到widget参数,并尝试传入一个QTreeView。啊,真灵。传递什么QTreeView并不重要,但它使视图呈现为本机。

因此,最后,呈现一个本机QTableView就像调用:

代码语言:javascript
复制
QApplication.style().drawControl(QStyle.CE_ItemViewItem, option, painter, QTreeView())

QStyledItemDelegate的油漆方法中。

票数 1
EN

Stack Overflow用户

发布于 2012-03-14 18:41:30

我在qtcentre上打开了一个请求相同内容的帖子。回答我问题的人给我提供了一个用C++编写的代码示例和显示结果的图片。它在C++中似乎运行得很好,但在PySide中却不起作用(不知道pyQt),所以它可能是个bug。

这是工作代码:

代码语言:javascript
复制
void ProgressBarDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
QStyledItemDelegate::paint(painter, option, index);

if( index.column() == 1 )
{
int progress = index.data().toInt();

QStyleOptionProgressBar progressBarOption;
progressBarOption.rect = option.rect;
progressBarOption.rect.setTop( option.rect.top() + 1 );
progressBarOption.rect.setHeight( option.rect.height() - 2 );
progressBarOption.minimum = 0;
progressBarOption.maximum = 100;
progressBarOption.progress = progress;
progressBarOption.text = QString::number(progress) + "%";
progressBarOption.textVisible = true;
progressBarOption.textAlignment = Qt::AlignCenter;

QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7860271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档