2

私はこの簡単な仕事を与えられました、

私はこのリストを持っており、okがクリックされるたびにアイテムを挿入します。voidForm:: 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 に答える