在我们的日常使用中,会需要用到提示框,提示框需要根据文本自适应设置窗口的大小.这个时候一般都会选择使用布局管理器,如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();
}