Qt QListWidget在QGraphicscene中不滚动文本项

Qt QListWidget在QGraphicscene中不滚动文本项,qt,qgraphicsscene,qlistwidget,Qt,Qgraphicsscene,Qlistwidget,我在QGraphicscene中有一个QListWidget。我使用QLineEdit添加新项目。当QListWidget填充并且滚动条在滚动条上处于活动状态时,文本不会滚动,而当前项表示会滚动 完整代码Git: 编辑: 我在水平布局中包含了QCheckBox,以说明为什么需要setItemWidget功能。答案: 文本不会滚动,因为: void QListWidget::setItemWidgetQListWidgetItem*item,QWidget*widget 设置要在给定项目中显示的小

我在QGraphicscene中有一个QListWidget。我使用QLineEdit添加新项目。当QListWidget填充并且滚动条在滚动条上处于活动状态时,文本不会滚动,而当前项表示会滚动

完整代码Git:

编辑:

我在水平布局中包含了QCheckBox,以说明为什么需要setItemWidget功能。

答案:

文本不会滚动,因为:

void QListWidget::setItemWidgetQListWidgetItem*item,QWidget*widget

设置要在给定项目中显示的小部件。此功能只能用于在显示位置显示静态内容 列表小部件项。如果要显示自定义动态内容或 实现一个自定义编辑器小部件,使用QListView和子类 而不是委派

这与QsCene无关

解决方案:

如果要使文本可编辑。这比定制QItemDelegate要简单得多

首先,使用编辑触发器设置列表小部件,告诉小部件何时开始编辑

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ...

    ui->listWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
}
然后,在创建和插入QListWidgetItem时,确保每个项目都是可编辑的

※按如下所示,更换整个按钮点击功能:

void MainWindow::on_pushButton_clicked()
{
    QListWidgetItem* item = new QListWidgetItem("name");
    item->setFlags(item->flags() | Qt::ItemIsEditable);
    ui->listWidget->insertItem(ui->listWidget->currentRow() + 1, item);
}

Qt5.3运行良好。顺便说一句,您的代码显示列表底部的第一项,而不是顶部。是的,这就是问题所在。我将使用与当前5.9.4版本不同的版本进行测试,那么问题是什么…正如您所提到的,文本不会滚动,不是吗?text和scroll都可以正常工作,除了什么性能?是的,问题是:如果我移动条,文本将保持在同一位置。@pazduha您的代码有错误,要更正它,请在主窗口中更改。h change void MyGraphicsView::resizeEventQResizeEvent*event;要作废resizeEventQResizeEvent*事件,请执行以下操作:;,即使如此,我也可以确认Qt5.10.1中的错误,这是针对这个特定问题的解决方案。问题是我需要向水平布局添加更多内容,如上面编辑的代码GIT,edit所示。我将研究QListView和QItemDelegate。@pazduha对于这种情况,您需要使用QListView和子类QItemDelegateinstead@pazduha如果您有多列,请使用QTableView,如果您只想将它们显示为列表,为什么不简单地使用带有滚动条的QLayout?在我的项目中,我使用dragDropMode-InternalMove。我想继续使用它,这就是为什么需要QListView。QTableView可能不适合拖放。