2012-02-23 8 views
1
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); 
      } 
     } 
}; 

ここで問題となるのは、テキストをダブルクリックするだけで編集できることです。シングルクリックまたはそれ以外のものは動作しません。私はダブルクリックからシングルクリックにその信号を変えようとしましたが、助けにはなりませんでした。QListWidgetのテキストを実行時に1回クリックするだけで編集するには?

ご参考までに - いつもダブルクリックすると痛みがあります。

答えて

2

QAbstractItemView::CurrentChangedをリストウィジェットの編集トリガーとして使用できます。つまり、アイテムをクリックすると編集可能になります。これは、クリックするだけでなく、例えば矢印キーで項目を切り替える場合もあります。残念ながら、「シングルクリックで編集」またはそのような何かのためのフラグがありません...

setEditTriggers(QAbstractItemView::CurrentChanged); 

Overview of all triggers

+0

リンクは私が知っているさせるための –

+0

おかげで死んでいます。当時のドキュメントはノキアが主催していました。リンクが再び機能しています。 – Exa

関連する問題