c++ - Qt:如何在委托(delegate)绘制事件中渲染时增加 QTablewidget?

标签 c++ qt widget qtableview qlistview

我很头疼。
让我们考虑以下几点: 我有一个带有派生自 QStyledItemDelegate 的自定义委托(delegate)的 QListView。
在委托(delegate)的 paint() 事件中,我使用了一个自定义小部件,我在 tableview 中 render() 。这只是一个静态渲染,它很好,因为我只需要显示一些东西而不需要交互。
我的自定义小部件包含一个嵌入垂直布局的 QTableWidget 和我在委托(delegate)的 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);
}

如有任何帮助,我们将不胜感激。提前致谢! 希望题目不错,欢迎评论。

最佳答案

不幸的是,QTableViewsizeHint() 并不依赖于它的内容。布局计算好后,可以从中得到理想的表格尺寸

int width = view->verticalHeader()->width() + view->horizontalHeader()->width() + view->frameWidth()*2;
int height= view->horizontalHeader()->height() + view->verticalHeader()->height() + view->frameWidth()*2;

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

关于c++ - Qt:如何在委托(delegate)绘制事件中渲染时增加 QTablewidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908715/

相关文章:

c++ - std::unordered_map<std::String, myClass*> - std::unordered_map::erase() 是否调用 myClass 的 DTor?

c++ - 在windows上的qt项目中包含ffmpeg导致程序意外结束

qt - 在 macOS 11.3 上找不到 "gl.h"失败

Android appWidgetProvider onEnabled 从未在平板电脑上调用过

c++ - Perl 与 Ultraedit 脚本

c++ - C++ 中的格式化输入

带有项目委托(delegate)的 QTListView - 选定项目的更高项目行

c++ - Qt for Nokia 中的样式表

python - python 有没有好的规划 GUI 组件(widget)?

C++ - 仅使用无符号整数实现快速排序?