2009-06-30 13 views
1

私は私のQtフォームにtreewidgetを持っています。ファイルのツリーが表示され、そのアイコンと名前が表示されます。アイコンQt QTreeWidgetをクリックしてください

treeItem->setIcon(0, *icon)treeItem->setText(0, text)を入力しました。

同じ列(0)に両方の値を入力した理由は、アイコンがテキストの横にあるのではなく、テキストが右にインデントされていても別の商品の子供)。

問題は、ユーザーがアイコンまたはテキスト自体をクリックしたかどうかを知ることができず、これらを個別に処理する必要があるということです。

treewidgetのオブジェクトがクリックされたときにtreeitemとcolumn以外の情報を取得するにはどうしてもかまいませんか、それとも別の列に置いても正常な動作アイコンとテキスト持ってる?

ありがとうございました。

答えて

1

clicked()またはitemClicked()シグナルを単に使用しているのであれば、より多くの情報を得る方法はないと思います。おそらく、QTreeWidgetを継承するカスタムクラスを作成し、仮想マウスイベント関数の1つを再実装する必要があります。

mouseMoveEvent (QMouseEvent *) 
mousePressEvent (QMouseEvent *) 
mouseReleaseEvent (QMouseEvent *) 

実際にあなたが何をしているのか分からない限り、これは私がお勧めするものではありません。

しかし、リストウィジェットをどこでも見ることができません。アイコンをクリックすると、同じ列のテキストをクリックするのとは異なる方法で処理されます。したがって、 "通常の動作アイコンとテキストが持つべきもの"を探しているなら、恐らく別の解決策を探すべきでしょう。

0

私はこの問題のために、次の解決策を見つけた:

void MyTreeWidget::mousePressEvent(QMouseEvent* aEvent) 
{ 
    QTreeWidget::mousePressEvent(aEvent); 

    const QPoint clickedPosition = aEvent->pos(); 
    const QRect itemRectangle  = visualItemRect(itemAt(clickedPosition)); 
    const int iconOffset   = itemRectangle.height() - iconSize().height(); 

    QRect iconRectangle; 
    iconRectangle.setTopLeft(itemRectangle.topLeft() + QPoint(iconOffset, iconOffset)); 
    iconRectangle.setWidth(iconSize().width()); 
    iconRectangle.setHeight(iconSize().height()); 

    if (iconRectangle.contains(clickedPosition)) 
    { 
     qDebug() << "ICON clicked"; 
     // Emit an icon clicked SIGNAL. 
    } 
} 
関連する問題