2011-10-05 62 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