Win7上的QT5.0.2--独立和同时更新小部件
在Win 7上使用5.0.2 我有两个“ImageLoop”类[扩展了QWidget],每个类占据了屏幕的一半,垂直分割。每个包含一个用于显示jpg文件列表的QLabel。因此,在for循环中,我给每个小部件提供了它们的图像列表,并发出一个“listfull”信号,我已将其连接到两个小部件中的一个插槽——“playList”。不幸的是,似乎只有第一个小部件的信号被发出,因为只有第一个小部件被更新 我不熟悉Qt编程,可能我误解了插槽/信号系统。我认为下面的伪代码会,对于每个实例,填充列表,发出信号,每个实例都会愉快地运行-基本上每个小部件同时独立地显示图像。所以,问题是我遗漏了什么?或者我必须在它们各自的线程中生成它们吗 谢谢 伪代码Win7上的QT5.0.2--独立和同时更新小部件,qt,qt5,Qt,Qt5,在Win 7上使用5.0.2 我有两个“ImageLoop”类[扩展了QWidget],每个类占据了屏幕的一半,垂直分割。每个包含一个用于显示jpg文件列表的QLabel。因此,在for循环中,我给每个小部件提供了它们的图像列表,并发出一个“listfull”信号,我已将其连接到两个小部件中的一个插槽——“playList”。不幸的是,似乎只有第一个小部件的信号被发出,因为只有第一个小部件被更新 我不熟悉Qt编程,可能我误解了插槽/信号系统。我认为下面的伪代码会,对于每个实例,填充列表,发出信号
for(int i=0; i<2; i++){
Create ImageLoop instance
connect(instance, SIGNAL(listfull()), instance, SLOT(playList()));
instance->FillList(arrayOfImageFileNames);
}
//inside of ImageLoop class
void FillList(arrayOfImageFileNames) {
//adds all files to an internal list
//when finished
emit listfull();
}
//inside of ImageLoop class
void playList() {
//code to loop through each image and show it
}
for(int i=0;iFillList(ArrayOfImageFileName);
}
//ImageLoop类的内部
无效填充列表(ArrayOfImageFileName){
//将所有文件添加到内部列表
//完成时
emit listfull();
}
//ImageLoop类的内部
作废播放列表(){
//循环遍历每个图像并显示它的代码
}
for(int i=0;iFillList(ArrayOfImageFileName);
}
您希望此伪代码在两个imageLoop实例上异步调用playList()。实际情况是Qt直接将listFull连接到playList,使此伪代码等效于:
for(int i=0; i<2; i++){
Create ImageLoop instance
instance->FillList(arrayOfImageFileNames);
instance->playList();
}
for(int i=0;iFillList(ArrayOfImageFileName);
实例->播放列表();
}
我猜playList也是同步的,这意味着它将完成,只有到那时for循环才会继续到第二个ImageLoop实例
Qt不允许有多个GUI线程,也不能从多个线程更新GUI,因此需要显示和映像,然后异步发送信号以显示下一个映像
很可能,您真正想要的是在完成fillList()时启动一个计时器,在一定延迟后调用slot shownetimage()。您的slot/signals理论和伪代码看起来不错,但是如果您发布实际代码,那么您可能会得到您想要的答案。
for(int i=0; i<2; i++){
Create ImageLoop instance
instance->FillList(arrayOfImageFileNames);
instance->playList();
}