我已更改 QTreeWidget 以允许扩展选择:
树_->setSelectionMode(QAbstractItemView::ExtendedSelection);
存在未发出 selectionChanged 信号的情况。这是我直接用鼠标选择多个项目的时候。如果我首先单击一个项目,然后保持 shift 并选择一个范围,则会发出 selectionChanged 信号。
有人见过这个吗?
您使用的是哪个操作系统/Qt 版本?我在一个操作系统上看到过这样的奇怪错误,这些错误会在另一个操作系统上消失(不过我还没有看到这个)。
我在 Linux 下使用 Qt 4.8.2,但我认为我没有看到这种行为。这是我得到的代码:
我的窗口.h:
#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;
}
如果您正在做不同的事情,也许您应该发布您的代码(或其一些简化版本)。