【问题标题】:QTableWidget: How can I get tighter lines with less vertical spacing padding?QTableWidget:我怎样才能用更少的垂直间距填充更紧密的线条?
【发布时间】:2010-02-01 18:51:19
【问题描述】:

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

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

  • 边距
  • 边框
  • 填充

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

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

【问题讨论】:

    标签: qt qt4 qtablewidget


    【解决方案1】:

    获得“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”的按钮。

    【讨论】:

      【解决方案2】:

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

      希望对您有所帮助。

      编辑:

      未经测试的代码:

      QFontMetrics fm( my_font );
      int h = fm.height() + 2;
      my_table->verticalHeader()->setDefaultSectionSize( h );
      

      【讨论】:

      • 保罗,我不能去上班。我得到fmh 并且可以设置,但是表格的外观没有变化。我是否删除行并添加新行也无关紧要——它们都有一点额外的垂直间距。
      【解决方案3】:

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

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

      【讨论】:

      • 嗨,Kaleb,我很欣赏这个答案——我或多或少得出了类似的结论(“就是不能这样做”),但最好再看一眼问题。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我在这里尝试了所有答案,但没有成功。对我有用的是设置 both 以下内容。

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

        【讨论】:

          猜你喜欢
          • 2023-02-04
          • 2012-11-04
          • 1970-01-01
          • 1970-01-01
          • 2022-01-05
          • 1970-01-01
          • 1970-01-01
          • 2023-02-10
          • 2011-05-27
          相关资源
          最近更新 更多