7

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

5 に答える 5

17

ほこりっぽいはほぼ正しいです。ただし、itemSelectionChangedシグナルは、どのアイテムが選択されているかを通知しません。

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

選択したアイテムが表示されます。

したがって、スロットをitemSelectionChangedシグナルに接続し、ツリーウィジェットでselectedItems()を呼び出して、選択されたアイテムを取得します。

于 2008-12-02T19:44:46.293 に答える
4

itemClicked()シグナルを使用すると、キーボードを使用して行われた選択の変更が失われます。あなたの場合、それは悪いことだと思います。

于 2008-12-05T15:55:22.103 に答える
3

これを簡単に使用できます:

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

変数 word でテキストを取得します。

于 2015-04-06T14:57:28.427 に答える
1

ここのドキュメントによると、 QTreeWidget itemSelectionChanged()シグナルをクラスのスロットに接続する必要があるようです。これにより、どのQTreeWidgetItemが選択されたかがわかります。これは、私が望むものです。

于 2008-12-02T19:37:43.123 に答える
0

おっと、これを使って簡単に解決しました:

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

しかし、返信ありがとうございます:D

于 2008-12-02T19:56:40.637 に答える