【问题标题】:QTreeWidget Extended Selection Changed SignalQTreeWidget 扩展选择改变信号
【发布时间】:2012-10-08 20:11:39
【问题描述】:

我已更改我的 QTreeWidget 以允许扩展选择:

tree_->setSelectionMode(QAbstractItemView::ExtendedSelection);

存在未发出 selectionChanged 信号的情况。这是我直接用鼠标选择多个项目的时候。如果我首先单击一个项目,然后保持 shift 并选择一个范围,则会发出 selectionChanged 信号。

有人看过吗?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    您使用的是哪个操作系统/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;
    }
    

    如果您采取不同的做法,也许您应该发布您的代码(或一些简化版本)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2018-06-24
      • 2016-09-01
      相关资源
      最近更新 更多