2013-03-28 17 views
0

我有一個QListWidget,我使用它我們的圖像過濾器的列表,這個過濾器是通過上下文菜單添加和我重新實現contextMenuEvent,我有2個上下文菜單:addfilter菜單和deletefilter菜單,當我添加過濾器,我只是添加項目到列表中是這樣的:得到正確版本的項目在qt

MenuFiler::MenuFiler() 
{ 

    Laplace = new QAction("Laplace" , this); 
    QObject::connect(Laplace , SIGNAL(triggered()) , this , SLOT(LaplaceSlot())); 

    QObject::connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, `SLOT(ManageControls(QListWidgetItem*))); // to show controls for clicked item`   
    . 
    . 
    . 
} 


void MenuFiler::LaplaceSlot() 
{ 
    this->addItem("Laplace"); 
} 

現在其他功能我檢查是否有項目我得到這個項目的文本和此過濾器創建控件,我不喜歡這樣

void MenuFiler::ManageControls(QListWidgetItem*item) 
{ 
if (item->text() == "Laplace") 
    { 
     if (_laplacianeffect.get() == NULL) 
     { 
      _laplacianeffect = unique_ptr<Laplacianeffect> (new Laplacianeffect()); 
     } 
     _laplacianeffect.get()->show(); 

    } 
    . 
    . 
    // etc 
} 

和控件只是一些按鈕,並滑動ers鏈接到qframe,我在這裏沒有問題。 我的問題是,當我想創建一個向量來保存例如重複的效果,用戶添加此過濾器qListWidget表示過濾器列表:

拉普拉斯 其他效果 拉普拉斯

,所以我會做這樣的事情

void MenuFiler::LaplaceSlot() 
{ 
    _laplacianeffect.push_back(new Laplacianeffect()); 

    this->addItem("Laplace"); 
} 

如何我檢測女巫過濾器選擇

void MenuFiler::ManageControls(QListWidgetItem*item) 
    { 
    if (item->text() == "Laplace") 

     { 
// what is the code that i should use to detect witch effect id is selected) 

       _laplacianeffect.at(filterid).show() 


     } 
    } 

回答

1

您可以將其他用戶定義的數據保存在您的QListWidgetItem中,例如可以保存該效果的所有參數。使用setDatadata函數進行存儲和檢索。例如:

//Let these be the things you want to save for the filter. 
int filterParameter1; 
QString filterParameter2; 
//etc... 

//Save them in your QListWidgetItem* : 
item->setData(Qt::UserRole + 0, filterParameter1); 
item->setData(Qt::UserRole + 1, filterParameter2); 

//Retrieve them later by having the QListWidgetItem* pointer: 
filterParameter1 = item->data(Qt::UserRole + 0).toInt(); 
filterParameter2 = item->data(Qt::UserRole + 1).toString(); 

Qt::UserRole是您可以保存數據的第一個地方,當你在接下來的地方想,你可以保存儘可能多的數據。確保您保存並獲取正確的類型取決於您。

你的情況

然而,一個更簡單的方法可能是保存了一些指向實際效果的結構或某事,或者你甚至可以將保存指向它包含的參數Laplacianeffect類。

編輯:存儲指針:

存儲指針可以是一個有點棘手,標準型系統兼容的方式是described in this question,但作爲一個很不錯的選擇,你可以投三分球,以uintptr_t救出來,並在檢索它們時將它們轉換回指針類型。

但是我建議你使用第一種方法,或者如果你想嘗試第二種方法(由於32位和64位差異等原因,濫用轉換可能是危險的),可以閱讀更多關於指針整數轉換的知識。

+0

感謝您的回覆,但我想在運行時檢測到doubleclick事件,任何幫助 – user2091592

+0

因此,當您將項目插入到您的QListWidget中時,使用'item-> setData(...)'來保存(for例如)一個指向包含參數的Laplacianeffect類的指針。當用戶選擇該項目時,可以使用'item-> data(...)'檢索指針並獲取實際參數。 – Hossein

相關問題