【发布时间】:2014-11-11 18:29:30
【问题描述】:
我的 MainWindow 中有一个 QListWidget,它显示了 VideoWidgets 列表(自定义 QWidget)。
VideoWidget 有一个可点击的标签,点击该标签应该删除一个文件,然后从QListWidget 中删除包含VideoWidget 的QListItem。这是我的 VideoWidget 类:
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的内容是什么?它显示了什么? -
查看我之前的问题stackoverflow.com/questions/26802294/…。它几乎是一个显示 4 个不同标签的小部件。如果他们是
ClickableLabel -
我认为这里最好的选择是使用
QListView并使用自定义委托绘制您的自定义小部件。使用QAbstractItemDelegate::editorEvent处理删除标签上的鼠标点击。您可以查看this answer 了解如何完成。也检查this example。
标签: c++ qt qwidget qlistwidget