QT中如何实时获取QWidget的大小???

时间:2022-12-01 23:17:18
我在QMainWindow中嵌入了一个QWidget控件用来播放YUV的数据,
我去拉大或者缩小MainWindow的大小的时候播放的画面不变,不会随着窗口的大小改变也改变图像。
我是把SDL嵌入到QWidget控件中去,播放窗口的width和height都是根据QWidget来定的,
我想实时获取QWidget的大小来定制SDL播放的大小。
有哪位大神知道吗? 

10 个解决方案

#1


有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEvent,在里面获取widget的size
2:给QWidget安装事件监视器,监视QEvent::resize,获取QWidget的size。
用UI编辑器,只能用第2个,手写代码两个全可以用。

#2


引用 1 楼 jdwx1 的回复:
有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEvent,在里面获取widget的size
2:给QWidget安装事件监视器,监视QEvent::resize,获取QWidget的size。
用UI编辑器,只能用第2个,手写代码两个全可以用。


我已经重写了事件,单独测试的话能够获取到实时QWidget的大小,
可是我用来描绘SDL的播放窗口的时候好像不能响应这个事件,不知道怎么回事
大神知道吗?
如果有必要,我可以贴上代码。

#3


是不是没有用函数void QMainWindow::setCentralWidget ( QWidget * widget )
将QWidget设为主窗口部件。如果只是new出来widget是固定大小,不会随窗口变化。

引用 2 楼 q245879 的回复:
引用 1 楼 jdwx1 的回复:有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEvent,在里面获取widget的size
2:给QWidget安装事件监视器,监视QEvent::resize,获取QWidget的size。
用UI编辑器,只能用第2个,手写代码两个全可以用。

我已经重写了事件,单独测试的话能够获取到……

#4


引用 3 楼 jdwx1 的回复:
是不是没有用函数void QMainWindow::setCentralWidget ( QWidget * widget )
将QWidget设为主窗口部件。如果只是new出来widget是固定大小,不会随窗口变化。

引用 2 楼 q245879 的回复:
引用 1 楼 jdwx1 的回复:有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEve……

我是这样写的:

MainWindow::MainWindow()
{
   QWidget widget = new QWidget;
   widget->setMinimunSize(960, 480);
   setCentralWidget(widget);
}

这已经将widget设为主窗口了。
而且我把我SDL显示YUV数据那个函数注释掉,单独测试resizeEvent是可以获取widget实时大小的
可是我就是不明白为什么我加上那个函数就不行,请问你做过这方面的东西吗?
如果你有时间,我把代码给你看看行吗?

#5


自己顶下,没人回答吗?别那么快就沉了啊。

#6


引用 5 楼 q245879 的回复:
自己顶下,没人回答吗?别那么快就沉了啊。

哥们  你好 
我现在做的是根据窗口的大小实时的缩放窗口中图片的大小,
看上面的回复你已经实现了实时获取窗口的大小   怎么做到的  

#7


可以使用 QWidget 类下的 Width 和 height 函数,就可以了。这两个函数的返回值就是widget的宽度和高度。

#8


你解决没?我也有这个问题要问一下啊!!!

#9


大神,我现在正有个头疼问题,就是怎么感应到窗口缩放,求您当时的代码,谢谢

#10


大神问题解决了,然后就不来了,哈哈,有问题的时候想到这个论坛,解决了,经验就成自己的了

#1


有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEvent,在里面获取widget的size
2:给QWidget安装事件监视器,监视QEvent::resize,获取QWidget的size。
用UI编辑器,只能用第2个,手写代码两个全可以用。

#2


引用 1 楼 jdwx1 的回复:
有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEvent,在里面获取widget的size
2:给QWidget安装事件监视器,监视QEvent::resize,获取QWidget的size。
用UI编辑器,只能用第2个,手写代码两个全可以用。


我已经重写了事件,单独测试的话能够获取到实时QWidget的大小,
可是我用来描绘SDL的播放窗口的时候好像不能响应这个事件,不知道怎么回事
大神知道吗?
如果有必要,我可以贴上代码。

#3


是不是没有用函数void QMainWindow::setCentralWidget ( QWidget * widget )
将QWidget设为主窗口部件。如果只是new出来widget是固定大小,不会随窗口变化。

引用 2 楼 q245879 的回复:
引用 1 楼 jdwx1 的回复:有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEvent,在里面获取widget的size
2:给QWidget安装事件监视器,监视QEvent::resize,获取QWidget的size。
用UI编辑器,只能用第2个,手写代码两个全可以用。

我已经重写了事件,单独测试的话能够获取到……

#4


引用 3 楼 jdwx1 的回复:
是不是没有用函数void QMainWindow::setCentralWidget ( QWidget * widget )
将QWidget设为主窗口部件。如果只是new出来widget是固定大小,不会随窗口变化。

引用 2 楼 q245879 的回复:
引用 1 楼 jdwx1 的回复:有两个途径,其实是一样的办法,
1:继承QWidget,重写QWidget的resizeEve……

我是这样写的:

MainWindow::MainWindow()
{
   QWidget widget = new QWidget;
   widget->setMinimunSize(960, 480);
   setCentralWidget(widget);
}

这已经将widget设为主窗口了。
而且我把我SDL显示YUV数据那个函数注释掉,单独测试resizeEvent是可以获取widget实时大小的
可是我就是不明白为什么我加上那个函数就不行,请问你做过这方面的东西吗?
如果你有时间,我把代码给你看看行吗?

#5


自己顶下,没人回答吗?别那么快就沉了啊。

#6


引用 5 楼 q245879 的回复:
自己顶下,没人回答吗?别那么快就沉了啊。

哥们  你好 
我现在做的是根据窗口的大小实时的缩放窗口中图片的大小,
看上面的回复你已经实现了实时获取窗口的大小   怎么做到的  

#7


可以使用 QWidget 类下的 Width 和 height 函数,就可以了。这两个函数的返回值就是widget的宽度和高度。

#8


你解决没?我也有这个问题要问一下啊!!!

#9


大神,我现在正有个头疼问题,就是怎么感应到窗口缩放,求您当时的代码,谢谢

#10


大神问题解决了,然后就不来了,哈哈,有问题的时候想到这个论坛,解决了,经验就成自己的了