查看完整版本: [-- 关于一个按钮拉伸的大小问题 --]

QTCN开发网 -> Qt基础编程 -> 关于一个按钮拉伸的大小问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

qazaq408 2014-12-19 21:30

关于一个按钮拉伸的大小问题

比如有个QPushButton我用布局管理器安装在一个QWidget上

然后如果拉伸父窗体QWidget的话,这个按钮也会随之变形,
有没有办法设置下这个按钮,使得他在岁父窗体被拉伸的时候,长度适中等于宽度
就是保证这个按钮始终是个正方形

weiweiqiao 2014-12-19 23:56
长度适中等于宽度??
和你后面说的正方形有矛盾吧?
你是否希望控件大小保持不变???

qazaq408 2014-12-20 00:34
weiweiqiao:长度适中等于宽度??
和你后面说的正方形有矛盾吧?
你是否希望控件大小保持不变??? (2014-12-19 23:56) 

额。。。错别字
我的意思是拉伸的时候适中保证   width = height

sharkoasis 2014-12-21 19:29
设死长宽不就得了!

彩阳 2014-12-21 21:27
以前实现过,也回答了别人的问题。
思路是重载resizeEvent(),将其中设置长宽相等即可。切忌不要造成死循环。

qazaq408 2014-12-21 22:32
sharkoasis:设死长宽不就得了! (2014-12-21 19:29) 

问题是我的这个按钮他需要被拉伸!!

就像win7自带的那个扫雷,你打开后里面的格子可以(在一定范围内)拉大拉小,但格子大小虽然在变化,但格子始终是个正方形

qazaq408 2014-12-21 22:33
彩阳:以前实现过,也回答了别人的问题。
思路是重载resizeEvent(),将其中设置长宽相等即可。切忌不要造成死循环。 (2014-12-21 21:27) 

试过重载resizeEvent()函数,会造成无限循环的

benbenmajia 2014-12-22 10:57
你自己实现过了这个时间之后就把事件ignore

qazaq408 2017-04-26 15:32
人工置顶

问下各位有没有解决这个问题的办法,我现在又遇到这个问题了,当初就没找到办法

lemonzll 2017-04-26 16:04
void Button::resizeEvent(QResizeEvent *event)
{
    auto sz = event->size();
    if (sz.width() != sz.height()) {
        sz.setHeight(sz.width());
        this->resize(sz);
    }
}
我这样试了下,感觉应该可以的

qazaq408 2017-04-27 11:20
lemonzll:void Button::resizeEvent(QResizeEvent *event)
{
    auto sz = event->size();
    if (sz.width() != sz.height()) {
        sz.setHeight(sz.width());
....... (2017-04-26 16:04) 

这样不行的,Qt对于resizeEvent()设定有点特别,当窗体[改变大小完成后再调用resizeEvent(),所以在resizeEvent()不能改变窗体的大小,否则就会出现无限循环,即

lemonzll 2017-04-27 15:00
附件是我测试用的项目,感觉也都正常的。我用的Qt5.8,MSVC2015,在windows7上测试的每次改变大小的时候resizeEvent调用了两次,没有进入无限循环。如果说是不能在resizeEvent里再调用resize,那你就把this->resize(sz)这句改一下,改成QTimer::singleShot(0, [this, sz] {this->resize(sz);})


查看完整版本: [-- 关于一个按钮拉伸的大小问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled