2

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

我有这个列表,每当单击 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
     }
}

请具体回答您的问题,我将不胜感激

4

3 回答 3

4

如下所示:

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

void Form::itemClickedSlot (QListWidgetItem * itemClicked)
{
//Do something with clicked item
}
于 2011-08-10T10:41:30.757 回答
1

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-> 然后您可以更改它的文本并更改其他一些内容:

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

快乐编码。

于 2012-06-07T13:29:30.100 回答
0

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

于 2011-08-10T09:46:12.873 回答