首页 > 编程语言 >c++QTableWidget横向填充满他的空间,且均匀分布

c++QTableWidget横向填充满他的空间,且均匀分布

时间:2024-11-27 16:00:00浏览次数:10  
标签:QHeaderView Qt Stretch QTableWidget 均匀分布 c++ tableWidget 设置

1.概要

 // 设置所有列均匀分布并填充满整个空间
    QHeaderView *header = tableWidget->horizontalHeader();
    for (int i = 0; i < tableWidget->columnCount(); ++i) {
        header->setSectionResizeMode(i, QHeaderView::Stretch);
    }

2.内容

在Qt中,如果你希望QTableWidget的列能够横向填充满整个空间,并且各列之间均匀分布,你需要对QTableWidget的列宽进行设置。通常,这可以通过设置列的伸缩性(stretch)或者使用列宽分配策略来实现。

以下是一个步骤和代码示例,展示了如何让QTableWidget的列均匀分布并填充满整个空间:

  1. 设置列的伸缩性
    对于QTableWidget的每一列,你可以使用setHorizontalHeaderStretchLastSection(true)来让最后一列填满剩余空间,但如果你希望所有列都均匀分布,则需要对每一列分别设置伸缩性。这可以通过对QHeaderView调用setSectionResizeMode方法并传递QHeaderView::Stretch作为参数来实现。

  2. 使用布局管理器
    确保QTableWidget被添加到一个布局管理器中,这样当窗口大小改变时,布局管理器会自动调整QTableWidget的大小。

  3. (可选)设置列宽
    如果你希望列有一个初始的最小宽度,你可以在添加列或设置表头时指定这个宽度。但是,请注意,当使用伸缩模式时,这些宽度将被伸缩性覆盖。

下面是一个简单的示例代码:

#include <QApplication>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>
#include <QHeaderView>

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QTableWidget *tableWidget = new QTableWidget(5, 3); // 5 行 3 列
    tableWidget->setHorizontalHeaderLabels({"Column 1", "Column 2", "Column 3"});

    // 填充一些示例数据
    for (int row = 0; row < tableWidget->rowCount(); ++row) {
        for (int col = 0; col < tableWidget->columnCount(); ++col) {
            tableWidget->setItem(row, col, new QTableWidgetItem(QString("Item %1-%2").arg(row + 1).arg(col + 1)));
        }
    }

    // 设置所有列均匀分布并填充满整个空间
    QHeaderView *header = tableWidget->horizontalHeader();
    for (int i = 0; i < tableWidget->columnCount(); ++i) {
        header->setSectionResizeMode(i, QHeaderView::Stretch);
    }

    // 将 QTableWidget 添加到布局中
    layout->addWidget(tableWidget);

    window.setLayout(layout);
    window.show();

    return app.exec();
}

在这个示例中,我们创建了一个QTableWidget,并填充了一些示例数据。然后,我们遍历了所有的列,并对每一列设置了QHeaderView::Stretch伸缩模式,这样当QTableWidget的大小改变时,所有的列都会均匀分布并填充满整个可用空间。最后,我们将QTableWidget添加到了一个垂直布局中,并将这个布局设置为了窗口的主布局。

3.运行结果

4.关联知识 

1.c++QTableWidget横向填充满他的空间 

要点

// 让最后一列填满剩余空间
    tableWidget->horizontalHeader()->setStretchLastSection(true); 

内容

在Qt中,如果你希望 QTableWidget 横向填充满它的父窗口或布局空间,你需要确保几个方面都已经配置正确。以下是一些步骤和代码示例,可以帮助你实现这个效果:

  1. 确保 QTableWidget 的列宽适应内容
    你可以使用 resizeColumnsToContents 方法,使列宽根据内容自动调整。但这通常不会完全填满可用空间。

  2. 设置列的伸缩性
    使用 setHorizontalHeaderStretchLastSection(true) 方法,让最后一列填满剩余空间。

  3. 使用布局管理器
    将 QTableWidget 添加到一个布局管理器(如 QHBoxLayout 或 QVBoxLayout)中,并确保布局管理器已经设置为填满它的父窗口。

下面是一个简单的示例代码,展示了如何实现这一点:

#include <QApplication>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>
#include <QHeaderView>

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QTableWidget *tableWidget = new QTableWidget(5, 3); // 5 行 3 列
    tableWidget->setHorizontalHeaderLabels({"Column 1", "Column 2", "Column 3"});

    // 填充一些示例数据
    for (int row = 0; row < tableWidget->rowCount(); ++row) {
        for (int col = 0; col < tableWidget->columnCount(); ++col) {
            tableWidget->setItem(row, col, new QTableWidgetItem(QString("Item %1-%2").arg(row).arg(col)));
        }
    }

    // 让最后一列填满剩余空间
    tableWidget->horizontalHeader()->setStretchLastSection(true);

    // 将 QTableWidget 添加到布局中
    layout->addWidget(tableWidget);

    window.setLayout(layout);
    window.show();

    return app.exec();
}

在这个示例中,我们创建了一个 QTableWidget,并设置了一些示例数据。然后,我们使用 setHorizontalHeaderStretchLastSection(true) 方法让最后一列填满剩余空间。最后,我们将 QTableWidget 添加到一个垂直布局 (QVBoxLayout) 中,并将这个布局设置为窗口的主布局。

这样,当窗口大小改变时,QTableWidget 会自动调整其大小以填满可用空间,同时保持列的比例。如果你希望所有列都能按比例填充空间,可以手动设置每列的伸缩性:

for (int i = 0; i < tableWidget->columnCount(); ++i) {
    tableWidget->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Stretch);
}

这将使所有列都根据可用空间进行伸缩。

2.QHeaderView::Stretch 

QHeaderView::Stretch 是 Qt 框架中用于 QHeaderView(表头视图)的一个枚举值,它指定了列或行头如何根据可用空间进行拉伸或调整大小。

在 Qt 的表格或树形控件(如 QTableView 或 QTreeView)中,QHeaderView 负责管理列或行的头部。这些头部可以包含文本或其他控件,用于标识每列或每行的内容。QHeaderView::Stretch 枚举值就是在设置这些头部如何响应控件大小变化时使用的。

当 QHeaderView 的拉伸模式设置为 QHeaderView::Stretch 时,这意味着头部将自动调整其大小,以充分利用可用空间。这通常用于确保所有列或行头都能清晰可见,无论控件的大小如何变化。

例如,如果你有一个 QTableView,并希望其列头能够自动拉伸以填满整个表格的宽度,你可以这样设置:

tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

这行代码将使得 QTableView 的水平头部(列头)根据表格的宽度自动调整每列的大小,确保没有空间浪费,同时所有列头都能被完整显示。

总之,QHeaderView::Stretch 是一种非常有用的设置,特别是在需要动态调整表格或树形控件大小的情况下,它可以帮助保持界面的一致性和可读性。

3.QHeaderView::Stretch 其他的枚举都有什么 

在 Qt 框架中,QHeaderView 类提供了多种枚举值,用于控制表头(如列头或行头)的行为和外观。除了 QHeaderView::Stretch 之外,还有一些其他的枚举值。以下是一些常见的枚举值及其说明:

  1. ResizeMode
    • QHeaderView::Interactive:用户可以手动调整列或行的大小。
    • QHeaderView::Fixed:列或行的大小固定,用户无法手动调整。
    • QHeaderView::Stretch:列或行的大小将自动调整以填充可用空间。
    • QHeaderView::ResizeToContents:列或行的大小将根据内容自动调整。
  2. 其他枚举值
    • Qt::Alignment(用于设置文本对齐方式):包括 Qt::AlignLeftQt::AlignRightQt::AlignCenter 等,用于控制表头中文本的对齐方式。
    • Qt::SortOrder(用于设置排序顺序):包括 Qt::AscendingOrder(升序)和 Qt::DescendingOrder(降序),用于控制表头点击时的排序顺序。

需要注意的是,QHeaderView 类本身可能并不直接包含所有上述枚举值,而是使用 Qt 框架中定义的通用枚举值。例如,Qt::Alignment 和 Qt::SortOrder 是 Qt 框架中广泛使用的枚举值,不仅限于 QHeaderView。

此外,QHeaderView 类还提供了多种成员函数和信号,用于控制表头的行为和外观。例如,setSectionResizeMode() 函数用于设置列或行的调整大小模式,setSortIndicator() 函数用于设置排序指示器,以及 sectionClicked() 信号在列或行头被点击时发出。

要获取 QHeaderView 类及其相关枚举值的完整列表和详细说明,建议查阅 Qt 官方文档或相关开发资源。这些资源通常提供了最准确和最新的信息,是开发 Qt 应用程序时的可靠参考。

标签:QHeaderView,Qt,Stretch,QTableWidget,均匀分布,c++,tableWidget,设置
From: https://blog.csdn.net/xie__jin__cheng/article/details/144051116

相关文章

  • ZW3DC++调用C#的DLL
    C#:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceTestWinform{publicclassClass1{publicvoidopenForm(){Form1form=newForm1();form.ShowDialog();}}}  C++:......
  • [C++] 结构体 struct 详解
    目录前言演示用编译器及其标准DevC++6.7.5Redpanda C++14先 赞 后 看  养  成 习 惯 正文1、结构体(struct)是什么概念struct与calss的区别应用场景:2、定义、声明与初始化三种定义结构体的方法:结构体变量初始化1.默认构造函数......
  • 华为OD机试E卷 --最大报酬 --24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时间(单位h)和报酬,工作的总报酬为所有已完成工......
  • 华为OD机试E卷 --绘图机器人--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析js算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线.尝试沿着横线坐标正向绘制直线直到给定的终点E期间......
  • C/C++ openCV实现实时课室管理系统
    该系统能实时展示教室的使用状态,它通过分析摄像头传回的视频信息来判断教室中是否有课程正在进行,并将这些信息即时更新到教学楼大厅的显示屏上。由于各种不可预见的原因,预先制定的课程表可能无法准确反映教室的实际使用情况,因此这个实时系统提供了更加准确的参考。核心功能:(1)......
  • C++ 类和对象(初始化列表)
    目录一、前言二、正文1.初始化列表1.1初始化的格式1.2初始化列表的使用1.2.1引用成员变量初始化1.2.2const成员变量1.2.3没有默认构造函数的成员变量必须在初始化列表初始化2.成员变量声明处给缺省值一、前言前面我们已经用所学知识运算符重载写了一个日期计算器......
  • 【leetcode】括号生成 c++回溯法
    22.括号生成 22.括号生成-力扣(LeetCode)数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8......
  • C++ 多继承基类析构虚函数
    Demo:classAnimal{public:Animal(){cout<<"animal..."<<endl;}virtual~Animal(){cout<<"~animal..."<<endl;}virtualvoidShowAnimal()=0;};classCa......
  • c++ 程序来计算三角形的面积(Program to find area of a triangle)
    给定一个三角形的边,任务是求出该三角形的面积。例如: 输入:a=5,b=7,c=8输出:三角形面积为17.320508输入:a=3,b=4,c=5输出:三角形面积为6.000000方法:可以使用以下公式简单地计算三角形的面积。其中a、b和c是三角形边长, s=(a+b+c)/2 下面是上......
  • C++异常
    目录1.C语言传统的处理错误的方式2.C++异常概念3.异常的使用1.异常的抛出和捕获2.异常的重新抛出3.异常安全4.异常规范4.自定义异常体系5.C++标准库的异常体系6.异常的优缺点1.C语言传统的处理错误的方式        传统的错误处理机制:终止程序,如assert,缺......