У меня есть QListWidget
в моем MainWindow, который отображает список VideoWidgets (пользовательский QWidget
). VideoWidget
имеет щелчок, на который нажимается метка, он должен удалить файл, а затем удалить QListItem
, который содержит VideoWidget
от QListWidget
. Вот мой класс VideoWidget:Извлечение элемента из QListWidget изнутри виджета
VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent)
{
ClickableLabel *smallRed = new ClickableLabel(this)
//...
QObject::connect(smallRed,SIGNAL(clicked()),this,SLOT(removeVideo()));
}
void VideoWidget::removeVideo(){
//...code to remove a file
QListWidget* list = myParent->getList();
QListWidgetItem* item = list->takeItem(list->currentIndex().row());
myList->removeItemWidget(item);
}
Проблема заключается в том, что при нажатии на smallRed
ярлык не будет выбрать его пункт в QListWidget, что означает, что list->currentIndex().row()
вернет -1. Если щелкнуть в другом месте в виджетах, выберите текущий элемент. Для того, чтобы код работал, мне нужно сначала щелкнуть в любом месте в VideoWidget
, а затем щелкнуть его ClickableLabel
. Есть ли способ добиться такого же эффекта одним нажатием на мой ClickableLabel
?
Нужна дополнительная информация. Каково содержимое «VideoWidget»? Что он показывает? – thuga
см. Мой предыдущий вопрос http://stackoverflow.com/questions/26802294/how-to-create-custom-layout-for-widget/. Его довольно виджет, который отображает 4 разных ярлыка. Один, если они являются «ClickableLabel» – testus
Я думаю, что лучший вариант здесь - использовать «QListView» и нарисовать свой пользовательский виджет с помощью специального делегата. Используйте ['QAbstractItemDelegate :: editorEvent'] (http://qt-project.org/doc/qt-5/qabstractitemdelegate.html#editorEvent) для обработки щелчков мышью на ярлыке remove. Вы можете проверить [этот ответ] (http://stackoverflow.com/a/11778012/2257050), чтобы понять, как это можно сделать. Проверьте [этот пример] (http://kunalmaemo.blogspot.fi/2010/12/creating-custom-qitemdelegate-with.html) тоже. – thuga