Russian Qt Forum
Июнь 16, 2024, 01:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: ListView  (Прочитано 23490 раз)
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #15 : Октябрь 15, 2010, 00:18 »

Цитировать
при двойном щелчке по записи в listview выскакивает ошибка windows:
Ну да, вы же присвоили указателю на итем нулевое значение, и тут же пытаетесь  вызвать метод text(), но т.к указатель не ссылается на объект (элемент списка), у вас и происходит этот вылет.

Если надо связать двойной клик и вытягивание  текста  элемента списка в текстовое поле, то  сделайте это через модельный индекс, который передается в выбранном вами сигнале:

Код
C++ (Qt)
void test::slotus2(QModelIndex index)
{
       ui->textEdit->setText(index.data(Qt::DisplayRole).toString());
}
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
Pack
Гость
« Ответ #16 : Октябрь 15, 2010, 00:36 »

Получаются следующие ошибки:  Грустный

"prototype for 'void test::slotus2(QModelIndex)' does not match any in class text "

"candidate is: void test::slotus2() "
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



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

Ну поправьте заголовочный файл test.h, вместо  обяъвления слота slotus2() укажите slotus2(QModelIndex) в соответствии с измененным определением слота

И да, прочитайте таки учебник по С++, чтобы не возникало таких вот "проблем".
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
Pack
Гость
« Ответ #18 : Октябрь 16, 2010, 13:58 »

Все сделал, только редактируемая запись добавляется как новая, а не заменятся В замешательстве
Записан
crossly
Гость
« Ответ #19 : Октябрь 16, 2010, 14:58 »

код покажите..
Записан
Pack
Гость
« Ответ #20 : Октябрь 16, 2010, 17:23 »

файл.h
Код:
#ifndef TEST_H
#define TEST_H

#include <QMainWindow>
#include<QModelIndex>

namespace Ui {
    class test;
}

class test : public QMainWindow
{
    Q_OBJECT

public:
    explicit test(QWidget *parent = 0);
    ~test();

private:
    Ui::test *ui;

private slots:
    void slotus();
    void slotus2(QModelIndex);
};

#endif // TEST_H

файл.cpp
Код:
#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(QModelIndex)));
}

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

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

void test::slotus2(QModelIndex index)
{
    ui->textEdit->setText(index.data(Qt::DisplayRole).toString());
}
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #21 : Октябрь 16, 2010, 18:34 »

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

Код
C++ (Qt)
if (ui->listWidget->selectedItems().isEmpty() != false)
{
   QListWidgetItem *item = new QListWidgetItem(ui->textEdit->toPlainText());
   ui->listWidget->addItem(item);
}
else
{
    QListWidgetItem *item = ui->listWidget->selectedItems().first();
    item->setData(Qt::DisplayRole, ui->textEdit->toPlainText());
}
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
crossly
Гость
« Ответ #22 : Октябрь 16, 2010, 19:40 »

интересно.... а вы понимаете что пишете... Улыбающийся??....

вы же сами добавляете новый Улыбающийся
все же начните с с++....
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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