C++ Qt Do something when an QListWidgetItem from a QListWidget is clicked or selected

114 Views Asked by At
QListWidgetItem* lwi = new QListWidgetItem(text.c_str());
lw->addItem(lwi);
QObject::connect(lwi, &QListWidgetItem::isSelected, &lwi, []() {
    exit(0);
});

I want to do something like this, where if an item from the QListWidget is selected or clicked the program will just exit. But this is not the correct syntax and I have no idea how to make it right. Any help?

1

There are 1 best solutions below

0
paolo On

QListWidgetItem::isSelected is not a Qt signal.

Most likely, your QListWidgetItem will be embedded in a QListWidget. QListWidget provides several signals which may fit your needs. E.g.:

QListWidgetItem* lwi = new QListWidgetItem(text.c_str());
lw->addItem(lwi);

// Assuming lw is a QListWidget*
QObject::connect(lw, &QListWidget::currentItemChanged,
    [lwi](QListWidgetItem* current, QListWidgetItem* /*previous*/)
    {
        if (current == lwi) std::exit(0);
    });

Please also note you don't need to pass the receiver address when connecting a signal to a lambda (or a functor, in general).