2012-10-08 94 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; 
} 

也許你應該張貼您的代碼(或其某種簡化版本),如果你'以不同的方式做事。