Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何高效地创建大量QWidget?_Qt - Fatal编程技术网

Qt 如何高效地创建大量QWidget?

Qt 如何高效地创建大量QWidget?,qt,Qt,出于某种原因,我被迫在程序开始时或用户使用期间创建大量QWidget。 这总是会导致主线程卡住几秒钟。 如何提高创建速度?我是否应该简化这些小部件(如删除按钮的pixmap并保持最小功能?没有有效且简单的方法来打破物理定律。许多UI元素==慢,没有办法解决 解决方法:重用现有的UI元素,给人滚动的感觉。因此,与其创建10000个UI元素来显示一个包含10列和1000行的表,不如创建足够的元素来填充屏幕,并在用户滚动时移动数据——这只是给人一种UI正在滚动的印象。这种方法是由屏幕空间有限这一事实驱

出于某种原因,我被迫在程序开始时或用户使用期间创建大量QWidget。 这总是会导致主线程卡住几秒钟。
如何提高创建速度?我是否应该简化这些小部件(如删除按钮的pixmap并保持最小功能?

没有有效且简单的方法来打破物理定律。许多UI元素==慢,没有办法解决

解决方法:重用现有的UI元素,给人滚动的感觉。因此,与其创建10000个UI元素来显示一个包含10列和1000行的表,不如创建足够的元素来填充屏幕,并在用户滚动时移动数据——这只是给人一种UI正在滚动的印象。这种方法是由屏幕空间有限这一事实驱动的,并且通过添加您看不到的UI元素几乎没有什么好处

另一种方法是一次只创建几个元素,总是给UI线程在“批处理”之间留出响应时间。对于这种方法,创建N个元素,然后添加一个计时器事件。当计时器启动时,再添加N个元素,以此类推,直到创建足够的元素为止


第二种方法的缺点是,由于资源有限,您的操作系统最终会杀死您。如果您创建了100000个UI元素,并且每个元素都需要10KB的RAM,那么应用程序将仅为UI分配1GB的RAM。

没有有效且简单的方法来打破物理定律。许多UI元素==慢,没有办法解决

解决方法:重用现有的UI元素,给人滚动的感觉。因此,与其创建10000个UI元素来显示一个包含10列和1000行的表,不如创建足够的元素来填充屏幕,并在用户滚动时移动数据——这只是给人一种UI正在滚动的印象。这种方法是由屏幕空间有限这一事实驱动的,并且通过添加您看不到的UI元素几乎没有什么好处

另一种方法是一次只创建几个元素,总是给UI线程在“批处理”之间留出响应时间。对于这种方法,创建N个元素,然后添加一个计时器事件。当计时器启动时,再添加N个元素,以此类推,直到创建足够的元素为止


第二种方法的缺点是,由于资源有限,您的操作系统最终会杀死您。如果您创建了100000个UI元素,并且每个元素都需要10KB的RAM,那么应用程序将仅为UI分配1GB的RAM。

没有有效且简单的方法来打破物理定律。许多UI元素==慢,没有办法解决

解决方法:重用现有的UI元素,给人滚动的感觉。因此,与其创建10000个UI元素来显示一个包含10列和1000行的表,不如创建足够的元素来填充屏幕,并在用户滚动时移动数据——这只是给人一种UI正在滚动的印象。这种方法是由屏幕空间有限这一事实驱动的,并且通过添加您看不到的UI元素几乎没有什么好处

另一种方法是一次只创建几个元素,总是给UI线程在“批处理”之间留出响应时间。对于这种方法,创建N个元素,然后添加一个计时器事件。当计时器启动时,再添加N个元素,以此类推,直到创建足够的元素为止


第二种方法的缺点是,由于资源有限,您的操作系统最终会杀死您。如果您创建了100000个UI元素,并且每个元素都需要10KB的RAM,那么应用程序将仅为UI分配1GB的RAM。

没有有效且简单的方法来打破物理定律。许多UI元素==慢,没有办法解决

解决方法:重用现有的UI元素,给人滚动的感觉。因此,与其创建10000个UI元素来显示一个包含10列和1000行的表,不如创建足够的元素来填充屏幕,并在用户滚动时移动数据——这只是给人一种UI正在滚动的印象。这种方法是由屏幕空间有限这一事实驱动的,并且通过添加您看不到的UI元素几乎没有什么好处

另一种方法是一次只创建几个元素,总是给UI线程在“批处理”之间留出响应时间。对于这种方法,创建N个元素,然后添加一个计时器事件。当计时器启动时,再添加N个元素,以此类推,直到创建足够的元素为止



第二种方法的缺点是,由于资源有限,您的操作系统最终会杀死您。如果您创建了100000个UI元素,每个元素都需要10KB的RAM,那么应用程序将仅为UI分配1GB的RAM。

您是否将这些小部件添加到一个本身可见的小部件中?这很慢。是的。有任何可能的解决方法吗?您可以在更改之前尝试
setUpdatesEnabled(false)
,然后重新启用。我已经尝试过了。仍然很慢…您是使用父控件还是无父控件创建小部件,然后通过布局添加它们?Qt文档在某一点上指出,建议使用后者,但我自己在这种方法上有问题(很快创建的新窗口对每个小部件都可见…)您是否将这些小部件添加到一个本身可见的小部件中?这很慢。是的。有任何可能的解决方法吗?您可以在更改之前尝试
setUpdatesEnabled(false)
,然后重新启用。我已经尝试过了。仍然很慢…您是使用父控件还是无父控件创建小部件,然后通过布局添加它们?Qt文档在某一点上指出,建议使用后者,但我自己在这种方法上有问题(很快创建的新窗口对每个小部件都可见…)您是否将这些小部件添加到一个本身可见的小部件中?这很慢。是的。有任何可能的解决方法吗?您可以在更改之前尝试
setUpdatesEnabled(false)
,然后在更改之后重新启用。I