Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt:在委托绘制事件中渲染时,如何增长QTablewidget?_C++_Qt_Widget_Qtableview_Qlistview - Fatal编程技术网

C++ Qt:在委托绘制事件中渲染时,如何增长QTablewidget?

C++ Qt:在委托绘制事件中渲染时,如何增长QTablewidget?,c++,qt,widget,qtableview,qlistview,C++,Qt,Widget,Qtableview,Qlistview,我头痛得厉害。 让我们考虑如下: 我有一个QListView,其中有一个从QStyledItemDelegate派生的自定义委托。 在代理的paint()事件中,我在tableview中使用了一个自定义小部件render()。这只是一个statick渲染,这很好,因为我只需要显示一些东西,而不需要交互。 我的自定义小部件包含嵌入在垂直布局中的QTableWidget和一些其他标签,我用委托的sizehint()中的数据填充这些标签。然后,我使用此技术“强制更新”自定义小部件的布局:-请参阅for

我头痛得厉害。
让我们考虑如下: 我有一个QListView,其中有一个从QStyledItemDelegate派生的自定义委托。
在代理的
paint()
事件中,我在tableview中使用了一个自定义小部件
render()
。这只是一个statick渲染,这很好,因为我只需要显示一些东西,而不需要交互。
我的自定义小部件包含嵌入在垂直布局中的QTableWidget和一些其他标签,我用委托的
sizehint()
中的数据填充这些标签。然后,我使用此技术“强制更新”自定义小部件的布局:-请参阅
forceUpdate()
code。
一切似乎都很好,除了一件事:我的自定义小部件的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);
}
任何帮助都将不胜感激。提前谢谢! 我希望问题标题好,欢迎评论。
QTableView
sizeHint()
不依赖于其内容。计算布局后,可以从中获得表格的理想尺寸

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

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

答案不太正确,但几乎正确<代码>表格小部件->调整大小(m_ui->hlBottom->sizeHint().width(),m_ui->hlBottom->sizeHint().height())with hlBottom=包含rebelious QTableWidget的水平布局。多亏了你,我找到了解决问题的正确方法!我在调用
forceUpdate()
后执行此操作。谢谢!!!也许你可以编辑你的答案,我会把它标记为解决方案等等;)