2017-07-07 62 views
1

我想創建一個屬性網格(名稱:值對的網格)的GUI改變nana列表框中的值

列表框小部件似乎是開始的方式。 (請糾正我,如果有更好的東西可用)

代碼(下)我寫了編譯和運行。初始名稱/值對顯示正常,但嘗試更改第一個項目的值無效。

我已經看了幾個列表框的例子,但無法找到一個簡單的方法來改變一個列表框的值初始化一次

int main() 
{ 
using namespace nana; 

// form to hold everything 
form fm; 

// listbox to be the property grid 
listbox lb(fm, nana::rectangle(10, 10, 280, 120)); 

// column headers 
lb.append_header("Name", 200); 
lb.append_header("Value", 200); 

// add two items to the default category 
lb.at(0).append({"A", "0"}); 
lb.at(0).append({"B", "0"}); 

// change value of A item to 32 (fails to do anything) 
lb.at(listbox::index_pair(0,1)).value("32"); 

fm.show(); 
exec(); 
} 

也試過(不編譯)

lb.at(listbox::index_pair(0,1)).value({"A","32"}); 

和(運行,無效)

lb.anyobj(0, 0, "32"); 

回答

2

您正在使用非常低級別的功能。有more convenient higth level functions來設置/更改列表框中的值/文本/項目(使用STL containersresolvers)。

假設你想becouse你想實現自己的higth級別的API來使用這些低級別的功能,這裏有一些事實:

item_proxy您正在使用at(index_pair)accesing的value功能會給你訪問您以前附加到該項目的某個對象。你沒有附加任何物體。您可以首先附加一個對象,或者您可以繼續直接處理文本。最簡單的「破解」是使用函數文本:lb.at(listbox::index_pair(0,1)).text(1,"32"),它爲該項目的第1列設置文本。

編輯:一個比較簡單易懂的解釋:3-methods-to-insert-data-into-listbox

+0

作品。謝謝。 「有更方便的高級功能」他們叫什麼?他們的文檔在哪裏?有使用它們的簡單介紹性例子嗎?更新:剛剛發現https://sourceforge.net/p/nanapro/blog/2016/04/preview-of-listbox-model/ – ravenspoint

+0

感謝您提供文檔鏈接。我一直在與這些工作。他們工作得很好。但是,我有一個複雜和難以理解的問題。在我看來,簡單地傳遞對STL容器的引用更容易理解和實現。所以我回去做那個。請參閱https://github.com/JamesBremner/nana_property_grid – ravenspoint