I'm trying to add extra data to a wx Tree Item using wxTreeItemData, but I cannot construct a wxTreeItemData object, because the constructor doesn't have any parameters.
Here is my sample code:
wxTreeCtrl treeCtrl = new wxTreeCtrl(parentWindow);
treeCtrl->AddRoot("Root");
treeCtrl->AppendItem(root, "item", -1,-1, "some extra data");
/** Signature help for inline wxTreeItemId AppendItem(const wxTreeItemId &parent, const wxString &text, int image = -1, int selImage = -1, wxTreeItemData *data = (wxTreeItemData *)0). Summary: insert a new item in as the last child of the parent. Current parameter 3 of 5: , . **/
This gives me an error:
E0413. no suitable conversion function from "std::string" to "wxTreeItemData *" exists
But when I pass a wxTreeItemData object nothing happens, because the object is empty.
The wxTreeItemData constructor is without any parameters!
Does anyone know how to add data to a wxTreeItemData object?
Another try
I declared a new class that is derived from the `wxTreeItemData` class, then added a string that will hold the data, and then, I declared, and defined a method to return the data. Code sample:wxTreeItemId item = treeCtrl->AppendItem(Root, "item", -1,-1, new DataItem("some extra data"));
// It should set the new DataItem object as a wxTreeItemData
// I'll try to get the data object from the TreeCtrl:
DataItem *data = treeCtrl->GetItemData(item);
// Signature help for virtual wxTreeItemData * GetItemData(const wxTreeItemId &item) const.
// Trying to print the data:
std::cout << data->GetData();
// It should print the data.
Error:
E0144. a value of type "wxTreeItemData *" cannot be used to initialize an entity of type "DataItem *"
Because the method GetItemData() returns a wxTreeItemData object.
And if I tried to replace the DataItem to wxTreeItemData, I cannot invoke the GetData() method of my DataItem object.
You indeed need to derive your class from
wxTreeItemData, as you've done, and you need to cast the returned value ofGetItemData()to the correct value, i.e. writeThis is safe as long as you only pass actual
DataItemobjects (and not something else) toSetItemData().