qt窗口控件自适应窗口大小,能解决使用布局管理器自适应不生效.

86 篇文章 1 订阅

在我们的日常使用中,会需要用到提示框,提示框需要根据文本自适应设置窗口的大小.这个时候一般都会选择使用布局管理器,如QHboxLayout,QVboxLayout和QGridLayout这几种常见的管理器,但是使用过程中可能某些情况不生效,如多控件组合成一个提示框时,这个时候我们可以在布局管理器的基础上添加一个adjustSize()的函数来辅助使用,这样窗口就可以自适应了.
但是使用adjustSize()需要注意一些问题:
(1)使用的变化控件不能设置固定大小,如你要求自适应长度,结果长度设置了SetFixedSize(),它的自动大小就失效了,提示框自然无法跟着自适应大小.
(2)使用QGridLayout时,不能设置比例;否则会出现控件变大时,重叠的问题.
代码如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtWidgets>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void slotadd();
    void slotsub();
private:
    QGridLayout* m_lay;
    QPushButton* m_addadjustbtn;
    QPushButton* m_subadjustbtn;
    QPushButton* m_ltestbtn;
    QPushButton* m_rtestbtn;
    QLabel* m_textlab;
    QString m_text;
};

#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QWidget* w = new QWidget(this);
    this->setCentralWidget(w);
    m_textlab = new QLabel("测试文本:",w);
    m_addadjustbtn = new QPushButton("增大",w);
    m_subadjustbtn = new QPushButton("减小",w);
    m_ltestbtn = new QPushButton("|",w);
    m_rtestbtn = new QPushButton("|",w);
    m_addadjustbtn->setFixedWidth(60);
    m_subadjustbtn->setFixedWidth(60);
    m_ltestbtn->setFixedWidth(20);
    m_rtestbtn->setFixedWidth(20);

    m_lay = new QGridLayout();
    m_lay->addWidget(m_ltestbtn,0,0);
    m_lay->addWidget(m_textlab,0,1);
    m_lay->addWidget(m_rtestbtn,0,2);
    m_lay->addWidget(m_addadjustbtn,1,0);
    m_lay->addWidget(m_subadjustbtn,1,1);
    m_lay->setSpacing(5);
    this->centralWidget()->setLayout(m_lay);
    m_text = "测试文本:";
    connect(m_addadjustbtn,SIGNAL(clicked()),this,SLOT(slotadd()));
    connect(m_subadjustbtn,SIGNAL(clicked()),this,SLOT(slotsub()));
}

MainWindow::~MainWindow()
{
}

void MainWindow::slotadd()
{
    m_text.append("----");
    m_textlab->setText(m_text);
    this->adjustSize();               // 当布局管理器无法达到自动设置窗口大小时,它辅助布局管理器能实现自动调节大小.
    m_lay->update();
}

void MainWindow::slotsub()
{
    m_text.remove(m_text.size()-1,4);
    m_textlab->setText(m_text);
    this->adjustSize();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东方忘忧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值