我如何在多个QListViews上只获得一个选择

How do I get only one selection on multiple QListViews?

本文关键字:选择 一个 QListViews      更新时间:2023-10-16

我有以下程序:

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

mainwindow.cpp:

#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()));
}

main.cpp:

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    MainWindow w;
    w.exec();
    return a.exec();
}

a.pro

TEMPLATE = app
TARGET = a
INCLUDEPATH += .
QT += widgets
CONFIG += c++11
HEADERS += mainwindow.h
SOURCES += main.cpp mainwindow.cpp

这是我试图创建一个具有多个不同模型的QListViewsQDialog,其中只能同时选择一个项目。它的工作,如果你只是点击不同的项目,但一旦你点击QListView在一个空白的空间,然后点击项目,多个条目被选中。选择然后被清除,如果我要么点击另一个QListView在一个空白的空间,或最小化对话框,并再次激活它。

我错过了什么?我必须连接其他slots/signals吗?

使用clearSelection代替reset似乎可以达到目的

同时,根据文档[1],[2],它似乎是更合适的函数。