检测是否在QlistWidget的某一行上单击了某项

Detecting if an item is clicked at at some row in a QlistWidget

本文关键字:一行 单击 是否 QlistWidget 检测      更新时间:2023-10-16

我接到了这个简单的任务,

我有这个列表,我插入项目每当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
     }
}

请在你的答案中具体,我会感谢

如下:

connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(itemClickedSlot(QListWidgetItem *)));
void Form::itemClickedSlot (QListWidgetItem * itemClicked)
{
//Do something with clicked item
}

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

快乐编码。

您需要将itemClicked(QListWidgetItem * item)信号连接到某个插槽,以处理对项目的单击。