Qt Resize与布局的冲突?

 问题的产生:
    我用QSplitter创建一个窗口布局之后,由于使用窗口默认初始大小,显示出来的比例不是很好看,因此调用了resize进行窗口大小的调整。调整之后是获得了想要的窗口大小,但是与此同时,却发现了一个问题,也就是经过resize之后的窗口无法使得其中的部件自适应窗口的拉伸了,不论是上下左右,都没有自适应。

    问题的分析:
    经过长达两个小时的检查,发现如果在布局之前使用resize就不会出现以上所表述的问题,而在布局之后使用resize就会出现如上所表述的问题。于是翻阅了Qt 的 resize API文档,终于发现了问题所在。


    
    resize操作的是部件尺寸,当部件可见且试图改变尺寸时,就会立即触发resizeEvent事件。
    ......(中间就不翻译了,关键的是resizeEvent)
    我们来看resizeEvent.


    当resizeEvent被调用后,部件将拥有新的几何尺寸,旧的尺寸将被QResizeEvent::oldSize()保留。

    问题的总结:
    综上,resize会调用resizeEvent,并对部件窗口进行重绘,而旧的窗口将被替换保留。在布局之前使用resize,可以调整窗口大小,此时布局尚未建立,因此并不影响拉伸。而在布局之后使用resize,虽然调整了窗口,但是新的尺寸将被定格下来,替换旧的尺寸,因此可能造成布局的自适应效果失效。

    以上是个人分析结果,如有错误,望不吝指教。




FROM: http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29650836&id=4515549

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在C++中,使用OpenCV的resize函数可以实现图像的缩放和放大操作。该函数的原型如下: ```cpp void cv::resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR ); ``` 其中,各参数的含义如下: - `src`:源图像,可以是Mat类型的对象,也可以是其它形式的图像数据。 - `dst`:目标图像,用于存储resize操作后的图像数据,也可以是Mat类型的对象,也可以是其它形式的图像数据。 - `dsize`:目标图像的大小,可以指定为Size类型的对象或者cv::Size()函数。当指定了dsize参数时,fx和fy参数会被忽略。 - `fx`:水平方向的缩放比例,当dsize参数没有指定时才会生效。 - `fy`:垂直方向的缩放比例,当dsize参数没有指定时才会生效。 - `interpolation`:插值方法,可以指定为INTER_NEAREST、INTER_LINEAR、INTER_CUBIC、INTER_AREA、INTER_LANCZOS4等常量之一。 下面是一个简单的示例代码,展示了如何使用resize函数对图像进行缩放操作: ```cpp #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 读取原始图像 Mat src = imread("lena.jpg"); if (src.empty()) { cout << "can not load image!" << endl; return -1; } // 缩放图像 Mat dst; resize(src, dst, Size(src.cols / 2, src.rows / 2), 0, 0, INTER_LINEAR); // 显示原始图像和缩放后的图像 namedWindow("src", WINDOW_NORMAL); namedWindow("dst", WINDOW_NORMAL); imshow("src", src); imshow("dst", dst); waitKey(0); return 0; } ``` 在这个示例代码中,我们首先读取了一张名为lena.jpg的图像,然后调用resize函数对图像进行了缩放操作,将图像的大小缩小为原始图像的一半。最后,我们使用imshow函数将原始图像和缩放后的图像在窗口中显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值