首页 > 解决方案 > QGraphicsScene 中的 QListWidget 不滚动文本项

问题描述

我在 QGraphicsScene 中有一个 QListWidget。我在里面添加了带有 QLineEdit 的新项目。当 QListWidget 填充并且滚动条在滚动时处于活动状态时,文本不会滚动,当前项目表示会滚动。

在此处输入图像描述

完整代码 Git:代码

编辑:

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

标签: qtqgraphicssceneqlistwidget

解决方案


回答:

文本不会滚动,因为setItemWidget是:

void QListWidget::setItemWidget(QListWidgetItem *item, QWidget *widget)

设置要在给定项目中显示的小部件。此功能仅应用于在列表小部件项的位置显示静态内容。如果要显示自定义动态内容或实现自定义编辑器小部件,请改用 QListView 和子类 QItemDelegate。

这无关紧要QGraphicsScene

解决方案:

如果要使文本可编辑。它比你自定义的要简单得多QItemDelegate

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

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

    ui->listWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
}

然后,当您创建和插入 时QListWidgetItem,请确保每个项目都是可编辑的。

※替换你的整个on_pushButton_clicked功能如下:

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

推荐阅读