Название: Что использовать? Отправлено: dont от Апреля 07, 2006, 14:15 Стал я значит перед такой проблемой:
есть большая таблица(>50 столбцов), нужно сделать что то на подобие меню, что бы пользователь мог выбрать(ну типа пометить галочками) определенные столбци. Какие элементы для этого лучше юзать? Пробывал в меня все это всунуть, понял что гон, да и кутэ дизайнер только 25 нормально добавляет... Думал может КомбоБокс, но мну нужно, что бы пользователь мог отмечать галочками поля... Подскажите плз, а то на групы разбивать низя, говорили так нужно сделать.... Название: Что использовать? Отправлено: Steven_Orko от Апреля 07, 2006, 23:43 Мда... очень "хорошая" формулировка вопроса...Какой вопрос, такой и ответ... используй собственный виджет, который позволит тебе иметь 50 QCheckBox или QListWidget со вставленными в него QCheckBox... Аж целых 50 штук можно... а проверять... ну, там уж есть такое PROPERTY:
checked : bool This property holds whether the button is checked. Only checkable buttons can be checked. By default, the button is unchecked. Access functions: bool isChecked () const void setChecked ( bool ) Название: Что использовать? Отправлено: dont от Апреля 08, 2006, 00:14 Как мне намутить собственный виджет и вставить в него чекбоксы? Как проверять, я знаю.
Хорошо, попробую еще раз объясниться. Есть в роле центрального виджета таблица, число столбцов которой должно меняться в зависимости от желаний пользователя... Какой виджет использовать для того, что бы пользователь мог удобно выбирать, какие столбцы он хочет видеть? Название: Что использовать? Отправлено: Steven_Orko от Апреля 09, 2006, 01:01 Ну, например, можно сделать что-то вроде диалога с панелью инструментов, в роле одного из инструментов будет кнопка конфигурации. Пользователь жмет на нее, появляется модальный диалог с QListWidget, в котором будет 50 QCheckBox. Как вставить в него QCheckBox подробнее см. Assistat, начни с функции setItemWidget():
void QListWidget::setItemWidget ( QListWidgetItem * item, QWidget * widget ) Sets the widget to be displayed in the give item. This function should only be used to display static content in the place of a list widget item. If you want to display custom dynamic content or implement a custom editor widget, use QListView and subclass QItemDelegate instead. This function was introduced in Qt 4.1. Так вот.... Пользователь отмечает там галочками те столбцы, которые он хочет видеть, и нажимает ОК... Ты после выхода из exec вызываешь что-то наподобии функции: QStringList selectedColumns() const. Эта функция написана тобой. В ней ты проверяешь все отмеченные QCheckBox и возвращаешь названия столбцов в виде списка строк... Ну, а дальше сам знаешь, что делать... Код примерно такой. Роли исполяют: - My_Conf - класс диалогового окна со списком QCheckBoxes; - My_Form - твоя форма (класс) с таблицей основной. Код:
Название: Что использовать? Отправлено: dont от Апреля 09, 2006, 01:30 спасибо, добрый человек!
Только еще один вопрос: пользователь очень часто будет обращаться к выбору столбцов, нельзя ли сделать так, что бы этот ЛистВиджет показывался как контекстное меню, или что-то в этом роде, просто каждый раз открывать диалоговое окно геморно очень... И еще, есть такая же проблема с QTableView, нужно замутить некоторые ячейки опять же с тем ЧекБоксом, на подобие Эксесса. Что бы пользователь мог отметить нужные ему записи, а потом уже экспорт в Эксесс или сразу на печать(ну с этим я сам розберусь, интересует как вставить чекбоксы в ячейки таблицы...) Название: Что использовать? Отправлено: danius от Апреля 09, 2006, 09:02 Обычно в таких случаях поступают так: два QListView (QListWidget), в правом все доступные поля таблицы, а в левом те которые ты хочешь отображать. Посередине ставишь кнопки со стрелками <- ->, а так же я полагаю ты хотел бы менять положение отображаемых полей так, что еще пара кнопок вверх и вниз. А еще лучше подумать о Drug'n'Drop.
ЗЫ. Таблица с 50 полями :( подумай может стоить разбить на несколько. Название: Что использовать? Отправлено: Steven_Orko от Апреля 09, 2006, 14:33 Цитата: "dont" спасибо, добрый человек! Только еще один вопрос: пользователь очень часто будет обращаться к выбору столбцов, нельзя ли сделать так, что бы этот ЛистВиджет показывался как контекстное меню, или что-то в этом роде, просто каждый раз открывать диалоговое окно геморно очень... Давай подумаем вместе... Диалоговое окно открывать часто очень геморно, да и к тому же догло именно тем спсобом, что я тебе описал. Для ускорения необходимо создать динамически в памяти, а при выходе (закрытии формы) прибить... Далее... Ты сам сказал, что столбцов у тебя 50. Представь себе онтекстное меню с 50ью элементами? Это ОЧЕНЬ напряжно для пользователя... Очень хороший метод решения предложил danius, но как ты говорил, этот диалог вызывается часто... (Хотя я не могу понять, зачем так часто...) Раз так, то можно сделать контекстное меню для всей таблицы, при его открытии до того, как оно будет показано формировать пункты меню. Например, Будут отображаться две части в меню... первая - какие солбцы скрыть, вторая - какие столбцы показать... Ну, нулевой пункт можно сделать "Скрыть текущий столбцец"... имеется ввиду тот, на котором пользователь нажал кнопку вызова контекстного меню... Цитата: "dont" нельзя ли сделать так, что бы этот ЛистВиджет показывался как контекстное меню, или что-то в этом роде В принципе, чисто теоритически это сделать можно... Но ты представляешь как? Например, тебе обычному виджету нужно дать поведение контекстного меню.... Возможно Dendy меня поправит, но я не знаю ни одного такого виджета в текущем последнем Qt FrameWork, а потому тебе придется самому все это делать... Как минимум, тебе надо будет отслеживать положения мыши, состояние ее кнопок, чтобы вовремя убрать/показать виджет... Как максимум, придется еще переписать член-функцию exec... При этом ты можешь использовать только средства Qt FrameWork, если, конечно, тебе нужна кроссплатформенность. ))) Цитата: "dont" И еще, есть такая же проблема с QTableView, нужно замутить некоторые ячейки опять же с тем ЧекБоксом, на подобие Эксесса. Что бы пользователь мог отметить нужные ему записи, а потом уже экспорт в Эксесс или сразу на печать(ну с этим я сам розберусь, интересует как вставить чекбоксы в ячейки таблицы...) Для QTableView почти не как... для этого надо делать свою модель данных... Так как QTableView - это всего лишь View... Подробнее смотри статью Model/View Programming. Название: Что использовать? Отправлено: crocus от Апреля 09, 2006, 18:22 А еще можно сделать мультиселекторный QListView c именами столбцов и по факту селекта-деселекта
Код:
Название: Что использовать? Отправлено: dont от Апреля 11, 2006, 00:14 Всем спасибо... :wink:
Название: Что использовать? Отправлено: mindz_eye от Апреля 12, 2006, 17:42 Цитата: "dont" интересует как вставить чекбоксы в ячейки таблицы Как вариант, ты можешь переопределить paint класса QItemDelegate и в нем отрисовывать чекбокс, с помощью метода drawCheck. Чтобы чекбоксы реагировали на клики мышкой, переопределяешь editorEvent. Название: Что использовать? Отправлено: Racheengel от Апреля 12, 2006, 17:49 http://hardclub.donntu.edu.ua/projects/qt/components/vbrowser2.htm
это зло |