0

QTreeWidget を変更して、選択範囲を拡張できるようにしました。

tree_->setSelectionMode(QAbstractItemView::ExtendedSelection);

selectionChanged シグナルが発行されない場合があります。これは、マウスで複数のアイテムを直接選択したときです。最初にアイテムをクリックし、Shift キーを押しながら範囲を選択すると、selectionChanged シグナルが発行されます。

誰もこれを見たことがありますか?

4

1 に答える 1

0

使用しているオペレーティング システム/Qt のバージョンを教えてください。ある OS でこのような奇妙なバグが発生し、別の OS では消えてしまうのを見たことがあります (ただし、これは見たことがありません)。

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

別のことをしている場合は、コード (またはその単純化されたバージョン) を投稿する必要があるかもしれません。

于 2012-10-09T22:04:14.597 に答える