qt:输入控件操作

发布于:2025-02-22 ⋅ 阅读:(12) ⋅ 点赞:(0)
1.单行输入框

QLineEdit ,单行输入,但是不能换行

属性 特点
text 输入框中的文本
inputMask 输入内容格式约束,限制用户输入的格式。
maxLength 最大长度,定义输入框允许的最大字符数。
frame 是否添加边框,默认为 true 显示边框。
echoMode  显示方式:
QLineEdit::Normal:显示输入文本
QLineEdit::Password:隐藏输入字符
QLineEdit::NoEcho:不显示任何输入字符
cursorPosition 光标所在位置,表示当前光标的索引。
alignment 文字对齐方式,设置水平和垂直方向的对齐。 如:Qt::AlignLeftQt::AlignCenter 等
dragEnabled 是否允许拖拽,默认为 false 不允许。
readOnly 是否是只读的(不允许修改),默认为 false 可编辑。
placeHolderText 当输入框内容为空时显示的提示信息。
clearButtonEnabled 是否会自动显示出“清除按钮”,点击可清空文本,默认为 false 不显示
信号 特点
cursorPositionChanged(int old, int new) 当鼠标移动时发出此信号,old 为先前的位置,new 为新位置
editingFinished() 当按返回或者回车键时,或者行编辑失去焦点时,发出此信号。
returnPressed() 当返回或回车键按下时发出此信号。如果设置了验证器,则必须验证通过才能触发。
selectionChanged() 当选中的文本改变时,发出此信号
textChanged(const QString &text) 当 QLineEdit 中的文本改变时,发出此信号,text 是新的文本。代码对文本的修改也能触发这个信号。
textEdited(const QString &text) 当 QLineEdit 中的文本被用户编辑改变时,发出此信号,text 是新的文本。代码对文本的修改不会触发这个信号

首先我们来完成一个界面,姓名,密码(隐藏),电话,性别的输入框,点击确定后进行打印

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->lineEdit->setPlaceholderText("请输入姓名");
    ui->lineEdit_2->setPlaceholderText("请输入密码");
    ui->lineEdit_3->setPlaceholderText("请输入电话号码");
    ui->lineEdit->setClearButtonEnabled(true);
    ui->lineEdit_2->setClearButtonEnabled(true);
    ui->lineEdit_3->setClearButtonEnabled(true);//输入时显示清除按钮
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);//设置密码 隐藏
    ui->lineEdit_3->setInputMask("000-000-0000");//设置输入格式
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::get);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::get()
{
    qDebug()<<"客户姓名:"<<ui->lineEdit->text()<<"客户密码:"<<ui->lineEdit_2->text();
    int a=0;
    if(ui->radioButton->isChecked())
    {
        a=0;
    }
    else
    {
        a=1;
    }
    qDebug()<<"客户性别"<<(a==0?ui->radioButton->text():ui->radioButton_2->text());
    qDebug()<<"电话"<<ui->lineEdit_3->text();
}

 2.使用正则表达式进行验证

在电话输入时,为了格式的合法化,要11位数字,否则无法点击确认按钮(正则表达式问ai就行)

^\d{11}$

可以使用QRegExpValidator创建一个验证器进行操作,并且给lineEdit加textEdit信号的 slot 函数

on_lineEdit_textEdited 的参数是当前输入框的内容,通过 lineEdit->validator() 获取到内置的验证器
通过 validate 方法验证文本是否符合要求,第一个参数填写的是要验证的字符串 。由于参数要求是 QString& 而不是 const QString&,需要把这个变量复制一下。第二个参数是⼀个 int&,是输出型参数。当验证的字符串不匹配时,返回这个字符串的长度(没有什么实质作用)。返回值是⼀个枚举。 QValidator::Acceptable 表示 验证通过,QValidator::Invalid 表示验证不通过。

以下是验证代码

#include "widget.h"
#include "ui_widget.h"
#include<QRegularExpression>
#include<QRegularExpressionValidator>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{

    ui->setupUi(this);
    QRegularExpression reg("^\\d{11}$");
     QRegularExpressionValidator *validator = new QRegularExpressionValidator(reg, this);
     ui->lineEdit_3->setValidator(validator);
    ui->lineEdit->setPlaceholderText("请输入姓名");
    ui->lineEdit_2->setPlaceholderText("请输入密码");
    ui->lineEdit_3->setPlaceholderText("请输入电话号码");
    ui->lineEdit->setClearButtonEnabled(true);
    ui->lineEdit_2->setClearButtonEnabled(true);
    ui->lineEdit_3->setClearButtonEnabled(true);
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);
    ui->lineEdit_3->setInputMask("000-000-0000");
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::get);
     connect(ui->lineEdit_3, &QLineEdit::textChanged, this, &Widget::judge);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::get()
{
    qDebug()<<"客户姓名:"<<ui->lineEdit->text()<<"客户密码:"<<ui->lineEdit_2->text();
    int a=0;
    if(ui->radioButton->isChecked())
    {
        a=0;
    }
    else
    {
        a=1;
    }
    qDebug()<<"客户性别"<<(a==0?ui->radioButton->text():ui->radioButton_2->text());
    qDebug()<<"电话"<<ui->lineEdit_3->text();
}
void Widget::judge(const QString&text)
{
    QString context=text;
    int pos=0;
    if(ui->lineEdit_3->validator()->validate(context,pos)==QValidator::Acceptable)
    {
        ui->pushButton->setEnabled(true);
    }
    else
    {
        ui->pushButton->setEnabled(false);
    }
}

创建验证器

 QRegularExpression reg("^\\d{11}$");
     QRegularExpressionValidator *validator = new QRegularExpressionValidator(reg, this);

连接

  connect(ui->lineEdit_3, &QLineEdit::textChanged, this, &Widget::judge);

验证函数

void Widget::judge(const QString&text)
{
    QString context=text;
    int pos=0;
    if(ui->lineEdit_3->validator()->validate(context,pos)==QValidator::Acceptable)
    {
        ui->pushButton->setEnabled(true);
    }
    else
    {
        ui->pushButton->setEnabled(false);
    }
}

可以看到输入字母时按钮锁定

 3.两次输入密码是否一致

设置一个槽函数用于比较(两个按钮调用一个相同的槽函数)

#include "widget.h"
#include "ui_widget.h"
#include<QRegularExpression>
#include<QRegularExpressionValidator>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{

    ui->setupUi(this);
    QRegularExpression reg("^\\d{11}$");
     QRegularExpressionValidator *validator = new QRegularExpressionValidator(reg, this);
     ui->lineEdit_3->setValidator(validator);
    ui->lineEdit->setPlaceholderText("请输入姓名");
    ui->lineEdit_2->setPlaceholderText("请输入密码");
    ui->lineEdit_3->setPlaceholderText("请输入电话号码");
    ui->lineEdit_4->setPlaceholderText("请再次输入密码");
    ui->lineEdit->setClearButtonEnabled(true);
    ui->lineEdit_2->setClearButtonEnabled(true);
    ui->lineEdit_3->setClearButtonEnabled(true);
    ui->lineEdit_4->setClearButtonEnabled(true);
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);
    ui->lineEdit_4->setEchoMode(QLineEdit::Password);
    ui->lineEdit_3->setInputMask("000-000-0000");
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::get);
     connect(ui->lineEdit_3, &QLineEdit::textChanged, this, &Widget::judge);
    connect(ui->lineEdit_2, &QLineEdit::textChanged, this, &Widget::judge2);

    connect(ui->lineEdit_4, &QLineEdit::textChanged, this, &Widget::judge2);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::get()
{
    qDebug()<<"客户姓名:"<<ui->lineEdit->text()<<"客户密码:"<<ui->lineEdit_2->text();
    int a=0;
    if(ui->radioButton->isChecked())
    {
        a=0;
    }
    else
    {
        a=1;
    }
    qDebug()<<"客户性别"<<(a==0?ui->radioButton->text():ui->radioButton_2->text());
    qDebug()<<"电话"<<ui->lineEdit_3->text();
}
void Widget::judge(const QString&text)
{
    QString context=text;
    int pos=0;
    if(ui->lineEdit_3->validator()->validate(context,pos)==QValidator::Acceptable)
    {
        ui->pushButton->setEnabled(true);
    }
    else
    {
        ui->pushButton->setEnabled(false);
    }
}
void Widget::judge1(const QString &arg1)
{
    this->compare();
}
void Widget::judge2(const QString &arg1)
{
    this->compare();
}
void Widget::compare()
{
    const QString &s1=ui->lineEdit_2->text();
    const QString &s2=ui->lineEdit_4->text();
    if(s1.isEmpty()&&s2.isEmpty())
    {
        ui->label_6->setText("密码为空");
    }
    else if(s1==s2)
    {
        ui->label_6->setText("密码一致");
    }
    else
    {
        ui->label_6->setText("密码不一致");
    }
}

4.切换显示密码

 可以使用checkbox,这个是一个有是否选中状态的按钮,来切换密码模式

#include "widget.h"
#include "ui_widget.h"
#include<QRegularExpression>
#include<QRegularExpressionValidator>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{

    ui->setupUi(this);
    QRegularExpression reg("^\\d{11}$");
     QRegularExpressionValidator *validator = new QRegularExpressionValidator(reg, this);
     ui->lineEdit_3->setValidator(validator);
    ui->lineEdit->setPlaceholderText("请输入姓名");
    ui->lineEdit_2->setPlaceholderText("请输入密码");
    ui->lineEdit_3->setPlaceholderText("请输入电话号码");
    ui->lineEdit_4->setPlaceholderText("请再次输入密码");
    ui->lineEdit->setClearButtonEnabled(true);
    ui->lineEdit_2->setClearButtonEnabled(true);
    ui->lineEdit_3->setClearButtonEnabled(true);
    ui->lineEdit_4->setClearButtonEnabled(true);
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);
    ui->lineEdit_4->setEchoMode(QLineEdit::Password);
    ui->lineEdit_3->setInputMask("000-000-0000");

    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::get);
     connect(ui->lineEdit_3, &QLineEdit::textChanged, this, &Widget::judge);
    connect(ui->lineEdit_2, &QLineEdit::textChanged, this, &Widget::judge2);
     connect(ui->checkBox, &QCheckBox::stateChanged, this, &Widget::change);


    connect(ui->lineEdit_4, &QLineEdit::textChanged, this, &Widget::judge2);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::get()
{
    qDebug()<<"客户姓名:"<<ui->lineEdit->text()<<"客户密码:"<<ui->lineEdit_2->text();
    int a=0;
    if(ui->radioButton->isChecked())
    {
        a=0;
    }
    else
    {
        a=1;
    }
    qDebug()<<"客户性别"<<(a==0?ui->radioButton->text():ui->radioButton_2->text());
    qDebug()<<"电话"<<ui->lineEdit_3->text();
}
void Widget::judge(const QString&text)
{
    QString context=text;
    int pos=0;
    if(ui->lineEdit_3->validator()->validate(context,pos)==QValidator::Acceptable)
    {
        ui->pushButton->setEnabled(true);
    }
    else
    {
        ui->pushButton->setEnabled(false);
    }
}
void Widget::judge1(const QString &arg1)
{
    this->compare();
}
void Widget::judge2(const QString &arg1)
{
    this->compare();
}
void Widget::compare()
{
    const QString &s1=ui->lineEdit_2->text();
    const QString &s2=ui->lineEdit_4->text();
    if(s1.isEmpty()&&s2.isEmpty())
    {
        ui->label_6->setText("密码为空");
    }
    else if(s1==s2)
    {
        ui->label_6->setText("密码一致");
    }
    else
    {
        ui->label_6->setText("密码不一致");
    }
}

void Widget::change(bool checked)
{
    if(checked)
    {
         ui->lineEdit_2->setEchoMode(QLineEdit::Normal);
    }
    else
    {
         ui->lineEdit_2->setEchoMode(QLineEdit::Password);
    }
}

5.多行输入框

QTextEdit是一个富文本输入框,而且会在内容超过范围时提供滚动条

属性 特点
markdown 输入框内持有的内容,支持 Markdown 格式。能够自动对 Markdown 文本进行渲染成 HTML。
html 输入框内持有的内容,可以支持大部分 HTML 标签,包括 img 和 table 等
placeHolderText 输入框为空时提示的内容。
readOnly 是否是只读的,默认为 false 可编辑。
undoRedoEnabled 是否开启 undo/redo 功能,默认为 true 开启。
按下 Ctrl+Z 触发 undo
按下 Ctrl+Y 触发 redo
autoFormatting 开启自动格式化功能。
tabStopWidth 按下缩进占多少空间,默认单位为像素。
overwriteMode 是否开启覆盖写模式,默认为 false 不开启。
acceptRichText 是否接收富文本内容,默认为 true 接收
verticalScrollBarPolicy 垂直方向滚动条的出现策略:
Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条(默认值)
Qt::ScrollBarAlwaysOff:总是关闭滚动条
Qt::ScrollBarAlwaysOn:总是显示滚动条
horizontalScrollBarPolicy 水平方向滚动条的出现策略:
Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条(默认值)
信号 特点
textChanged() 文本内容改变时触发。
selectionChanged() 选中范围改变时触发。
cursorPositionChanged() 光标移动时触发。
undoAvailable(bool) 当可以进行 undo 操作时触发,参数表示当前是否可以 undo。
redoAvailable(bool) 当可以进行 redo 操作时触发,参数表示当前是否可以 redo。
copyAvailable(bool) 文本被选中或取消选中时触发,参数表示当前是否有可复制的文本。

创建一个标签获取输入框的内容

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->textEdit,&QTextEdit::textChanged,this,&Widget::get);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::get()
{
    ui->label->setText(ui->textEdit->toPlainText());
}

6.下拉框

 QComboBox

属性 特点
currentText 当前选中的文本
currentIndex 当前选中的条目下标,从0开始计算。如果没有条目被选中,值为-1
editable 是否允许修改;设为true时,QComboBox的行为接近QLineEdit,并可设置validator
iconSize 下拉框图标(小三角)的大小
maxCount 最多允许有多少个条目

函数 特点
addItem(const QString&) 添加一个条目
currentIndex() 获取当前条目的下标,从0开始计算。如果没有条目被选中,值为-1
currentText() 获取当前条目的文本内容

信号 特点
activated(int) 用户选择了选项时发出,相当于用户点开下拉框并且鼠标划过某个选项
activated(const QString &text) 同上,但是传递的是文本参数
currentIndexChanged(int) 当前选项改变时发出,用户已经明确选择了一个选项
currentIndexChanged(const QString &text) 同上,但是传递的是文本参数
editTextChanged(const QString &text) 当编辑框中的文本改变时发出(当editable为true时有效)

设置简单的演示程序

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::get);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::get()
{
    qDebug()<<ui->comboBox->currentText()<<ui->comboBox_2->currentText();
}

7.文件下拉框

 以下为演示代码,注意路径不能有中文

#include "widget.h"
#include "ui_widget.h"
#include<fstream>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    std::ifstream file("D:/project/apple.txt");
    if(!file.is_open())
    {
        qDebug()<<1;
    }
    std::string line;
    while(std::getline(file,line))
    {
        ui->comboBox_3->addItem(QString::fromStdString(line));
    }
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::get);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::get()
{
    qDebug()<<ui->comboBox->currentText()<<ui->comboBox_2->currentText();
}

8.普通,日期,时间微调框

QSpanBox,就是可以通过按钮改变数字的大小

属性 特点
value 存储的数值
singleStep 每次调整的"步长". 按下一次按钮数据变化多少
displayIntegerBase 数字的进制。例如设为10,则是按照10进制表示;设为2则为2进制表示
minimum 最小值
maximum 最大值
suffix 后缀
prefix 前缀
wrapping 是否允许换行
frame 是否带边框
alignment 文字对齐方式
readOnly 是否允许修改
buttonSymbols 按钮上的图标:上下箭头形式、加减号形式、没有按钮
accelerated 按下按钮时是否为快速调整模式
correctionMode 输入有误时如何修正:
- CorrectToPreviousValue: 恢复为上一个有效值
- CorrectToNearestValue: 恢复为最接近的有效值
keyboardTracking

是否开启键盘跟踪。
设为true, 每次在输入框输入一个数字, 都会触发一次valueChanged() 和 textChanged() 信号。
设为false, 只有在最终按下enter 或者输入框失去焦点, 才会触发 valueChanged() 和 textChanged() 信号

日期微调框QDateEdit,时间微调框QTimeEdit

属性 特点
dateTime 时间日期的值。格式形如:2000/1/1 0:00:00
date 单纯日期的值。格式形如:2001/1/1
time 单纯时间的值。格式形如:0:00:00
displayFormat 时间日期显示格式。常用的格式化符号:
y: 年份
M: 月份
d: 日期
H: 小时(24小时制)
m: 分钟
s: 秒
注意,不同语言或库的设定规则可能存在差异,具体使用时应查阅文档
minimumDateTime 设置可选择的最小时间日期
maximumDateTime 设置可选择的最大时间日期
timeSpec 指定时间的时区或偏移:
Qt::LocalTime: 显示本地时间
Qt::UTC: 显示协调世界时(UTC)
Qt::OffsetFromUTC: 显示相对于UTC的偏移量****(时差)****(UTC=LocalTime+8)
信号 特点
dateChanged(QDate) 当日期改变时触发。参数 QDate 包含新的日期值
timeChanged(QTime) 当时间改变时触发。参数 QTime 包含新的时间值
dateTimeChanged(QDateTime) 当日期或时间任意一个改变时触发。参数 QDateTime 包含新的日期时间值

演示代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::print);
}
void Widget::print()
{
    qDebug()<<ui->comboBox->currentText()<<ui->spinBox->text();
    qDebug()<<ui->comboBox_2->currentText()<<ui->spinBox_2->text();
    QDateTime old=ui->dateTimeEdit->dateTime();
    QDateTime new1=ui->dateTimeEdit_2->dateTime();
    int second=old.secsTo(new1);
    int hour=(second/3600)%24;
    int day=(second/3600)/24;
    qDebug()<<day<<hour;
}
Widget::~Widget()
{
    delete ui;
}

9.按钮 

QDial

属性 特点
value 持有的数值
minimum 最小值
maximum 最大值
singleStep 按下方方向键的时候改变的步长
pageStep 按下 PageUp/PageDown 的时候改变的步长
sliderPosition 界面上旋钮显示的初始位置
racking 外观是否会跟踪数值变化,默认值为 true,一般不需要修改
wrapping 是否允许循环调整。即数值如果超过最大值,是否允许回到最小值(调整过程能否套圈)
otchesVisible 是否显示刻度线
notchTarget 刻度线之间的相对位置。数字越大,刻度线越稀疏
信号 特点
valueChanged(int) 数值改变时触发
rangeChanged(int, int) 范围变化时触发。参数包含新的最小值和最大值

设置按钮控制不透明度

在qt designer里面设置刻度可见,初始值100,从20到80,可以循环旋转(注意有参数的槽函数应该怎么连接

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public slots:
            void get(int val);
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
     connect(ui->dial, SIGNAL(valueChanged(int)), this, SLOT(get(int)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::get(int val)
{
    ui->label->setText("当前不透明度为"+QString::number(val));
    this->setWindowOpacity((double)val/100);
}
10.滑动条

QSlider,它和QDial共同继承于QAbstractSlider,所以属性和信号基本一致

使用滑动条调整窗口大小与自定义按键控制hua'don't

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->horizontalSlider, &QSlider::valueChanged, this, &Widget::getline);

    connect(ui->verticalSlider, &QSlider::valueChanged, this, &Widget::get);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::getline(int val)
{
    const QRect&rect=this->geometry();
    this->setGeometry(rect.x(),rect.y(),val,rect.height());
}
void Widget::get(int val)
{
    const QRect&rect=this->geometry();
    this->setGeometry(rect.x(),rect.y(),rect.width(),val);
}

 也可以设置快捷键w和s来同步控制滑动条

#include "widget.h"
#include "ui_widget.h"
#include<QShortcut>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QShortcut*sc1=new QShortcut(this);
      QShortcut*sc2=new QShortcut(this);
    sc1->setKey(QKeySequence("w"));
      sc2->setKey(QKeySequence("s"));
    connect(sc1,&QShortcut::activated,this,&Widget::add);
      connect(sc2,&QShortcut::activated,this,&Widget::sub);
   // connect(ui->horizontalSlider, &QSlider::valueChanged, this, &Widget::getline);
connect(ui->verticalSlider, &QSlider::valueChanged, this, &Widget::set);

   // connect(ui->verticalSlider, &QSlider::valueChanged, this, &Widget::get);
  ui->verticalSlider->setValue(this->height());
}

Widget::~Widget()
{
    delete ui;
}
void Widget::getline(int val)
{
    const QRect&rect=this->geometry();
    this->setGeometry(rect.x(),rect.y(),val,rect.height());
}
void Widget::get(int val)
{
    const QRect&rect=this->geometry();
    this->setGeometry(rect.x(),rect.y(),rect.width(),val);
}
void Widget::sub()
{
    const QRect& rect = this->geometry();
    int newHeight = rect.height() - 10;
    if (newHeight < 10) {
        newHeight = 10;
    }
    this->setGeometry(rect.x(), rect.y(), rect.width(), newHeight);
       ui->verticalSlider->setValue(newHeight);
}

void Widget::add()
{
    const QRect& rect = this->geometry();
    int newHeight = rect.height() + 10;
    this->setGeometry(rect.x(), rect.y(), rect.width(), newHeight);
     ui->verticalSlider->setValue(newHeight);
}
void Widget::set(int height)
{
    const QRect& rect = this->geometry();
    this->setGeometry(rect.x(), rect.y(), rect.width(), height);

}