9

QTableWdiget非常适合简单的网格显示。更改颜色、字体等很简单。

但是,我没有设法让网格看起来更“紧凑”,垂直空白更少。我看到 Qt 文档讨论(例如这里)关于

  • 利润
  • 边界
  • 填充

围绕小部件,但是当我设置这些时,我只会在整个网格小部件周围而不是内部得到更改。

如何直接设置它(使用样式表或硬编码选项)以使 QTableWidget 显示更紧密?

4

5 回答 5

5

您正在寻找的是一个非常愚蠢的解决方案恕我直言,但它有效。您需要设置标题的 defaultSectionSize() 成员。通过verticalHeader() 和horizo​​ntalHeader() 访问。我从来没有真正设置过这个 b/c 的列宽,我的大多数项目都涉及我添加行,而不是列,我只是调用 resizeColumnsToContents 或手动调整大小。但是,这些行令人讨厌。我通常使用 QFontMetrics 获取字体的高度,然后添加 2。任何后续添加的行都应该有这个高度,并且 viola:看起来更紧凑。

希望有帮助。

编辑:

未经测试的代码:

QFontMetrics fm( my_font );
int h = fm.height() + 2;
my_table->verticalHeader()->setDefaultSectionSize( h );
于 2010-02-16T02:34:19.403 回答
5

得到“h”的代码可能不正确。这只是一个例子。复制并粘贴以下相当基本的代码。更改“setDefaultSectionSize()”中的值,重新编译并运行。你应该看到区别。将此设置为 10 或 50 会产生可见的结果。在上面的代码中,QFontMetrics 或 QFont 可能搞砸了。

你可以使用任何你想得到的高度,但字体大小是最有意义的。

#include <QtGui>

int main( int argc, char* argv[] )
{
 QApplication app( argc, argv );

 QDialog* my_dialog  = new QDialog();
 QHBoxLayout* layout  = new QHBoxLayout();
 QTableWidget* my_table_widget = new QTableWidget( my_dialog );

 my_table_widget->setRowCount( 10 );
 my_table_widget->setColumnCount( 10 );
 my_table_widget->verticalHeader()->setDefaultSectionSize( 15 );
 layout->addWidget( my_table_widget );
 my_dialog->setLayout( layout );
 my_dialog->resize( 500, 200 );
 my_dialog->show();

 return app.exec();
}

编辑:我不知道如何在这里格式化代码块......原谅我。:)

编辑 2:我解决了这个问题,下面的简单tighterTable.pro文件会有所帮助。

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

SOURCES += tighterTable.cpp    # if that is the filename

感谢一大群胖子。顺便说一句:编辑为代码只是缩进四个空格,和/或点击格式化行中带有小“101010”的按钮。

于 2010-03-07T05:40:48.543 回答
3

QTableWidget 是一个方便的模型和视图。通常,QAbstractItemModel的 data() 方法提供了一个SizeHintRole,用于告诉视图每个单元格的大小。

由于您使用的是 QTableWidget,我认为您无法更改其内部模型返回的大小提示。甚至Qt 样式表文档也没有提及该区域。

于 2010-02-01T20:03:49.570 回答
0

QTableWidget -> verticalHeader -> setMinimumSectionSize() 是对的,可以在ui中设置。

于 2017-06-07T03:49:24.240 回答
0

我在这里尝试了所有答案,但没有成功。不过,对我有用的是设置以下两项

    table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents)
    table->verticalHeader()->setMaximumSectionSize(10)
于 2019-04-07T21:45:03.003 回答