C++ 使缩略图指向真实图像

C++ 使缩略图指向真实图像,c++,qt4,C++,Qt4,我有一个带有自定义小部件的QHBox,它继承了QLabel,QLabel在目录中遍历所有图像文件并生成缩略图 这一部分工作正常,但是我需要实现显示原始图像的功能,在中央QLabel小部件中生成缩略图,用于显示图片 这样做的最佳方式是什么?现在clicked()信号仅显示QLabel(缩略图)中的QPixmap,我需要它做的是将原始全尺寸图像加载到位于中心的QLabel上 我猜我需要某种列表来识别每个缩略图及其唯一的全尺寸图像,但我不知道如何实现这样的事情 请告诉我应该如何实施,因为我觉得自己有点

我有一个带有自定义小部件的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,文档中的示例与您想要做的非常接近
基本上,您可以安排信号映射器发出一个带有属性的信号,该属性是发出信号的小部件的一部分。在您的例子中,如果每个ImageLabel显示的是图像,则可以将其与路径进行映射,并让信号映射器将路径作为信号的一部分发出

一些未经测试的代码尝试:

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的用法,它对该代码没有用处