Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检测是否在QlistWidget中的某一行单击了项_C++_Qt_Qlistwidget - Fatal编程技术网

C++ 检测是否在QlistWidget中的某一行单击了项

C++ 检测是否在QlistWidget中的某一行单击了项,c++,qt,qlistwidget,C++,Qt,Qlistwidget,我被赋予了这个简单的任务 我有一个列表,每当单击ok时,我都会插入项目,void Form::ok()处理该事件,以便将新的列表项目添加到列表中 现在我不能做的是检测是否在某一行单击某个项目,然后根据该行执行操作,这是我的代码 #include "form1.h" #include "form.h" #include "ui_form.h" #include "ui_form1.h" #include<QScrollArea> #include<QScrollBar>

我被赋予了这个简单的任务

我有一个列表,每当单击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
     }
}
#包括“form1.h”
#包括“表格h”
#包括“ui_form.h”
#包括“ui_form1.h”
#包括
#包括
//#包括
表单::表单(QWidget*父项):
QWidget(母公司),
ui(新ui::表单)
{
用户界面->设置用户界面(此);
}
表单::~Form()
{
删除用户界面;
}
void Form::ok()
{
QIcon mypix(:/karim/test.png”);
QListWidgetItem*newItem=新QListWidgetItem;
newItem->setText(“pixmix”);
新建项目->设置图标(mypix);
int row=ui->listWidget->row(ui->listWidget->currentItem());
此->用户界面->列表小部件->插入项(行,新项);
//如果(单击第x行的项目)
{
//做点什么
}
}

请在您的回答中具体说明我将非常感谢您需要将itemClicked(QListWidgetItem*item)信号连接到某个插槽,以处理对项目的单击。

如下所示:

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

void Form::itemClickedSlot (QListWidgetItem * itemClicked)
{
//Do something with clicked item
}

QListWidgetItem将其文本存储为QString,因此如果要对其进行操作,可能需要将其强制转换为其他内容。QListWidgetItem本身不保存关于其位置的信息,但QListWidget保存

如果您在signals下查看QListWidget的文档,您会发现有两种不同的状态可以在执行过程中执行函数。我个人使用currentItemChanged

更新构造函数以包括将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;
}
void Form::myFunc(QListWidget*项){
int currentRow=ui->listWidget->currentRow();
std::cout text()).toStdString()然后可以更改它的文本并更改其他内容:


快乐编码。

如何检测单击了哪个项目?传递到插槽的项目就是单击的项目。void Form::ItemClicked(){//do stuff},这是我的插槽…我如何访问传递到插槽的项目?谢谢,它成功了,我仍然遇到问题。我无法检索有关单击项目的信息,如行或文本。我如何确定?