简体   繁体   English

QTreeWidget扩展选择更改信号

[英]QTreeWidget Extended Selection Changed Signal

I have changed my QTreeWidget to allow extended selection: 我更改了QTreeWidget以允许扩展选择:

tree_->setSelectionMode(QAbstractItemView::ExtendedSelection); tree _-> setSelectionMode(QAbstractItemView :: ExtendedSelection);

There is a case in which the selectionChanged signal is not emitted. 在某些情况下,不会发出selectionChanged信号。 This is when I directly select multiple items with the mouse. 这是我直接用鼠标选择多个项目的时候。 If I first click on an item and then keep shift and select a range, then the selectionChanged signal is emitted. 如果我先单击一个项目,然后保持平移并选择一个范围,则会发出selectionChanged信号。

Has anybody seen this? 有人看过吗?

Which operating system/Qt version are you using? 您正在使用哪个操作系统/ Qt版本? I've seen strange bugs like this on one OS that will disappear on another (I haven't seen this one, though). 我曾经在一个操作系统上看到过这样的奇怪错误,而这些错误会在另一个操作系统上消失(不过,我还没有看到过)。

I'm using Qt 4.8.2 under Linux, and I don't think I'm seeing this behaviour. 我在Linux下使用Qt 4.8.2,但我认为我没有看到这种行为。 Here's the code I've got: 这是我得到的代码:

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

Maybe you should post your code (or some simplified version thereof), if you're doing something differently. 如果您做不同的事情,也许您应该发布代码(或其简化版本)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM