C++ 如何在多个QListView上仅获取一个选择?

C++ 如何在多个QListView上仅获取一个选择?,c++,qt,C++,Qt,我有以下程序: main window.h: #include <QDialog> #include <QListView> #include <QStandardItemModel> #include <QStandardItem> #include <QVBoxLayout> class MainWindow : public QDialog { Q_OBJECT public: explicit MainWindow(QWid

我有以下程序:

main window.h:

#include <QDialog>
#include <QListView>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QVBoxLayout>

class MainWindow : public QDialog {
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);

private:
QVBoxLayout layout;

QListView view1, view2, view3;

QStandardItemModel model1, model2, model3;

QStandardItem item1, item2, item3, item4, item5, item6;
};
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QDialog(parent),
    item1 {"Item 1"},
    item2 {"Item 2"},
    item3 {"Item 3"},
    item4 {"Item 4"},
    item5 {"Item 5"},
    item6 {"Item 6"}
{
    model1.appendColumn({&item1, &item2});
    model2.appendColumn({&item3, &item4});
    model3.appendColumn({&item5, &item6});

    view1.setModel(&model1);
    view2.setModel(&model2);
    view3.setModel(&model3);

    layout.addWidget(&view1);
    layout.addWidget(&view2);
    layout.addWidget(&view3);

    this->setLayout(&layout);

    connect(view1.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view2.selectionModel(), SLOT(reset()));
    connect(view1.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view3.selectionModel(), SLOT(reset()));

    connect(view2.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view1.selectionModel(), SLOT(reset()));
    connect(view2.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view3.selectionModel(), SLOT(reset()));

    connect(view3.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view2.selectionModel(), SLOT(reset()));
    connect(view3.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view1.selectionModel(), SLOT(reset()));
}
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    MainWindow w;
    w.exec();

    return a.exec();
}
main.cpp:

#include <QDialog>
#include <QListView>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QVBoxLayout>

class MainWindow : public QDialog {
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);

private:
QVBoxLayout layout;

QListView view1, view2, view3;

QStandardItemModel model1, model2, model3;

QStandardItem item1, item2, item3, item4, item5, item6;
};
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QDialog(parent),
    item1 {"Item 1"},
    item2 {"Item 2"},
    item3 {"Item 3"},
    item4 {"Item 4"},
    item5 {"Item 5"},
    item6 {"Item 6"}
{
    model1.appendColumn({&item1, &item2});
    model2.appendColumn({&item3, &item4});
    model3.appendColumn({&item5, &item6});

    view1.setModel(&model1);
    view2.setModel(&model2);
    view3.setModel(&model3);

    layout.addWidget(&view1);
    layout.addWidget(&view2);
    layout.addWidget(&view3);

    this->setLayout(&layout);

    connect(view1.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view2.selectionModel(), SLOT(reset()));
    connect(view1.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view3.selectionModel(), SLOT(reset()));

    connect(view2.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view1.selectionModel(), SLOT(reset()));
    connect(view2.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view3.selectionModel(), SLOT(reset()));

    connect(view3.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view2.selectionModel(), SLOT(reset()));
    connect(view3.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            view1.selectionModel(), SLOT(reset()));
}
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    MainWindow w;
    w.exec();

    return a.exec();
}
这是我试图创建一个
QDialog
,它有多个
qlistview
,具有不同的模型,其中只能同时选择一个项目。如果您只需单击不同的项目,它就可以工作,但一旦您在空白处单击
QListView
,然后单击该项目,就会选择多个条目。只有在空白处单击另一个
QListView
或最小化对话框并再次激活它时,才会清除该选择


我错过了什么?我是否必须连接其他
插槽
/
信号

使用
清除选择
而不是
重置
似乎可以做到这一点


此外,根据文档,它似乎是更适合此功能的功能。

哎哟,我只是没有使用它,因为它会发出selectionChanged信号,而我在项目中的其他地方没有使用它。非常感谢;-)我注意到一件事:我可能不得不使用currentChanged以外的其他工具,因为仍然可以选择多个条目。QListView的单击信号应该可以实现这一点。具有单一选择模式。也许这样行得通。我假设有一种方法可以做到这一点,而无需手动操作(在一个
QListView
中,我的意思是,不跨越多个),我认为单一选择模式是默认模式,因为我只能在QListView中选择一个元素。如果不手动连接信号/插槽,显然无法轻松实现此问题。至少在两个小时的搜索中,我没有在网上找到任何东西。