本人的需求是,程序启动的时候,红色框(也就是一个ScrollArea部件)里面的Label(灰色那块)要居中,一个直接的想法,获取ScrollArea部件的长宽,再减去Label的长宽除以2,即为居中状态。
But,事情并没有那么简单,每次获取的ScrollArea部件的长宽时,都是ui文件默认的,根本不是程序启动后的长宽,各种搞。后来经网友提示,使用一个定时器。在主构造函数最后里面,
tt = new QTimer(this);
//setLabelGemo()这个函数就是设置居中
connect(tt, SIGNAL(timeout()), this, SLOT(setLabelGemo()));
tt->start(300);
//
setLabelGeom()
{
//获取长宽
int ww = ui.scrollArea->width();
int hh = ui.scrollArea->height();
int leng = ww < hh ? ww : hh;
ui.lab_showHistPic->resize(leng, leng);
int labw = ui.lab_showHistPic->width();
int labh = ui.lab_showHistPic->height();
//计算坐标
int dpowx = (ww - labw) / 2.0;
int dpohy = (hh - labh) / 2.0;
ui.lab_showHistPic->setGeometry(dpowx, dpohy, ui.lab_showHistPic->width(), ui.lab_showHistPic->height());
}
就可以了。简单一句话,就是延时,等程序显示完之后,才能正确获取