当前位置: 代码迷 >> QT开发 >> Qt 格局中改变尺寸抖动
  详细解决方案

Qt 格局中改变尺寸抖动

热度:681   发布时间:2016-04-25 02:53:26.0
Qt 布局中改变尺寸抖动
Qt布局中改变某个控件的大小,通过setfixedSize()持续改变大小,会出现画面抖动的现象,如何解决,求大神赐教,不甚感激
,,,
废话不多说,直接上demo:
//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void slot_onBtnClicked();
    void slot_onTimeOut();

private:
    QTimer m_timer;
    QPushButton* m_btn;
};
#endif // WIDGET_H

//widget.cpp
#include "widget.h"
#include <QHBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QHBoxLayout* layout = new QHBoxLayout(this);

    for(int i=0;i<5;i++)
    {
        QPushButton* btn = new QPushButton(this);
        btn->setText("test");
        if(1 == i)
        {
            m_btn = btn;
            connect(btn, SIGNAL(clicked()), this, SLOT(slot_onBtnClicked()));
        }
        btn->setFixedSize(80,80);
        layout->addWidget(btn);
    }
}

Widget::~Widget()
{

}

void Widget::slot_onBtnClicked()
{
    m_timer.setInterval(50);
    connect(&m_timer, SIGNAL(timeout()), this, SLOT(slot_onTimeOut()));
    m_timer.start();
}

void Widget::slot_onTimeOut()
{
    static int i = 0;
    m_btn->setFixedSize(QSize(80+i,80+i));
    ++i;
}
//main.cpp
#include "widget.h"
#include <QApplication>
#include <QHBoxLayout>

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

    QWidget wdt;
    QHBoxLayout layout(&wdt);

    Widget w;
    layout.addStretch();
    layout.addWidget(&w, Qt::AlignRight);

    wdt.showFullScreen();

    return a.exec();
}

------解决思路----------------------
因为Layout的原因,layout会根据widget的大小重新分配位置,所以出现抖动,可以考虑改变layout的大小或者用绝对位置布局
  相关解决方案