C++ 检测是否在QlistWidget中的某一行单击了项
我被赋予了这个简单的任务 我有一个列表,每当单击ok时,我都会插入项目,void Form::ok()处理该事件,以便将新的列表项目添加到列表中 现在我不能做的是检测是否在某一行单击某个项目,然后根据该行执行操作,这是我的代码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>
#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},这是我的插槽…我如何访问传递到插槽的项目?谢谢,它成功了,我仍然遇到问题。我无法检索有关单击项目的信息,如行或文本。我如何确定?