Qt 第六章 splitter的例子。

这篇博客介绍了Qt官方教程中关于splitter的使用示例,详细讲解了编码选择的重要性,特别是在GBK、ISO、UTF-8和UTF-16之间的区别。内容包括设置plainText的方法及其覆盖行为,以及在示例中只有一个.pro和.cpp文件的结构。同时,博主提到了tr函数的调用方式,并指出上传图片时无法自动缩放的问题,导致部分图像无法完全显示。

Qt 官方的教程。

第六章 splitter的例子。


(1)编码要选择GBK的那个。





如果是选择ISO和UTF-8的可以兼容,但是无法编辑,就是打上去的字显示不出来。

如果选择UTF-16的,直接乱码。



(2)

editor3->setPlainText("Mein Kind, meine Schwester,\n"
                          "denke an den Traum\n"
                          "dort hin(unter) zu gehen um zusammen\n"
                          "zu leben und in aller Ruhe zu lieben,\n"
    &

<think>我们正在讨论Qt中的QSplitter的setStretchFactor方法。根据引用[1][2][3],这个方法用于设置分割窗口中某个子部件的伸缩因子(stretchfactor)。注意:这里的伸缩因子并不是直接设置比例,而是会影响部件在分割器中的大小策略(sizepolicy)。关键点:1.setStretchFactor(int index, intstretch)有两个参数:index表示子部件的索引(从0开始),stretch表示要设置的伸缩因子。2.这个方法实际上等同于获取指定索引处部件的sizePolicy,然后设置水平和垂直方向的stretch,再重新设置sizePolicy。3.注意:引用[1]提到,这个伸缩因子并不是实际有效的伸缩因子,实际有效的伸缩因子是通过部件的初始大小乘以这个因子计算得到的。因此,它影响的是当分割器大小改变时,每个部件如何按比例调整大小。使用步骤:1.创建QSplitter并添加子部件。2.调用setStretchFactor为每个子部件设置伸缩因子。示例代码(参考引用[2]和[3]):假设我们有一个水平分割器,包含两个文本编辑框,我们希望第一个部件占据1份,第二个部件占据2份(即比例为1:2): ```cppQSplitter*splitter =new QSplitter(Qt::Horizontal); splitter->addWidget(new QTextEdit("Left"));splitter->addWidget(newQTextEdit("Right"));//设置第一个部件(索引0)的伸缩因子为1,第二个部件(索引1)的伸缩因子为2splitter->setStretchFactor(0,1); splitter->setStretchFactor(1,2);```注意:在分割器大小改变时,这两个部件将按照1:2的比例调整大小。也就是说,当整个分割器变宽时,第二个部件将会比第一个部件获得更多的额外空间。重要提示: -这个比例是相对的。例如,如果你有三个部件,分别设置伸缩因子为1,2,3,那么它们的宽度比将是1:2:3。 -设置伸缩因子后,分割器会重新计算子部件的大小。另一种设置比例的方法是使用setSizes(),它直接设置每个部件的像素大小。但是,setStretchFactor设置的是比例关系,当窗口大小改变时,它会按照比例调整。参考引用[3]的示例:```cppQSplittersplitter; QTextEdit*t1 =new QTextEdit; QTextEdit*t2 =new QTextEdit; QTextEdit*t3 =new QTextEdit; splitter.addWidget(t1);splitter.addWidget(t2); splitter.addWidget(t3);//设置第二个部件(索引1)的伸缩因子为1,第三个部件(索引2)的伸缩因子为2splitter.setStretchFactor(1,1);splitter.setStretchFactor(2,2);```在这个例子中,第一个部件(索引0)没有设置伸缩因子,将使用默认的伸缩因子(0)。但是,一旦设置了某些部件的伸缩因子,分割器会按照设置的比例来分配空间。注意:如果没有设置,则所有部件默认的伸缩因子都是0,这意味着它们不会扩展,但Qt实际上会按照初始大小来分配。总结:使用setStretchFactor可以方便地设置分割器中各子部件的伸缩比例,从而在窗口大小变化时按比例调整子部件的大小。注意:在QtDesigner中,你也可以在属性编辑器中设置这些属性,而不需要编写代码。如果用户希望固定某个部件的大小,可以将伸缩因子设置为0,然后使用setCollapsible()方法防止其被折叠。相关问题:1.如何在QSplitter中设置初始大小?2.如何让QSplitter中的某个部件不可调整大小?3. QSplitter的setSizes()和setStretchFactor()有什么区别?4.如何保存和恢复QSplitter的状态?5.如何实现一个可以折叠的面板(类似IDE中的侧边栏)?</think>### Qt中设置QSplitter伸缩因子的方法 在Qt中,使用`setStretchFactor()`方法可以设置分割窗口(QSplitter)中各子部件的伸缩比例。该方法控制当父容器大小改变时,子部件如何按比例分配额外空间。 #### 核心方法 ```cpp void QSplitter::setStretchFactor(int index, int stretch) ``` - **index**:子部件的索引位置(从0开始) - **stretch**:伸缩因子值(整数,表示相对比例) #### 使用示例 ```cpp QSplitter *splitter = new QSplitter(Qt::Horizontal); // 水平分割器 // 添加三个文本编辑框 QTextEdit *t1 = new QTextEdit("Left"); QTextEdit *t2 = new QTextEdit("Middle"); QTextEdit *t3 = new QTextEdit("Right"); splitter->addWidget(t1); splitter->addWidget(t2); splitter->addWidget(t3); // 设置伸缩比例:左::右 = 1:2:3 splitter->setStretchFactor(0, 1); // 索引0 (t1) splitter->setStretchFactor(1, 2); // 索引1 (t2) splitter->setStretchFactor(2, 3); // 索引2 (t3) ``` #### 关键特性说明 1. **比例关系** 伸缩因子表示**相对比例**而非绝对尺寸。上例中,当分割器大小改变时: - 总分配因子:$1 + 2 + 3 = 6$ - t1获得额外空间的$1/6$ - t2获得$2/6 = 1/3$ - t3获得$3/6 = 1/2$ 2. **实际效果等价于** 该方法等同于直接设置部件的sizePolicy: ```cpp QWidget *widget = splitter->widget(index); QSizePolicy policy = widget->sizePolicy(); policy.setHorizontalStretch(stretch); policy.setVerticalStretch(stretch); widget->setSizePolicy(policy); ``` 3. **与setSizes()的区别** | 方法 | 作用 | 特点 | |------|------|------| | `setStretchFactor()` | 设置比例关系 | 动态响应容器大小变化 | | `setSizes()` | 设置绝对像素值 | 固定初始尺寸,不随容器缩放 | 4. **使用场景建议** - 需要**动态调整**子部件比例时使用`setStretchFactor()` - 需要**固定尺寸**时使用`setSizes()` - 两者可结合使用:先设初始尺寸,再设伸缩比例 #### 完整代码示例 ```cpp #include <QApplication> #include <QSplitter> #include <QTextEdit> int main(int argc, char *argv[]) { QApplication app(argc, argv); QSplitter mainSplitter(Qt::Vertical); // 主分割器(垂直) // 创建水平分割器 QSplitter *hSplitter = new QSplitter(Qt::Horizontal); hSplitter->addWidget(new QTextEdit("Left Panel")); hSplitter->addWidget(new QTextEdit("Right Panel")); hSplitter->setStretchFactor(0, 1); // 左边比例1 hSplitter->setStretchFactor(1, 2); // 右边比例2 // 添加到主分割器 mainSplitter.addWidget(hSplitter); mainSplitter.addWidget(new QTextEdit("Bottom Panel")); mainSplitter.setStretchFactor(0, 3); // 上部区域比例3 mainSplitter.setStretchFactor(1, 1); // 底部区域比例1 mainSplitter.show(); return app.exec(); } ``` 此代码创建了嵌套分割器: 1. 主窗口垂直分割为上下两部分(比例3:1) 2. 上部区域水平分割为左右两部分(比例1:2) #### 注意事项 1. 伸缩因子在**分割器大小改变时生效**,初始大小由部件内容决定 2. 值0表示部件**不扩展**(保持初始大小) 3. 负值会被Qt自动处理为0 4. 所有子部件的伸缩因子默认值为0(均不扩展) 5. 调用`refresh()`可强制立即应用新比例 > 提示:在Qt Designer中可直接在属性编辑器设置"stretchFactor"属性,无需编写代码[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值