Название: ListView Отправлено: Pack от Октябрь 13, 2010, 01:00 Всем привет! Я в qt новичок, помогите пожалуйста разобраться как работать в qt с listview, через дизайнер.
Например есть на форме listview, pushbutton, textbox, как соединить их так чтобы при ввводе текста и нажатии кнопки запись добавлялась в listview! Пожалуйста))))) Название: Re: ListView Отправлено: DOOMer от Октябрь 13, 2010, 01:58 QlistView сам не хранит данные, он их лишь отображает, используя модель, которая хранит эти "записи". Скорее всего вы имели в виду qlistWidget, объединяющий в себе сразу и модель дляхранения списка и qListView для отображения.
Добавлять текст из текстового поля (QLineEdit, текстбоксы вроде были в Delphi0, можно например так: 1. создаем указатель на элемент списка объъект QListWidtedItem, в конструктор которого передаем текст из текстового поля 2. добавляем созданный элемент в qListWidget 3. очищаем текстовое поле для вводатекста нового элемента Код
textEdit - это ваше поле ввода текста объект класса QTextEdit listWidget - виджет списка строк (QListWidget) И все это выполняется в слоте, с которым связан сигнал clicked() вашей кнопки. Название: Re: ListView Отправлено: kirill от Октябрь 13, 2010, 14:47 Да не используйте вы дизайнер, епта! Это зло. Пишите код руками, быстрее будет в разы.
Название: Re: ListView Отправлено: Pack от Октябрь 13, 2010, 16:36 "DOOMer"
Просто когда делаю через дизайнер, там же несколько файлов проекта: main.cpp mywidget.cpp mywidget.h mywidget.ui - сама форма А в каком файле прописывать Код: QListWidgetItem *item = new QListWidgetItem(textEdit->toPlainText()); Название: Re: ListView Отправлено: crossly от Октябрь 13, 2010, 16:57 в mywidget.cpp.... а если теряетесь нужно с++ подучить... :)
Название: Re: ListView Отправлено: Pack от Октябрь 13, 2010, 18:16 Спасибо за пояснения)))
Еще такой вопросик, как сделать в Listwidget, чтобы было несколько колонок, из из разных textEdit данные передавались в разные колонки :-\ Название: Re: ListView Отправлено: crossly от Октябрь 13, 2010, 18:54 никак.... на то он и лист... используй qtreewidget
Название: Re: ListView Отправлено: DOOMer от Октябрь 13, 2010, 19:28 Цитировать как сделать в Listwidget, чтобы было несколько колонок, из из разных textEdit данные передавались в разные колонки Как уже сказал crossly -- это никак не сделать, qlistWidget не поддерживает многоклоночность. Для этого вполне можно испольхзовать QTreeWidget (вот тебе небольшой пример, набросаный по быстрому в креаторе).Название: Re: ListView Отправлено: Pack от Октябрь 14, 2010, 12:45 Возникла проблемка((( Хочу сделать чтобы при двойном щелчке по элементу он отображался в TextEdit где его можно редактировать а затем по нажатию кнопки измененное значение заносилось на старое место:
создал слот; соединил QListWidget Код: QObject::connect(ui->listWidget, SIGNAL(activated(QModelIndex)), this, SLOT(slotus2())); И тут пробовал по разному описать слот: Код: void test ::slotus2() Код: void test ::slotus2() Помогите пожалуйста :( Название: Re: ListView Отправлено: zoro86 от Октябрь 14, 2010, 12:50 используешь сигнал..
Код: void QListWidget::itemDoubleClicked ( QListWidgetItem * item ) [signal] далее в слоте делаешь.. QTextEdit->setText(item->text()); Название: Re: ListView Отправлено: voral от Октябрь 14, 2010, 13:02 Возникла проблемка((( Хочу сделать чтобы при двойном щелчке по элементу он отображался в TextEdit где его можно редактировать а затем по нажатию кнопки измененное значение заносилось на старое место: Возможно вам стоит обратить вимание на QStyletItemDelegat и метод setItemDelegate() (| SetItemDelegateForColumn() | setItemDelegateForColumn())Название: Re: ListView Отправлено: zoro86 от Октябрь 14, 2010, 13:09 советую для начала проста "поиграть" с Qt...учитывая что вы только начали изучать... Делегаты могут показаться вам трудно понимаемыми, это из моего небольшего опыта.
смотрите для начала в сторону... Код: void QAbstractItemView::doubleClicked ( const QModelIndex & index ) [signal] Потом по мере развития усложняйте версию... ;) Название: Re: ListView Отправлено: crossly от Октябрь 14, 2010, 14:30 Возникла проблемка((( Хочу сделать чтобы при двойном щелчке по элементу он отображался в TextEdit где его можно редактировать а затем по нажатию кнопки измененное значение заносилось на старое место: создал слот; соединил QListWidget Код: QObject::connect(ui->listWidget, SIGNAL(activated(QModelIndex)), this, SLOT(slotus2())); И тут пробовал по разному описать слот: Код: void test ::slotus2() Код: void test ::slotus2() Помогите пожалуйста :( а может просто QDataWidgetMapper?? Название: Re: ListView Отправлено: Pack от Октябрь 14, 2010, 23:20 Цитировать используешь сигнал.. сделал так же:Код: void QListWidget::itemDoubleClicked ( QListWidgetItem * item ) [signal] This signal is emitted with the specified item when a mouse button is double clicked on an item in the widget. See also itemClicked() and itemPressed(). далее в слоте делаешь.. QTextEdit->setText(item->text()); Код: #include "test.h" "Прекращена работа программы test.exe" ((((((( Название: Re: ListView Отправлено: crossly от Октябрь 14, 2010, 23:51 бред какой то.... возьмите книгу по с++... и возвращайтесь к Qt недель через пару.... по теме попробуйте сложить эти 2 вещи QListWidgetItem *item=0; и item->text()...
Название: Re: ListView Отправлено: DOOMer от Октябрь 15, 2010, 00:18 Цитировать при двойном щелчке по записи в listview выскакивает ошибка windows: Ну да, вы же присвоили указателю на итем нулевое значение, и тут же пытаетесь вызвать метод text(), но т.к указатель не ссылается на объект (элемент списка), у вас и происходит этот вылет.Если надо связать двойной клик и вытягивание текста элемента списка в текстовое поле, то сделайте это через модельный индекс, который передается в выбранном вами сигнале: Код
Название: Re: ListView Отправлено: Pack от Октябрь 15, 2010, 00:36 Получаются следующие ошибки: :(
"prototype for 'void test::slotus2(QModelIndex)' does not match any in class text " "candidate is: void test::slotus2() " Название: Re: ListView Отправлено: DOOMer от Октябрь 15, 2010, 02:58 Ну поправьте заголовочный файл test.h, вместо обяъвления слота slotus2() укажите slotus2(QModelIndex) в соответствии с измененным определением слота
И да, прочитайте таки учебник по С++, чтобы не возникало таких вот "проблем". Название: Re: ListView Отправлено: Pack от Октябрь 16, 2010, 13:58 Все сделал, только редактируемая запись добавляется как новая, а не заменятся :-\
Название: Re: ListView Отправлено: crossly от Октябрь 16, 2010, 14:58 код покажите..
Название: Re: ListView Отправлено: Pack от Октябрь 16, 2010, 17:23 файл.h
Код: #ifndef TEST_H файл.cpp Код: #include "test.h" Название: Re: ListView Отправлено: DOOMer от Октябрь 16, 2010, 18:34 Цитировать Все сделал, только редактируемая запись добавляется как новая, а не заменятся Проверяйте наличие выделнных элементов списка в обработчике нажатия кнопки. Если нет, то добавляйте запись, если есть выделеный элемент -- обновляйте его.Код
Название: Re: ListView Отправлено: crossly от Октябрь 16, 2010, 19:40 интересно.... а вы понимаете что пишете... :)??....
вы же сами добавляете новый :) все же начните с с++.... |