QGraphicsScene里面的QListWidget没有滚动文本项

时间:2018-05-15 08:38:51

标签: qt qgraphicsscene qlistwidget

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

enter image description here

完整代码Git:code

编辑:

我在水平布局中包含了QCheckBox,以显示我需要setItemWidget函数的原因。

1 个答案:

答案 0 :(得分:1)

<强>答案:

文字无法滚动,因为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);
}

然后当你创建&amp;插入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);
}