Как редактировать текст в QListWidget во время выполнения одним щелчком мыши по ним? - PullRequest
1 голос
/ 23 февраля 2012
class genericTaskList : public QListWidget
{
    Q_OBJECT  
    public:
        unsigned int rowCounter;

        genericTaskList (QWidget *parentWidget)
        {
            setParent      (parentWidget);
            setFixedSize (445, 445);

            QListWidgetItem *defaultText = new QListWidgetItem ("Double click here to compose the new task.");
            defaultText->setFlags (defaultText->flags () | Qt :: ItemIsEditable);

            rowCounter = 0;
            insertItem (rowCounter, defaultText);

            QObject :: connect (this, SIGNAL (itemDoubleClicked (QListWidgetItem*)), this, SLOT (addDefaultText (QListWidgetItem*)));
            QObject :: connect (this, SIGNAL (itemChanged (QListWidgetItem*)), this, SLOT (addDefaultText (QListWidgetItem*)));
        }

    public slots:
        void addDefaultText (QListWidgetItem*f)
        {
            // Returns the current row number.
            unsigned int currentRow            = row (f);
            // Returns the current row text.
            QString          textOfCurrentRow = f->text ();

            // The new default row should get inserted if and only if, the last row created has been double clicked and its default text has been changed.
            if ((currentRow == rowCounter) 
                && (textOfCurrentRow.toStdString () != "Double click here to compose the new task.") 
                && (textOfCurrentRow.toStdString () != ""))
            {
                ++rowCounter;

                QListWidgetItem *defaultText = new QListWidgetItem ("Double click here to compose the new task.");
                defaultText->setFlags (defaultText->flags () | Qt :: ItemIsEditable);

                insertItem        (rowCounter, defaultText);
                setCurrentRow (rowCounter);
            }
            else if (textOfCurrentRow.toStdString () == "")
            {
                takeItem           (rowCounter);

                QListWidgetItem *defaultText = new QListWidgetItem ("Double click here to compose the new task.");
                defaultText->setFlags (defaultText->flags () | Qt :: ItemIsEditable);
                insertItem        (rowCounter, defaultText);
                setCurrentRow (rowCounter);
            }
        }
};

Проблема здесь в том, что я могу редактировать текст, если и только если я дважды щелкну текст.Один щелчок или что-то еще не работает.Я попытался изменить этот сигнал с двойного щелчка на одиночный щелчок, но это не помогло.

Пожалуйста, руководство.

1 Ответ

3 голосов
/ 23 февраля 2012

Вы можете использовать QAbstractItemView::CurrentChanged в качестве триггера редактирования для вашего виджета списка.Это означает, что если вы щелкните элемент, он будет редактируемым.Это касается не только нажатия на него, но и переключения, например, с помощью клавиш со стрелками.К сожалению, нет флага для «редактирования одним щелчком» или чего-то в этом роде ...

setEditTriggers( QAbstractItemView::CurrentChanged );

Обзор всех триггеров

...