Russian Qt Forum
Ноябрь 23, 2024, 05:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: ListView  (Прочитано 24313 раз)
Pack
Гость
« : Октябрь 13, 2010, 01:00 »

Всем привет! Я в qt новичок, помогите пожалуйста разобраться как работать в qt с listview, через дизайнер.
Например есть на форме listview, pushbutton, textbox, как соединить их так чтобы при ввводе текста и нажатии кнопки запись добавлялась в listview!
Пожалуйста)))))
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #1 : Октябрь 13, 2010, 01:58 »

QlistView сам не хранит данные, он их лишь отображает, используя модель, которая хранит эти "записи". Скорее всего вы имели в виду  qlistWidget, объединяющий в себе сразу и модель дляхранения списка и  qListView для отображения.

Добавлять текст из текстового поля (QLineEdit, текстбоксы вроде были в  Delphi0, можно например так:

1. создаем указатель на элемент списка объъект QListWidtedItem, в конструктор  которого  передаем текст из текстового поля
2. добавляем созданный элемент в qListWidget
3. очищаем текстовое поле для вводатекста нового элемента

Код
C++ (Qt)
QListWidgetItem *item = new QListWidgetItem(textEdit->toPlainText());
listWidget->addItem(item);
textEdit->clear();

textEdit - это ваше поле ввода текста объект класса QTextEdit
listWidget - виджет списка строк (QListWidget)

И все это выполняется в слоте, с которым связан сигнал  clicked() вашей кнопки.
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
kirill
Гость
« Ответ #2 : Октябрь 13, 2010, 14:47 »

Да не используйте вы дизайнер, епта! Это зло. Пишите код руками, быстрее будет в разы.
Записан
Pack
Гость
« Ответ #3 : Октябрь 13, 2010, 16:36 »

"DOOMer"
Просто когда делаю через дизайнер, там же несколько файлов проекта:
main.cpp
mywidget.cpp
mywidget.h
mywidget.ui - сама форма
А в каком файле прописывать
Код:
QListWidgetItem *item = new QListWidgetItem(textEdit->toPlainText());
listWidget->addItem(item);
textEdit->clear();
я теряюсь(((
Записан
crossly
Гость
« Ответ #4 : Октябрь 13, 2010, 16:57 »

в mywidget.cpp.... а если теряетесь нужно с++ подучить... Улыбающийся
Записан
Pack
Гость
« Ответ #5 : Октябрь 13, 2010, 18:16 »

Спасибо за пояснения)))
Еще такой вопросик, как сделать в Listwidget, чтобы было несколько колонок, из из разных textEdit данные передавались в разные колонки   В замешательстве
Записан
crossly
Гость
« Ответ #6 : Октябрь 13, 2010, 18:54 »

никак.... на то он и лист... используй qtreewidget
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #7 : Октябрь 13, 2010, 19:28 »

Цитировать
как сделать в Listwidget, чтобы было несколько колонок, из из разных textEdit данные передавались в разные колонки
Как уже сказал crossly -- это никак не сделать, qlistWidget не поддерживает многоклоночность.  Для этого вполне можно испольхзовать  QTreeWidget (вот тебе небольшой пример, набросаный по быстрому в креаторе).

Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
Pack
Гость
« Ответ #8 : Октябрь 14, 2010, 12:45 »

Возникла проблемка(((  Хочу сделать чтобы при двойном щелчке по элементу он отображался в TextEdit где его можно редактировать а затем по нажатию кнопки измененное значение заносилось на старое место:
создал слот;
соединил QListWidget
Код:
QObject::connect(ui->listWidget, SIGNAL(activated(QModelIndex)), this, SLOT(slotus2())); 
правильный сигнал?

И тут пробовал по разному описать слот:
Код:
void test ::slotus2()
{
   ui->listWidget->setCurrentItem(ui->textEdit->(???));

}
или
Код:
void test ::slotus2()
{
    QListWidgetItem* item = 0;
    QListWidgetItem::setFlags(Qt::ItemIsEnable);
    ui->textEdit-> ???
    }


Помогите пожалуйста  Грустный
Записан
zoro86
Гость
« Ответ #9 : Октябрь 14, 2010, 12:50 »

используешь сигнал..
Код:
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());
Записан
voral
Гость
« Ответ #10 : Октябрь 14, 2010, 13:02 »

Возникла проблемка(((  Хочу сделать чтобы при двойном щелчке по элементу он отображался в TextEdit где его можно редактировать а затем по нажатию кнопки измененное значение заносилось на старое место:
Возможно вам стоит обратить вимание на QStyletItemDelegat и метод setItemDelegate() (| SetItemDelegateForColumn() | setItemDelegateForColumn())
Записан
zoro86
Гость
« Ответ #11 : Октябрь 14, 2010, 13:09 »

советую для начала проста "поиграть" с Qt...учитывая что вы только начали изучать... Делегаты могут показаться вам трудно понимаемыми, это из моего небольшего опыта.

смотрите для начала в сторону...
Код:
void QAbstractItemView::doubleClicked ( const QModelIndex & index )   [signal]
This signal is emitted when a mouse button is double-clicked. The item the mouse was double-clicked on is specified by index. The signal is only emitted when the index is valid.

See also clicked() and activated().

Потом по мере развития усложняйте версию... Подмигивающий

Записан
crossly
Гость
« Ответ #12 : Октябрь 14, 2010, 14:30 »

Возникла проблемка(((  Хочу сделать чтобы при двойном щелчке по элементу он отображался в TextEdit где его можно редактировать а затем по нажатию кнопки измененное значение заносилось на старое место:
создал слот;
соединил QListWidget
Код:
QObject::connect(ui->listWidget, SIGNAL(activated(QModelIndex)), this, SLOT(slotus2())); 
правильный сигнал?

И тут пробовал по разному описать слот:
Код:
void test ::slotus2()
{
   ui->listWidget->setCurrentItem(ui->textEdit->(???));

}
или
Код:
void test ::slotus2()
{
    QListWidgetItem* item = 0;
    QListWidgetItem::setFlags(Qt::ItemIsEnable);
    ui->textEdit-> ???
    }


Помогите пожалуйста  Грустный

а может просто QDataWidgetMapper??
Записан
Pack
Гость
« Ответ #13 : Октябрь 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"
#include "ui_test.h"

test::test(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::test)
{
    ui->setupUi(this);
    QObject::connect(ui->pushButton, SIGNAL(clicked()),this, SLOT(slotus()));
    QObject::connect(ui->listWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(slotus2()));


}

test::~test()
{
    delete ui;
}

void test ::slotus()
{
    QListWidgetItem *item = new QListWidgetItem(ui->textEdit->toPlainText());
    ui->listWidget->addItem(item);
    ui->textEdit->clear();


}


void test::slotus2()
{
    QListWidgetItem *item=0;
    ui->textEdit_2->setText(item->text());
}
при двойном щелчке по записи в listview выскакивает ошибка windows:
"Прекращена работа программы test.exe" (((((((

Записан
crossly
Гость
« Ответ #14 : Октябрь 14, 2010, 23:51 »

бред какой то.... возьмите книгу по с++... и возвращайтесь к Qt недель через пару.... по теме попробуйте сложить эти 2 вещи QListWidgetItem *item=0; и item->text()...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.167 секунд. Запросов: 22.