• 5377阅读
  • 20回复

[提问]求救,QT有控件数量限制吗? [复制链接]

上一主题 下一主题
离线yanhubin
 

只看楼主 倒序阅读 楼主  发表于: 2013-08-02
在win下,用Creator在ui界面中加入控件很多控件(估计有几千个)之后发现工程打不开了,但是在linux下可以打开。想问下,qt控件数量是否有限制。
离线XChinux

只看该作者 1楼 发表于: 2013-08-02
这.ui设计得太奇葩了,上千的空间?几十个控件都嫌多.

将一些逻辑功能相关的分组做到Widget里面吧.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线pxiao_xiao

只看该作者 2楼 发表于: 2013-08-02
OTL
只看该作者 3楼 发表于: 2013-08-03
如果可以的化,可以动态增加和释放呀,难道一开始都需要这么多控件的么?
离线yanhubin

只看该作者 4楼 发表于: 2013-08-05
回 3楼(八句半对餐) 的帖子
因为要长时间运行,可能几个月,而我之前看到过有提到动态生成和释放不适合在长时间运行的程序里,即使释放了,还会有部分很少很少的内存被占用,不知道这个说法对不对
离线realfan

只看该作者 5楼 发表于: 2013-08-05
从实际应用范畴,可以当做没有数量限制。
但电脑系统资源有限,这么多控件,效率太低了吧。
还是想办法优化设计吧
离线yanhubin

只看该作者 6楼 发表于: 2013-08-05
回 1楼(XChinux) 的帖子
因为不同的画面有一百多个,而每个画面里的每个控件又代表不同含义的值的设定或显示!考虑过动态申请和释放,但发现即使释放后会有一点点的内存累加。debug发现内存确实已经被释放掉了,指针也NULL了。不知这个加出来的是哪部分。求指点,万分感激
离线yanhubin

只看该作者 7楼 发表于: 2013-08-05
回 5楼(realfan) 的帖子
我将它分都各个widget里,我发现将它们setVisible();多次后内存也会增加,这是为什么呢
只看该作者 8楼 发表于: 2013-08-05
回 4楼(yanhubin) 的帖子
真没注意到你这个问题,要是delete之后,按理说内存是给释放了,如果不动态生成和释放,你这么多控件肯定会给程序带来影响的~
离线尘中远

只看该作者 9楼 发表于: 2013-08-08
如果只是做显示用,直接画出来,而不是用控件显示
离线jdwx

只看该作者 10楼 发表于: 2013-08-08
一下子用几千个控件,这个程序本身就需要优化。
至于内存增加的问题,我是从来没注意过。
内存统计的软件有没有统计上的问题呢?算出来的内存不准。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 11楼 发表于: 2013-08-08
Qt的布局有数量限制,一个布局内部的控件最多127个。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 12楼 发表于: 2013-08-08
确认下,你的是什么样的控件?截个图吧.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线realfan

只看该作者 13楼 发表于: 2013-08-09
回 11楼(jdwx) 的帖子
我用QHBoxLayout加了8026个按钮,还没出现问题。
但再大,就不行了。我猜测是内存不够的原因。一会,关掉一些程序,释放些内存,再试试。
离线jdwx

只看该作者 14楼 发表于: 2013-08-09
回 13楼(realfan) 的帖子
奇怪,我这里127个没问题,再加一个全看不见了。去掉最后一个,又出来了。
我这是32位的windows,难道和这个有关系?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 15楼 发表于: 2013-08-09
回 13楼(realfan) 的帖子

特来纠正以前的错误说法,
正确的是:布局内的控件数量没发现有限制。
刚才测试了一下,3000个按钮没问题,看来以前的那个程序有bug。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线realfan

只看该作者 16楼 发表于: 2013-08-09
    QHBoxLayout * pL = new QHBoxLayout();
    for(int i = 0; i < 8531; ++i)
    {
        QPushButton * pbtn = new QPushButton(QString("a%1").arg(i), this);
        pL->addWidget(pbtn);

    }
    this->setLayout(pL);
用mingw 动态链接版本,最大8026个没问题,8027就不行了。用静态版本,8531没问题,再大也不行了。但出错是不一样的。动态链接是直接报错,静态链接,还能先显示出窗口,再报错。
离线jdwx

只看该作者 17楼 发表于: 2013-08-09
回 16楼(realfan) 的帖子
windows7 + VS2010 + Qt5.0.2,动态链接。
10000个button,能出来,界面完全动不了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线realfan

只看该作者 18楼 发表于: 2013-08-09
回 17楼(jdwx) 的帖子
应该是系统资源问题。但奇怪的时,有问题时,内存并不是被耗尽。
离线jdwx

只看该作者 19楼 发表于: 2013-08-09
回 18楼(realfan) 的帖子
我特意注意了资源占用,CPU占用50%,内存并不大。t7就是测试程序,和QtCreator比较。
事实上还没截图工具占内存。





发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线realfan

只看该作者 20楼 发表于: 2013-08-09
回 19楼(jdwx) 的帖子
是。而且动态链接与静态链接,结果还不同。蛮奇怪的。
快速回复
限100 字节
 
上一个 下一个