• 4780阅读
  • 11回复

[提问]关于一个按钮拉伸的大小问题 [复制链接]

上一主题 下一主题
离线qazaq408
 

只看楼主 倒序阅读 楼主  发表于: 2014-12-19
比如有个QPushButton我用布局管理器安装在一个QWidget

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

只看该作者 1楼 发表于: 2014-12-19
长度适中等于宽度??
和你后面说的正方形有矛盾吧?
你是否希望控件大小保持不变???
Jobs Insanely Great.
离线qazaq408

只看该作者 2楼 发表于: 2014-12-20
回 weiweiqiao 的帖子
weiweiqiao:长度适中等于宽度??
和你后面说的正方形有矛盾吧?
你是否希望控件大小保持不变??? (2014-12-19 23:56) 

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

只看该作者 3楼 发表于: 2014-12-21
设死长宽不就得了!
离线彩阳

只看该作者 4楼 发表于: 2014-12-21
以前实现过,也回答了别人的问题。
思路是重载resizeEvent(),将其中设置长宽相等即可。切忌不要造成死循环。
上海Qt开发联盟,热忱地欢迎你的加入!
离线qazaq408

只看该作者 5楼 发表于: 2014-12-21
回 sharkoasis 的帖子
sharkoasis:设死长宽不就得了! (2014-12-21 19:29) 

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

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

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

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

只看该作者 7楼 发表于: 2014-12-22
你自己实现过了这个时间之后就把事件ignore
安然.....
离线qazaq408

只看该作者 8楼 发表于: 2017-04-26
人工置顶

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

只看该作者 9楼 发表于: 2017-04-26
void Button::resizeEvent(QResizeEvent *event)
{
    auto sz = event->size();
    if (sz.width() != sz.height()) {
        sz.setHeight(sz.width());
        this->resize(sz);
    }
}
我这样试了下,感觉应该可以的
离线qazaq408

只看该作者 10楼 发表于: 2017-04-27
回 lemonzll 的帖子
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

只看该作者 11楼 发表于: 2017-04-27
附件是我测试用的项目,感觉也都正常的。我用的Qt5.8,MSVC2015,在windows7上测试的每次改变大小的时候resizeEvent调用了两次,没有进入无限循环。如果说是不能在resizeEvent里再调用resize,那你就把this->resize(sz)这句改一下,改成QTimer::singleShot(0, [this, sz] {this->resize(sz);})
附件: SquareButton.7z (4 K) 下载次数:1
快速回复
限100 字节
 
上一个 下一个