QListWidget внутри QGraphicsScene не прокручивает текстовые элементы - PullRequest
0 голосов
/ 15 мая 2018

У меня есть QListWidget внутри QGraphicsScene. Я добавляю новые предметы с QLineEdit внутри. Когда заливка QListWidget активна и полосы прокрутки активны, текст не прокручивается, а текущее представление элемента.

enter image description here

Полный код Git: Код

EDIT:

Я включил QCheckBox в горизонтальный макет, чтобы показать, зачем мне нужна функция setItemWidget.

1 Ответ

0 голосов
/ 16 мая 2018

Ответ:

Текст не прокручивается, поскольку 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);
}
...