2012-10-08 92 views
0

我已经改变了我QTreeWidget以允许延长的选择:QTreeWidget扩展选择改变的信号

树_->的setSelectionMode(QAbstractItemView中:: ExtendedSelection);

存在selectionChanged信号未被发射的情况。这是当我直接用鼠标选择多个项目。如果我先点击一个项目,然后继续移动并选择一个范围,然后发出selectionChanged信号。

有没有人看到这个?

回答

0

您正在使用哪种操作系统/ Qt版本?我在一个操作系统上看到了类似这样的奇怪的错误,但它会在另一个上消失(尽管我还没有看到这个)。

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

MyWindow.h:

#include <QMainWindow> 
#include <QWidget> 

class MyWindow : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    MyWindow(QWidget * = 0, Qt::WindowFlags = 0); 

private slots: 
    void printSelectionChanged(); 

}; 

MyWindow.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; 
} 

也许你应该张贴您的代码(或其某种简化版本),如果你'以不同的方式做事。