Обнаружение щелчка по элементу в некоторой строке в QlistWidget - PullRequest
2 голосов
/ 10 августа 2011

Мне было дано это простое задание,

У меня есть этот список, в который я вставляю элементы всякий раз, когда нажимается ok, void Form :: ok () обрабатывает событие, которое должно добавить новые элементы списка в список.

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

#include "form1.h"
#include "form.h"
#include "ui_form.h"
#include "ui_form1.h"
#include<QScrollArea>
#include<QScrollBar>

//#include <QgeoPositioninfo.h>

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);

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

void Form::ok()
{
    QIcon  mypix  (":/karim/test.png");

    QListWidgetItem* newItem = new QListWidgetItem;
    newItem->setText("pixmix");
    newItem->setIcon(mypix);

    int row = ui->listWidget->row(ui->listWidget->currentItem());
    this->ui->listWidget->insertItem(row, newItem);

    //if(item at row x is clicked)
     {
     //do something
     }
}

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

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Что-то, как показано ниже:

connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(itemClickedSlot(QListWidgetItem *)));

void Form::itemClickedSlot (QListWidgetItem * itemClicked)
{
//Do something with clicked item
}
0 голосов
/ 07 июня 2012

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

Если вы посмотрите документацию для QListWidget под сигналами, вы увидите, что есть пара различных состояний, в которых вы можете выполнять функцию во время.Я лично использую currentItemChanged.

http://qt -project.org / doc / qt-4.8 / QListWidget.html # сигналов

Обновите ваш конструктор, включив в него подключение вашего listWidgetв myFunc:

Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) {
ui->setupUi(this);
connect(ui->listWidget, 
    SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this,
    SLOT(myFunc(QListWidgetItem *)));
}

И добавьте эту функцию в ваш класс:

void Form::myFunc(QListWidget *item) {
    int currentRow = ui->listWidget->currentRow();
    std::cout << (item->text()).toStdString() << std::endl;
}

Это должно получить текущую позицию QListWidgetItem в списке и его текст.Используя item->, вы можете затем изменить его текст и изменить некоторые другие вещи:

http://qt -project.org / doc / qt-4.8 / qlistwidgetitem.html

Удачного кодирования.

0 голосов
/ 10 августа 2011

Вам необходимо подключить сигнал itemClicked (QListWidgetItem * item) к некоторому слоту для обработки щелчков по элементу.

...