QTableWidget:如何减少垂直间距填充并使线条更紧凑?

9

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

然而,我无法通过减少垂直空白来使网格看起来更加紧凑。我看到Qt文档(例如这里)讨论了小部件周围的

  • 边距
  • 边框
  • 填充

但是,当我设置这些时,我只得到整个网格小部件周围的变化,而不是内部的变化。

我如何直接使用样式表或硬编码选项来设置这个问题以使QTableWidget显示更紧凑?

5个回答

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”按钮。


5
你要寻找的解决方案在我看来非常愚蠢,但它确实有效。你需要设置标题的 defaultSectionSize() 成员,通过 verticalHeader() 和 horizontalHeader() 访问。我通常不设置列宽度,因为我的大多数项目都涉及添加行而不是列,我只调用 resizeColumnsToContents 或手动调整大小。但是,行是令人烦恼的。我通常使用 QFontMetrics 获取字体的高度,并添加 2。任何后续添加的行都应该具有这个高度,这样就能实现更紧凑的外观。
希望这可以帮到你。
编辑:未经测试的代码:
QFontMetrics fm( my_font );
int h = fm.height() + 2;
my_table->verticalHeader()->setDefaultSectionSize( h );

Paul,我的代码无法正常运行。我可以获取fmh并进行设置,但表格外观并没有改变。无论我删除行并添加新行,都会有额外的垂直间距。 - Dirk Eddelbuettel

3

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

由于您正在使用QTableWidget,我认为没有任何方法可以更改其内部模型返回的大小提示。即使Qt样式表文档中也没有提到这方面的内容。


嗨Kaleb,感谢你的回答——我或多或少已经得出了类似的结论(“无法做到这一点”),但是在问题上有第二个人的帮助是很好的。 - Dirk Eddelbuettel

0

我尝试了这里所有的答案,但都没有成功。然而对我有效的是设置以下两个

    table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents)
    table->verticalHeader()->setMaximumSectionSize(10)

0

QTableWidget -> verticalHeader -> setMinimumSectionSize() 是正确的方法,而且可以在ui中设置。


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