Я пытаюсь создать графический интерфейс с сеткой свойств (сетка имя: пары значений)
Виджет списка, кажется, способ начать. (поправьте меня, если есть что-то лучшее)
Код (ниже), который я написал, компилирует и запускает. Начальные пары имя / значение показывают отлично, но попытка изменить значение первого элемента ничего не дает.
Я рассмотрел несколько примеров списка, но не могу найти простой способ изменить значение в списке после инициализации
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");
Вы используете функции очень низкого уровня. Есть более удобные функции высшего уровня установить / изменить значения / текст / элементы в списке (используя Контейнеры STL или же резольверы).
Предполагая, что вы хотите использовать эти низкоуровневые функции, потому что вы хотите реализовать свой собственный API высшего уровня, вот несколько фактов:
value
функция item_proxy
вы общаетесь с at
(index_pair) даст вам доступ к некоторому объекту, который вы ранее прикрепили к этому элементу. Вы не прикрепили ни одного объекта. Вы можете сначала прикрепить объект или продолжить работу непосредственно с текстом. Самым простым «взломом» является использование текста функции: lb.at(listbox::index_pair(0,1)).text(1,"32")
, который устанавливает текст для столбца 1 этого элемента.
РЕДАКТИРОВАТЬ: относительно простое для понимания объяснение: 3-метода к вставке-данные в ListBox-
Других решений пока нет …