QT表格的宽度自适应调整方法void setStretchLastSection ( bool stretch );

本文介绍如何使用Qt中的QTableWidget实现列头的自动填充,并确保各列宽度均匀分布,避免最后一列过宽的问题。通过设置QHeaderView::Stretch模式,可使表格列头美观且实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QTableWidget继承有QHeaderView,而QHeaderView有一个方法void setStretchLastSection ( bool stretch );
它的形参为bool 型,可以用来设置是否充满宽度。
下面是一个例子:
#include <QtGui/QApplication>#include <QtGui/QTableWidget>
#include <QtGui/QHeaderView>

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

QTableWidget *table = new QTableWidget();
table->setColumnCount(3);
table->setRowCount(5);
table->horizontalHeader()->setStretchLastSection(true); //就是这个地方
table->show();
return app.exec();

}


是能自动完成列头的自动填充,但是有一个缺点:列头中空余的其余部分都是用最后一列来填充的,这样造成的问题就是最后一列很宽,严重影响美观。

万幸,各位看官,注意了,我用了个万幸。为什么捏?因为就在楼主的楼里,我看到12楼里有个人说

/*****************************************************

ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

这样就可以了

*******************************************************/

我尝试了下,果然可以完成填充并使列平均分。


<think>好的,我现在要解决的问题是用户询问的关于两种函数指针类型:`bool(*)(bool)` 和 `void(bool)` 的含义及区别。首先,我需要明确这两个类型在C++中的定义和用途,确保自己的理解是正确的,然后再组织语言用中文进行清晰的解释。 首先,用户提到的第一个类型是`bool(*)(bool)`。根据我的知识,这应该是一个函数指针类型。函数指针的语法在C/C++中比较特殊,通常格式为返回类型后跟括号内的指针变量名和参数类型。例如,`int (*func_ptr)(int)` 表示一个指向接受int参数并返回int的函数的指针。所以,`bool(*)(bool)`中的`bool`是返回类型,括号里的`bool`是参数类型,中间用`*`表示这是一个指针。因此,这个类型是一个指向函数的指针,该函数接受一个bool参数并返回bool值。可能的应用场景包括回调函数、函数作为参数传递等,比如在算法中根据条件动态选择不同的判断函数。 接下来是第二个类型`void(bool)`。这里看起来像是一个函数类型,但用户可能指的是函数对象或函数指针的另一种表示方式。在C++中,函数类型本身确实可以写成返回类型后跟参数类型,例如`void(int)`表示一个接受int参数并返回void的函数类型。然而,当用于声明变量或参数时,通常需要使用指针或引用的形式。比如,函数参数如果写成`void (*func)(bool)`,就是接受一个函数指针。但用户这里写的是`void(bool)`,可能是在某些上下文中的简写,比如作为函数参数时,编译器会自动将其视为函数指针或函数引用。或者,可能涉及到C++11引入的std::function,比如`std::function<void(bool)>`,它是一个可以存储任何可调用对象的通用函数包装器,包括函数指针、lambda表达式等。不过用户的问题中没有提到std::function,所以可能需要区分这两种情况。 现在需要确认这两种类型的区别。`bool(*)(bool)`是明确的函数指针类型,而`void(bool)`如果是作为类型声明的一部分,可能需要看具体的使用场景。例如,在函数参数中,`void func(void (callback)(bool))` 实际上等价于`void func(void (*callback)(bool))`,因为函数类型作为参数时会自动转换为函数指针。但如果是作为类型别名,比如`using FuncType = void(bool);`,那么`FuncType*`就等同于`void(*)(bool)`的函数指针。 可能用户的问题中的`void(bool)`实际上是指函数类型本身,而`bool(*)(bool)`是指向该类型的指针。因此,它们的区别在于一个是函数类型,另一个是指向该函数类型的指针。在C++中,函数类型不能直接用来声明变量,必须使用指针或引用。例如,声明一个函数指针变量需要写成`bool (*func_ptr)(bool) = some_function;`,而函数类型本身更多用于类型别名或函数参数声明中的隐式转换。 总结来说,`bool(*)(bool)`是一个函数指针类型,指向返回bool并接受bool参数的函数;而`void(bool)`是一个函数类型,描述了一个返回void并接受bool参数的函数,但在实际使用时通常需要转换为指针或引用,或者作为std::function的模板参数。 需要验证这些理解是否正确。例如,检查函数类型和函数指针的区别,以及std::function的用法是否正确。同时,用户可能混淆了函数类型和函数指针的语法,需要明确区分它们的不同应用场景。另外,可能用户提到的`void(bool)`是在某些上下文中作为参数类型,此时实际上会被视为函数指针,但语法上允许省略指针符号,编译器会自动处理。 接下来,将这些信息整理成结构化的回答,分点说明每个类型的含义、用途和区别,并举例说明它们的使用场景,确保用户能够理解两者的不同之处和实际应用方式。同时,注意使用正确的中文术语和清晰的表达,避免技术术语的混乱。</think>在C++中,`bool(*)(bool)`和`void(bool)`分别表示不同的函数相关类型。以下是它们的详细解释和区别: --- ### **1. `bool(*)(bool)`:函数指针类型** #### **含义** - 这是一个**函数指针**类型,指向一个接受`bool`参数并返回`bool`值的函数。 - 语法解析: - `bool`: 返回值类型。 - `(*)(bool)`: 指针符号`*`表示这是一个指针,括号内的`bool`是参数类型。 #### **用途** - 用于存储或传递函数的地址,实现回调、策略模式等动态行为。 - 示例: ```cpp bool check(bool value) { return value; } // 声明函数指针变量 bool (*func_ptr)(bool) = &check; // 调用函数指针 bool result = func_ptr(true); // 返回 true ``` #### **特点** - 直接操作函数地址,性能高。 - 无法直接捕获上下文(如类的成员函数或带状态的lambda)。 --- ### **2. `void(bool)`:函数类型** #### **含义** - 这是一个**函数类型**,描述了一个接受`bool`参数且无返回值(`void`)的函数。 - 语法解析: - `void`: 返回值类型(无返回值)。 - `(bool)`: 参数类型。 #### **实际使用场景** - **隐式转换为函数指针**: 当作为函数参数类型时,编译器会自动将其转换为函数指针类型。例如: ```cpp void register_callback(void (*callback)(bool)); // 等价于 void register_callback(void callback(bool)); ``` - **类型别名(Type Alias)**: 可结合`using`定义更清晰的类型别名: ```cpp using Callback = void(bool); void register_callback(Callback* callback); // 等价于 void(*)(bool) ``` - **结合`std::function`使用**(更灵活的封装): ```cpp #include <functional> std::function<void(bool)> callback; // 可存储函数指针、lambda、成员函数等 ``` #### **与`bool(*)(bool)`的区别** - `void(bool)`是函数类型本身,而`bool(*)(bool)`是函数指针类型。 - 函数类型不能直接定义变量,必须通过指针或引用操作: ```cpp void func(bool); // 函数声明 void (*ptr)(bool) = func; // 正确:函数指针赋值 void (type)(bool) = func; // 错误!函数类型不能直接实例化 ``` --- ### **总结对比** | **特性** | `bool(*)(bool)` (函数指针) | `void(bool)` (函数类型) | |---------------------|----------------------------------|----------------------------------| | **本质** | 指向函数的指针 | 函数本身的类型 | | **变量声明** | `bool (*ptr)(bool) = &函数名;` | 不能直接声明变量,需用指针或引用 | | **参数传递** | 显式传递指针 | 隐式转换为指针(语法糖) | | **灵活性** | 仅支持普通函数或静态成员函数 | 同左,但常与`std::function`结合 | | **性能** | 高效(无额外开销) | 同左 | --- ### **实际应用建议** - 若需要高性能且仅操作普通函数,使用**函数指针**(如`bool(*)(bool)`)。 - 若需要兼容多种可调用对象(如lambda、成员函数),使用**`std::function<void(bool)>`**。 - 函数类型(如`void(bool)`)通常用于简化代码中的类型别名或函数参数声明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值