Изменить значение в списке 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");

1

Решение

Вы используете функции очень низкого уровня. Есть более удобные функции высшего уровня установить / изменить значения / текст / элементы в списке (используя Контейнеры STL или же резольверы).

Предполагая, что вы хотите использовать эти низкоуровневые функции, потому что вы хотите реализовать свой собственный API высшего уровня, вот несколько фактов:

value функция item_proxy вы общаетесь с at(index_pair) даст вам доступ к некоторому объекту, который вы ранее прикрепили к этому элементу. Вы не прикрепили ни одного объекта. Вы можете сначала прикрепить объект или продолжить работу непосредственно с текстом. Самым простым «взломом» является использование текста функции: lb.at(listbox::index_pair(0,1)).text(1,"32"), который устанавливает текст для столбца 1 этого элемента.

РЕДАКТИРОВАТЬ: относительно простое для понимания объяснение: 3-метода к вставке-данные в ListBox-

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]