如何将 QTreeWidget 中的列大小调整为所需的最小空间 [英] How to resize columns in QTreeWidget to the minimum space required

查看:54
本文介绍了如何将 QTreeWidget 中的列大小调整为所需的最小空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am a student programmer and I am using Qt to build a GUI interface for work. I have a QTreeWidget that has a total of 8 Columns. The input that needs to be entered into each one of these columns is fairly small. In that regard, I was trying to find a way to re-size all of the columns to the least amount of space required. much like the action that is performed when you click on the dividers. I have looked over several websites and the Qt documentation and haven't found a solution. After looking over the documentation it seems that there are a bunch of ways to do this but I cant get one to work. I am beginning to think that I need to enable/disable something somewhere. It's as if the changes I write in to my build function (This function clears the table; Reads data from my vector, displays certain data in the table, and then is suppose to re-size the headers/columns to just enough size to fit the contents of the column) are not even applied. I have tried the following with no changes:

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

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

All of these are in the end of of my build Function (unrelated info removed):

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

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

Please only leave productive feedback as I am only interested in learning and overcoming this challenge. Thanks in advance!

推荐答案

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

This minimal example works for me:

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() 方法.如果问题仍然存在,请告诉我.

All you need to do is call the resizeColumnToContents() method once for every column after you populate the view. Let me know if the problem persists.

这篇关于如何将 QTreeWidget 中的列大小调整为所需的最小空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆