4

ユーザーがQTreeViewの展開矢印をクリックしたときに、展開操作がいつ開始されるかを正確に知る方法はありますか?

彼がダブルクリックした場合、ダブルクリックイベントをキャッチできます。

QTreeViewからこのスロットを再実装しようとvoid expand(const QModelIndex &index);しましたが、機能しないようです。

void expanded(const QModelIndex &index);QTreeViewで呼び出されたシグナルがありますが、拡張が発生した後に送信されたようです。

QT4.8.2を使用しています

4

2 に答える 2

12

これは私が必要な機能を得るために私がしたことです:

このようにQTreeViewからmousePressEventを再実装しました

void MyTreeView::mousePressEvent(QMouseEvent *event)
{
    QModelIndex clickedIndex = indexAt(event->pos());
    if(clickedIndex.isValid())
    {
        QRect vrect = visualRect(clickedIndex);
        int itemIdentation = vrect.x() - visualRect(rootIndex()).x();
        if(event->pos().x() < itemIdentation)
        {
            if(!isExpanded(clickedIndex))
            {
             //do stuff
            }
        }
    }
}

マウスの押下がアイテムのテキストラベル(展開矢印上を意味する)に残っているかどうかを確認します

これをダブルクリックイベントと組み合わせると、必要なものが得られます。

于 2012-10-30T15:40:27.760 に答える
0

変更イベントのメソッドを実装することで、これを試すことができます。

  void YourTreeView::changeEvent(QEvent *e)
  {
    QFrame::changeEvent(e);

    switch (e->type()) {
    case QEvent::QGraphicsSceneResizeEvent
        //do want you want to do
        break;
    default:
        break;
    }
  }
于 2012-10-29T15:35:20.907 に答える