QTreeWidget 扩展选择更改信号

QTreeWidget Extended Selection Changed Signal

本文关键字:信号 选择 扩展 QTreeWidget      更新时间:2023-10-16

我已经更改了我的QTreeWidget以允许扩展选择:

tree_->setSelectionMode(QAbstractItemView::ExtendedSelection);

在某些情况下,不会发出选择更改的信号。这是我用鼠标直接选择多个项目的时候。如果我先单击一个项目,然后按住 shift 并选择一个范围,则会发出 选择更改 信号。

有人看过吗?

您使用的是哪个操作系统/Qt版本?我在一个操作系统上看到了这样的奇怪错误,这些错误会在另一个操作系统上消失(不过我还没有看到这个)。

我在Linux下使用Qt 4.8.2,我认为我没有看到这种行为。 这是我得到的代码:

我的窗口:

#include <QMainWindow>
#include <QWidget>
class MyWindow : public QMainWindow
{
  Q_OBJECT
public:
  MyWindow(QWidget * = 0, Qt::WindowFlags = 0 );
private slots:
  void printSelectionChanged();
};

我的窗口.cpp:

#include "MyWindow.h"
#include <QAbstractItemView>
#include <QList>
#include <QString>
#include <QStringList>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <iostream>
using namespace std;
MyWindow::MyWindow(QWidget *parent, Qt::WindowFlags flags)
 : QMainWindow(parent, flags)
{
  QTreeWidget *treeWidget = new QTreeWidget(this);
  treeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
  treeWidget->setColumnCount(1);
  QList<QTreeWidgetItem *> items;
  for (int i = 0; i < 10; ++i)
    items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
  treeWidget->insertTopLevelItems(0, items);
  connect(treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(printSelectionChanged()));
  setCentralWidget(treeWidget);
}
void MyWindow::printSelectionChanged()
{
  cout << "selection has changed." << endl;
}

也许你应该发布你的代码(或一些简化版本),如果你正在做一些不同的事情。