如何将 QTreeWidget 中的列大小调整为所需的最小空间

2022-01-11 00:00:00 qt header qtreewidget c++

我是一名学生程序员,我正在使用 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.

相关文章