C++ 如何更改QTableWidget的最小大小?

C++ 如何更改QTableWidget的最小大小?,c++,qt,user-interface,qtablewidget,C++,Qt,User Interface,Qtablewidget,我将一些QTableWidget递归地嵌入到彼此的内部。最终的GUI将有4到几千个正方形。以下是仅显示16个正方形的示例屏幕截图: 因为需要显示的正方形太多(数千个),所以我需要每个正方形的最小大小为5x5像素 问题是我用我的鼠标把窗口调整得尽可能小。。。然后我看到了你在截图上看到的东西!屏幕截图中的每个正方形约为18x18像素。。。它不够小,无法在屏幕上容纳数千个正方形有什么东西阻止我使用鼠标缩小正方形的大小 如何使此屏幕截图中的方块具有较小的最小尺寸? main.cpp: #include

我将一些QTableWidget递归地嵌入到彼此的内部。最终的GUI将有4到几千个正方形。以下是仅显示16个正方形的示例屏幕截图:

因为需要显示的正方形太多(数千个),所以我需要每个正方形的最小大小为5x5像素

问题是我用我的鼠标把窗口调整得尽可能小。。。然后我看到了你在截图上看到的东西!屏幕截图中的每个正方形约为18x18像素。。。它不够小,无法在屏幕上容纳数千个正方形有什么东西阻止我使用鼠标缩小正方形的大小

如何使此屏幕截图中的方块具有较小的最小尺寸?

main.cpp:

#include "TableWidget.h"

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

    TableWidget *x1 = new TableWidget(2,2);
    for(int i = 0; i < x1->rowCount(); i++) {
        for(int j = 0; j < x1->columnCount(); j++) {
            x1->setCellWidget(i,j,new TableWidget(2,2));
        }
    }

    QGridLayout *layout = new QGridLayout;
    layout->addWidget(x1, 0, 0);

    QWidget *window = new QWidget;
    window->setLayout(layout);
    window->show();

    return a.exec();
}
TableWidget.cpp:

TableWidget::TableWidget(int rows, int columns, QWidget *parent) :
    QTableWidget(rows,columns,parent)
{
    //------
    QTableWidget::horizontalHeader()->hide();
    QTableWidget::verticalHeader()->hide();
    //------
    QTableWidget::horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    QTableWidget::verticalHeader()->setResizeMode(QHeaderView::Stretch);
    //------
    QTableWidget::setEditTriggers(QAbstractItemView::NoEditTriggers);
    //------
    QTableWidget::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    QTableWidget::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //------
    QTableWidget::horizontalHeader()->setMinimumSectionSize(1);
    QTableWidget::verticalHeader()->setMinimumSectionSize(1);
    QTableWidget::horizontalHeader()->setDefaultSectionSize(1);
    QTableWidget::verticalHeader()->setDefaultSectionSize(1);
    // FIXME, the minimum size is not 1 pixel... it is like 10 pixels...
    //------
    QTableWidget::setSelectionMode(QAbstractItemView::NoSelection);
}

更新-根据下面的评论,我尝试渲染更多的正方形,这里是1024:


在我的WindowsXP上,我无法将大多数程序缩小到148x96以下。它可能与您的小部件完全无关


测试256+个方块,告诉我们每个方块有多大


Windows(无论您使用的是什么)都有这个限制,以保证用户能够看到顶部的按钮、标题的几个字母以及足够的滚动条空间。因此,用户不会丢失程序,他们将程序缩小到3x2px。

在windows操作系统上,有一个最小窗口大小,大约有这么宽,我打赌其他操作系统也有限制。我打赌这不是小部件的限制,而是操作系统的限制。使用10000个小部件进行测试,看看当您将窗口尽可能小时会发生什么。使用256个以上的正方形进行测试,并告诉我们每个正方形有多大。@MooingDuck这些不是“窗口”。有一个QWidget和一堆QtableWidget(实际上是TableWidget)。仅供参考,QTableWidget的类继承权:
QTableWidget-->QTableView-->QAbstractItemView-->QAbstractScrollArea-->QFrame-->QWidget-->QObject和QPaintDevice
(我将尝试使用更多的方块)在我的WindowsXP上,我不能收缩低于148x96的大多数程序。它可能与您的小部件完全无关。我只是用1024个正方形填充了窗口,并能够将窗口缩小到108x142像素。因此,限制在于GUI窗口没有变小,而不是QTableWidget。也许QWidget的默认最小大小为108x142像素?
TableWidget::TableWidget(int rows, int columns, QWidget *parent) :
    QTableWidget(rows,columns,parent)
{
    //------
    QTableWidget::horizontalHeader()->hide();
    QTableWidget::verticalHeader()->hide();
    //------
    QTableWidget::horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    QTableWidget::verticalHeader()->setResizeMode(QHeaderView::Stretch);
    //------
    QTableWidget::setEditTriggers(QAbstractItemView::NoEditTriggers);
    //------
    QTableWidget::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    QTableWidget::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //------
    QTableWidget::horizontalHeader()->setMinimumSectionSize(1);
    QTableWidget::verticalHeader()->setMinimumSectionSize(1);
    QTableWidget::horizontalHeader()->setDefaultSectionSize(1);
    QTableWidget::verticalHeader()->setDefaultSectionSize(1);
    // FIXME, the minimum size is not 1 pixel... it is like 10 pixels...
    //------
    QTableWidget::setSelectionMode(QAbstractItemView::NoSelection);
}