我接受了这个简单的任务,
我有这个列表,只要单击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
}
}
请具体说明您的回答我会很感激
答案 0 :(得分:3)
如下所示:
connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(itemClickedSlot(QListWidgetItem *)));
void Form::itemClickedSlot (QListWidgetItem * itemClicked)
{
//Do something with clicked item
}
答案 1 :(得分:0)
您需要将itemClicked(QListWidgetItem * item)信号连接到某个插槽以处理对项目的点击。
答案 2 :(得分:0)
QListWidgetItem将其文本存储为QString,因此如果要操作它,可能需要将其强制转换为其他内容。 QListWidgetItem本身不保存有关它位置的信息,但QListWidget却没有。
如果您查看信号下QListWidget的文档,您可以看到有几种不同的状态可以在执行期间执行。我个人使用currentItemChanged。
http://qt-project.org/doc/qt-4.8/QListWidget.html#signals
更新构造函数以包括将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-&gt;然后你可以改变它的文本并改变其他一些东西:
http://qt-project.org/doc/qt-4.8/qlistwidgetitem.html
快乐的编码。