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

Wyl*_*SG. 10 c++ qt header qtreewidget

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

        ui->treeWidgetInjections->setColumnWidth(i, minimumWidth());
        ui->treeWidgetInjections->resizeColumnToContents(i);
        ui->treeWidgetInjections->header()->ResizeToContents;
        ui->treeWidgetInjections->header()->resizeSection(i, minimumWidth());
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pie*_*ice 21

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

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);
}
Run Code Online (Sandbox Code Playgroud)

您需要做的就是resizeColumnToContents()在填充视图后为每个列调用一次方法.如果问题仍然存在,请告诉我.

  • 不幸的是,此方法仅根据我的标题内容调整大小。数据以自动换行方式显示。 (6认同)

小智 11

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

解:

_treeWidget = new UIWidgetSceneTree();
_treeWidget->header()->setStretchLastSection(false);
_treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
Run Code Online (Sandbox Code Playgroud)

  • 什么是“UIWidgetSceneTree”?它是您自定义的“QTreeView”子类吗?这让这个答案有点令人困惑。 (2认同)