12

我是一名学生程序员,我正在使用 Qt 构建一个用于工作的 GUI 界面。我有一个QTreeWidget共有8列。需要输入到这些列中的每一列的输入相当小。在这方面,我试图找到一种方法将所有列的大小重新调整为所需的最少空间。很像单击分隔线时执行的操作。我查看了几个网站和 Qt 文档,但没有找到解决方案。查看文档后,似乎有很多方法可以做到这一点,但我无法让其中一种工作。我开始认为我需要在某处启用/禁用某些东西。就好像我在构建函数中写入的更改(此函数清除表;从我的向量中读取数据,在表中显示某些数据,然后假设重新调整标题/列的大小以适应列的内容)甚至不应用。我已经尝试了以下没有更改:

        ui->treeWidgetInjections->setColumnWidth(i, minimumWidth());
        ui->treeWidgetInjections->resizeColumnToContents(i);
        ui->treeWidgetInjections->header()->ResizeToContents;
        ui->treeWidgetInjections->header()->resizeSection(i, minimumWidth());

所有这些都在我的构建函数的末尾(删除了不相关的信息):

ui->treeWidgetInjections->clear();
    for (int i=0; i < qTreeInjectionData.size(); i++)
        {
            //fill Qtree with items;
            //fill QTree items with data;
            //re size function here;
        }

请只留下富有成效的反馈,因为我只对学习和克服这一挑战感兴趣。提前致谢!

4

2 回答 2

24

这个最小的例子对我有用:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QVBoxLayout *layout = new QVBoxLayout(centralWidget());
    QTreeWidget *tree = new QTreeWidget(this);
    layout->addWidget(tree);

    tree->setColumnCount(3);

    QStringList first, second, third;
    first  << "xxxxxxxxx"      << "xxxxxxxxxxxxx"     << "xxxxxxxx";
    second << "xxxxx"          << "xxxxxxxxxxxxxxxxx" << "xxxxx";
    third  << "xxxxxxxxxxxxxx" << "xxxxxxxxxx"        << "xxxxxxxx";

    tree->insertTopLevelItem(0, new QTreeWidgetItem(first));
    tree->insertTopLevelItem(0, new QTreeWidgetItem(second));
    tree->insertTopLevelItem(0, new QTreeWidgetItem(third));

    for(int i = 0; i < 3; i++)
        tree->resizeColumnToContents(i);
}

您需要做的就是resizeColumnToContents()在填充视图后为每一列调用一次该方法。让我知道问题是否仍然存在。

于 2012-01-24T23:45:46.267 回答
17

对我来说问题StretchLastSection是设置为 true,如果此值设置为 true,则此属性将覆盖在标题的最后一部分设置的调整大小模式。

解决方案:

_treeWidget = new UIWidgetSceneTree();
_treeWidget->header()->setStretchLastSection(false);
_treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
于 2016-05-31T06:21:21.673 回答