问:在委托绘画事件中渲染时如何增长QTablewidget?

时间:2016-12-01 10:52:15

标签: c++ qt widget qtableview qlistview

我很头疼。
我们考虑以下几点: 我有一个QListView,其中包含一个派生自QStyledItemDelegate的自定义委托 在委托的paint()事件中,我在tableview中使用了我render()的自定义窗口小部件。这只是一个静态渲染,它很好,因为我只需要展示一些没有交互的东西 我的自定义窗口小部件包含一个嵌入在垂直布局中的QTableWidget以及一些其他标签,我在委托的sizehint()中填充数据。然后,我使用这种技术“强制更新”自定义窗口小部件的布局:Qt: How to force a hidden widget to calculate its layout? - 请参阅forceUpdate()代码。
一切似乎都很好,除了一件事:我的自定义小部件的tablewidget似乎在需要时垂直增长(当我在其中添加行时),但行不会呈现!收缩是可以的,为自定义小部件设置一个非常大的高度以某种方式解决了问题,但它不优雅,只是报告问题。
由于它只是渲染,因此不是交互式,我不想要滚动条,但我需要QTableWidget缩小/增长以显示添加的数据。不多也不少。
自定义小部件的GUI由设计师完成,一切都设置为动态增长和缩小。捕获量在哪里?有没有人见过这样的行为?如果是,那么魔术参数组合是什么?

一些眼睛的代码:

QSize ResultsRunDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {   
    // updating custom widget's data
    item_widget->UpdateDisplay(index.row()+1);
    forceUpdate(item_widget); //updating the layout
    return item_widget->sizeHint(); }

void ResultsRunDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{

    QPaintDevice* originalPaintDev = painter->device();
    if (option.state & QStyle::State_Selected)
        painter->fillRect(option.rect, option.palette.highlight());

    painter->end();


    forceUpdate(item_widget);
    item_widget->render(painter->device(), QPoint(option.rect.x(), option.rect.y()), QRegion(0, 0, item_widget->rect().width()/*item_widget->sizeHint().width()*/, /*item_widget->rect().height()*/item_widget->sizeHint().height()), QWidget::DrawChildren);

    painter->begin(originalPaintDev);
}

非常感谢任何帮助。 Thx提前! 我希望问题标题很好,欢迎评论。

1 个答案:

答案 0 :(得分:1)

sizeHint()的{​​{1}}遗憾地不依赖于其内容。计算布局后,您可以从

获得表格的理想尺寸
QTableView

并相应调整小部件的大小。