在qt界面上放了一个QGraphicsView控件,功能上需要获取这个控件的大小。
在构造函数内,通过下面代码获取QGraphicsView的位置大小:
ui->graphicsView->rect();
一开始没有设置界面的布局的时候,完全没问题,但将布局改为垂直布局或者水平布局的时候就发现获取到的控件大小不对。
界面初始化之后的大小是778x553,但构造函数里拿到的大小是100x30,显然不对!
后来想到重写界面的resizeEvent事件来获取,结果还是不行。
后来想着哪个事件是界面初始化完成之后触发的,想来想去还是通过写一个计时器来实现吧,在构造函数里加上下面的代码:
m_Timer = new QTimer(this);
connect(m_Timer,&QTimer::timeout,this,&MainWindow::timerOut);
m_Timer->start(50);
写一个timerOut()函数来接收m_Timer的timeout事件
void MainWindow::timerOut()
{
m_Timer->stop();
qDebug()<<"graphicsView size after timerOut:"<<ui->graphicsView->rect();
}
测试结果如下,可以看到在构造函数执行完成50ms之后,再获取QGraphicsView控件位置大小就准确了: