2011-10-05 79 views
0

我正在创建一个使用C++ Qt的应用程序,我想加载多个图像。我想附加一个信号给每个图像,以便我可以启用或禁用它们之后。如何将信号附加到qPixmap?

任何帮助?

编辑1:

imageDlg = new QFileDialog(); 
imageList = imageDlg->getOpenFileNames(this, 
         tr("Open Document"), 
         QDir::currentPath(), 
         tr("Image Files (*.png *.jpg);;All files (*.*)")); 


QString imageName; 
int x = -50; 
int y = -50; 
int n = 1; 
double size = imageList.size(); 

if(imageList.isEmpty()) 
    return; 

scene->clear(); 
setCursor(Qt::WaitCursor); 


foreach(imageName,imageList) 
{ 
    double val = (n/size)*100; 
    ui->progressBar->setValue((int)val); 


    image.load(imageName,"4",Qt::AutoColor); 

    image = image.scaled(100,100,Qt::KeepAspectRatio,Qt::FastTransformation); 
    imageNames.push_back(imageName.toStdString()); 

    // scene->setSceneRect(x,y,100,100); 
    item = scene->addPixmap(image); 
    item->setPos(x,y); 
    x = x + 110; 

    if(n%4 == 0) 
    { 
     x = -50; 
     y = y + 90; 
    } 

    n++; 
} 

//ui->label_2->setText(strcat("10","image(s) loaded successfully")); 
setCursor(Qt::ArrowCursor); 
ui->imageGraphicsView->setScene(scene); 
+0

图像不能被“启用”或“禁用”。显示图像的小部件可能会显示/隐藏。你是这个意思吗? – Mat

+0

我只想得到图像,然后我可以将它从图像列表中删除或使其淡出等。 –

+0

请发布您的代码的相关部分。图像无法显示,它直接或间接需要一个小部件。你想要做什么完全取决于你如何显示你的图像,我们不知道任何关于。 – Mat

回答

1

你应该存储QGraphicsPixmapItem*指针您取得回:

scene->addPixmap(); 

(使用如QList<QGraphicsPixmapItem*>或您选择的另一个容器。)

这些是在您的场景中显示的对象。你可以改变它们的外观,显示或隐藏它们,通过这些指针改变它们的不透明度等等。

有关如何操作这些项目的详细信息,请参阅QGraphicsItem的文档。

QGraphicsItem不从QObject继承,它没有信号或槽(从它派生的类也不存在)。如果你想处理鼠标事件,你需要创建一个自定义图形项目(例如从QGraphicsPixmapItem派生),并重新实现你感兴趣的事件处理函数。一个如何处理图形项目的鼠标事件的示例。

+0

感谢您的答案,但如何附加信号,以便当我点击图像,我可以返回它。 –

+0

已更新。您不能将信号“附加”到对象。您可以将插槽连接到对象的信号,但是如果对象尚未发出该信号(或具有该插槽),则无法“打开它”。 – Mat