2008-12-02 52 views
4

我有一個繼承QTreeWidget的類。我怎樣才能找到當前選擇的行? 通常我信號連接到插槽這樣:如何在QTreeWidget中找到所選項目?

connect(myButton, SIGNAL(triggered(bool)), this, SLOT(myClick())); 

但是,我找不到QTreeWidget->QTreeWidgetItem類似的事情。 我發現的唯一辦法是重新定義這樣的QTreeWidget類的mousePressEvent:

void MyQTreeWidget::mousePressEvent(QMouseEvent *e){ 
    QTreeView::mousePressEvent(e); 
    const QModelIndex index = indexAt(e->pos()); 
    if (!index.isValid()) 
    { 
    const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); 
    if (!(modifiers & Qt::ShiftModifier) && !(modifiers & Qt::ControlModifier)) 
    clearSelection(); 
    } 
} 

我沒有嘗試它。是唯一的解決方案還是有更簡單的方法?

回答

4

使用itemClicked()信號就會錯過任何選擇更改使用鍵盤製造。我認爲你的情況是件壞事。

+0

它很完美,我只需要點擊QTreeWidget :) – Giancarlo 2008-12-08 22:51:36

1

根據文檔here看來,你應該在QTreeWidgetitemSelectionChanged()信號連接到你的類的插槽。這將告訴你哪個QTreeWidgetItem被選中,這是我相信你想要的。

10

Dusty幾乎是正確的。但itemSelectionChanged信號不會告訴你哪個項目被選中。

QList<QTreeWidgetItem *> QTreeWidget::selectedItems() const 

會給你選擇的項目。

因此,將一個插槽連接到itemSelectionChanged信號,然後調用樹窗口小部件上的selectedItems()來獲取選定的項目。

+0

是的,你是對的。它甚至在我鏈接的文檔中這樣說。很好的接收。 – 2008-12-04 17:41:37

0

哎呀,我已經解決了單純用這樣的:

connect(this,SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(mySlot())); 

但是感謝回覆:d

2

你可以簡單地使用:

QString word = treeWidget->currentItem()->text(treeWidget->currentColumn()); 

得到可變字文本。

相關問題