如何在Qt中为QTableView对象获取正确的行高?

9

从这个截图中可以看到行内有很多空间:

alt text

我使用了这些函数来进行调整大小:

resizeRowsToContents();
resizeColumnsToContents();

我该如何更好地调整单元格/行的大小?

6个回答

11

试试这些:

verticalHeader()->setDefaultSectionSize(int size)
horizontalHeader()->setDefaultSectionSize(int size)

5

试试这个:

void QHeaderView::setResizeMode(QHeaderView::ResizeToContents);

这对于列非常有效,但似乎在行上不起作用。 - Remy Blank
对我来说,这似乎对行起作用...嗯(PyQt5) - mike rodent

2
在Qt中,当你在一个没有显示垂直标题的空表格上调用resizeRowsToContents时,似乎存在一个bug,它无法准确地调整行的大小。考虑到表格通常是空的,这确实是一个麻烦的问题。幸运的是,在qtcentre线程上我找到了一个解决方法,如下所示: 如果表格/模型不为空,请使用以下方法:
        tableView->resizeRowsToContents();
        const int rowHeight = tableView->verticalHeader()->sectionSize(0);
        tableView->verticalHeader()->setDefaultSectionSize(rowHeight);

否则,这里有一个解决方法:
        // workaround for Qt empty table auto-row-sizing problem
        const int rowHeight = tableView->verticalHeader()->minimumSectionSize();
        tableView->verticalHeader()->setDefaultSectionSize(rowHeight);

嗯...这似乎将每一行的高度都设置为相同的。 - mike rodent
@mikerodent 对于一个空表格,是的,它确实会生效。在我的情况下,我希望所有行的高度都相同,所以这样做也没问题。 - Patrick Parker
我的表不是空的,而且行高也不同。在我的系统中,这会导致每一行具有相同的高度。因此,在调用setDefaultSectionSize之前调用resizeRowsToContents没有意义。 - mike rodent
@mikerodent 是的,有一个影响。resizeRowsToContents 会影响已经存在内容的行。例如,如果您允许自动换行,某些行可能会变成双倍高度。setDefaultSectionSize 影响尚未插入的未来行。 - Patrick Parker

1

我正在使用Qt 4.7,这对于我的QTableView有效:

tableView->resizeColumnsToContents();
tableView->resizeRowsToContents();
tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

0

我有同样的问题,似乎还有许多其他人也是如此:

http://www.qtforum.org/article/13421/qtableview-how-to-make-rows-size-smaller.html

我为一个只有几行的简单表格写了一个快速的hack程序(假设所有行都具有相同的文本高度,这可能仅适用于某些字体,也许仅适用于Windows):

int rowHeight = ui.tableView_Available->rowHeight(0) *1/2;
for (unsigned int i = 0; i < model->rowCount(); i++)
  ui.tableView_Available->verticalHeader()->resizeSection(i, rowHeight);

-1
QTimer::singleShot(1, ui->tableView, SLOT(resizeRowsToContents()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接