Qt: Советы по динамическому интерфейсу - PullRequest
3 голосов
/ 12 сентября 2010

Я пытаюсь создать пользовательский интерфейс, содержащий список таких элементов:
http://img707.imageshack.us/img707/1114/16900293.png
http://img707.imageshack.us/img707/1114/16900293.png
http://img707.imageshack.us/img707/1114/16900293.png

Пользователь может изменить количество элементов, поэтому пользовательский интерфейс является динамическим.

Каковы лучшие компоненты для получения пользовательского ввода, как на картинке? Это кратно QLabel с и QLineEdit с?
Как лучше всего управлять ими?

Ответы [ 3 ]

4 голосов
/ 13 сентября 2010

Если пользовательский интерфейс содержит множество этих элементов, вы можете использовать QTableView (или QTableWidget). Вы можете представить статические части "x =", "(2n" и "t)" в статических столбцах или создать делегата, который бы рисовал статические части другим цветом.

Преимущество использования QTableView вместо QLineEdits состоит в том, что перемещаться с помощью клавиатуры легко. С помощью клавиш курсора вы можете легко перемещать фокус вокруг. Опыт редактирования такой же, как в приложениях для работы с электронными таблицами, таких как Excel.

3 голосов
/ 12 сентября 2010

Я сделал нечто подобное с несколькими контейнерами QQueue, заполненными элементами QLabel и QLineEdit.Просто добавляйте и удаляйте элементы, когда пользователь желает более или менее.Можно объединить это с QGridLayout и поместить вещи туда, где вам нужно.Не уверен, что это лучший способ, но у меня хорошо работает.

http://doc.trolltech.com/4.4/qqueue.html

QQueue<QLineEdit *> linedit;
QGridLayout *gridboxLayout;
gridboxLayout= new QGridLayout();

linedit.enqueue(new QLineEdit ());
gridboxLayout->addWidget(linedit.last(),row,column);
this->setLayout(gridboxLayout);

Вам нужно будет добавить материал для отслеживания строк, столбцов и элементов и тому подобноено это базовая настройка.Просто продолжайте добавлять новые элементы в QQueue и вставляйте в новую строку gridLayout.Вы можете даже ссылаться на них по строкам и позже удалять их.

Другой простой способ сделать это, который будет работать с дизайнером, если у вас есть разумное максимальное количество элементов, - это просто построить все это.и скрыть виджеты, которые вы не хотите видеть, пока они вам не понадобятся.

1 голос
/ 15 сентября 2010

Если у вас есть большое количество очень похожих виджетов (например), я бы порекомендовал либо исследовать один из видов моделей, либо создать собственный виджет, и позволить этим виджетам самостоятельно выполнять редактирование. Тогда ваш основной виджет может просто составить список пользовательских виджетов в прокручиваемой области, и не беспокоиться о отслеживании каждого значения.

...