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的大小或者用绝对位置布局