C++ 使缩略图指向真实图像
我有一个带有自定义小部件的QHBox,它继承了QLabel,QLabel在目录中遍历所有图像文件并生成缩略图 这一部分工作正常,但是我需要实现显示原始图像的功能,在中央QLabel小部件中生成缩略图,用于显示图片 这样做的最佳方式是什么?现在clicked()信号仅显示QLabel(缩略图)中的QPixmap,我需要它做的是将原始全尺寸图像加载到位于中心的QLabel上 我猜我需要某种列表来识别每个缩略图及其唯一的全尺寸图像,但我不知道如何实现这样的事情 请告诉我应该如何实施,因为我觉得自己有点不知所措 我现在的代码如下所示:C++ 使缩略图指向真实图像,c++,qt4,C++,Qt4,我有一个带有自定义小部件的QHBox,它继承了QLabel,QLabel在目录中遍历所有图像文件并生成缩略图 这一部分工作正常,但是我需要实现显示原始图像的功能,在中央QLabel小部件中生成缩略图,用于显示图片 这样做的最佳方式是什么?现在clicked()信号仅显示QLabel(缩略图)中的QPixmap,我需要它做的是将原始全尺寸图像加载到位于中心的QLabel上 我猜我需要某种列表来识别每个缩略图及其唯一的全尺寸图像,但我不知道如何实现这样的事情 请告诉我应该如何实施,因为我觉得自己有点
QList<ImageLabel *> labels;
int imagenum = 0;
foreach(const QString &path, files) {
QPixmap px(path);
labels.append(new ImageLabel);
labels[imagenum]->setPixmap(px.scaledToHeight(90));
qhbox->addWidget(labels[imagenum]);
connect(labels[imagenum], SIGNAL(clicked(const QPixmap&)), this, SLOT(setImage(const QPixmap &)));
imagenum++;
}
QList标签;
int imagenum=0;
foreach(常量QString&path,文件){
QPixmap-px(路径);
标签。追加(新图像标签);
标签[imagenum]>setPixmap(px.缩放到高(90));
qhbox->addWidget(标签[imagenum]);
连接(标签[imagenum]、信号(单击(常量QPixmap&))、此、插槽(setImage(常量QPixmap&));
imagenum++;
}
提前感谢您的帮助。一般来说,通过信号和插槽发射复杂对象是个坏主意。如果需要发出复杂对象,最好将它们存储在QMap中并发出QMap的键(字符串或整数) 对于您的问题,我认为您需要采取以下方法:
- 将pixmap路径存储在ImageLabel中,以便了解单击了哪个ImageLabel就足以显示完整图片
- 使用a,文档中的示例与您想要做的非常接近
QList<ImageLabel *> labels;
signalMapper = new QSignalMapper( this );
foreach(const QString &path, files) {
QPixmap px(path);
imgLabel = new ImageLabel();
labels.append( imgLabel );
imgLabel->setPixmap(px.scaledToHeight(90));
qhbox->addWidget(imgLabel);
connect(imgLabel, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping( imgLabel, path );
}
connect( signalMapper, SIGNAL(mapped(const QString &)),
this, SLOT(setImagePath()));
QList标签;
信号映射器=新的QSignalMapper(此);
foreach(常量QString&path,文件){
QPixmap-px(路径);
imgLabel=新的ImageLabel();
标签。附加(imgLabel);
imgLabel->setPixmap(px.scaledToHeight(90));
qhbox->addWidget(imgLabel);
连接(imgLabel,SIGNAL(clicked()),signalMapper,SLOT(map()));
信号映射器->设置映射(imgLabel,路径);
}
连接(信号映射器,信号(已映射(常量QString&)),
这个插槽(setImagePath());
我删除了imagenum的用法,它对该代码没有用处