Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Как удалить item из QListWidget, по нажатию кнопки в нем.

Автор: RazrFalcon 3.8.2011, 10:24

Есть QListWidget, в каждый элемент вставлен виджет. setItemWidget();
Сам виджет - класс наследник от QWidget.
На каждом виджете расположена кнопка закрыть.

Как по нажатию этой кнопки (закрытьС) удалить итем QListWidget'а, содержащий этот вижет.

В самом виджете я вызываю deleteLater(); и он удаляется. но остается просто пустой QListWidgetItem.
Как узнать какой необходимо удалить?

Пример:
http://itmages.ru/image/view/247304/5cef6b29

Автор: igor_bogomolov 3.8.2011, 12:27

Я когда то делал так (только у меня таблица была):

1. для каждой кнопки в свойствах указывал номер строки за которую он отвечает

    QToolButton *delete_button = new QToolButton();
    delete_button->setProperty("row", row);
    table->setCellWidget(row,4, delete_button);
    connect(delete_button, SIGNAL(clicked()), SLOT(queryDeleteProfileMulticast()));

2. в слоте узнавал какая кнопка нажата и за какую строку она отвечает
void CgcParamTab::queryDeleteProfileMulticast()
{
    QToolButton *button = qobject_cast<QToolButton *>(sender());
    if(!button) return;

    bool ok = false;
    int row = button->property("row").toInt(&ok);
    if(!ok) return;

3. удалял нужную строку
    table->removeRow(row);

4. переназначал свойство для оставшихся кнопок
for (........) {
        toolButton = table->cellWidget(row, 4);
        if (toolButton!=0) toolButton->setProperty("row", row);
}


Автор: RazrFalcon 3.8.2011, 13:00

Спасибо. То что нужно.
У меня все было точно также, разве что в классе-наследнике я не кнопке setProperty() делал, а просто переменную завел.
Моя ошибка была в том, что я не переназначал индексы. И после каждого удаления они сбивались конечно же, и получалось черти что :lol:

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)