我发现了几个与此类似的问题,例如:
但是大多数的例子和答案都在1个GUI线程和1个数据处理线程上。在
让我解释一下我的设想。在
我有三门课:
QMainWindow
类并充当主GUI)QWidget
同学们。这个类由所有用户名/密码字段+进度条组成,请参见下图)3.class DataTableWidget(继承自QWidget
类组成显示几十万个数据的表)
程序的设计使得一旦用户通过LogInWidget
登录到程序,他就可以看到DataTableWidget
显示的所有数据。在
我使用.setCentralWidget
方法来设置LogInWidget
和{
table = DataTableWidget ()
self.setCentralWidget(table)
显示表格。在
我的问题是:当用户登录时,在看到数据表之前有一个很大的GUI冻结,因为有太多的数据条目要通过表显示。在
所以我想在程序完成加载表之前显示一个繁忙的进度条(在我的LogInWidget
)上。在
我曾想过使用Qthread
来完成它,但由于显示进度条和创建DataTableWidget
并将其设置为centralwidget这两个任务都是GUI任务,我应该如何处理它?在
您必须将进度条值连接到来自DataTableWidget的信号。但这反过来又假设DataTableWidget在呈现信号时多次生成该信号,这是不可能的。也许您所需要的只是一种显示GUI繁忙的方式,就像条上有一条线在条的两端之间来回移动。这样就不需要在这两个小部件之间交换数据。在
没有直截了当的方法。不过,这里有一个想法:
正如@scholli所说,您需要
DataTableWidget
在渲染时发出一个信号。这样的信号并不存在。即使有,也不会被处理,直到小部件被呈现但是,如果
DataTableWidget
有一个模型,您可以用您自己的方法覆盖data()
方法,它只调用基类的data()
方法并更新进度条(尽管只在第一次呈现表时更新进度条,而不是在随后对data()
的调用期间更新进度条)。当视图呈现时,视图将多次调用data()
方法。这样可以在渲染过程中访问时间点。在{7{redraw>很可能无法通过调用cdraw>来返回进程控制。在
请注意,这是相当老套的,在一般不好的实践中,它完全破坏了模型-视图范式。我不建议这样做。但我想不出有什么办法能达到同样的结果。也许您可以加快
DataTableWidget
的呈现。例如,QTableView.resizeColumnsToContents()
就是众所周知的慢。你在哪打电话?在相关问题 更多 >
编程相关推荐