я получил следующую программу:Как получить только один выбор на нескольких QListViews?
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
Это была моя попытка создать QDialog
, который имеет несколько QListViews
с различными моделями, в которых только один элемент может быть выбран одновременно. Он работает, если вы просто нажимаете на разные элементы, но как только вы нажимаете QListView
в пустом пространстве, а затем щелкните элемент, вы выбираете несколько записей. Выбор затем очищается только в том случае, если я либо нажимаю другой QListView
в пустом пространстве, либо сворачиваю диалог и снова активирую его.
Что мне не хватает? Нужно ли подключать другие slots
/signals
?
Ой, я просто не использовал его, потому что он испускает сигнал selectionChanged, который я пропустил где-то еще в моем проекте. Большое спасибо ;-) –
Только одна вещь, которую я заметил: мне, вероятно, придется использовать что-то другое, чем currentChanged, так как по-прежнему можно выбрать несколько записей. Сигнал щелчка QListView должен делать трюк. –
http://doc.qt.io/qt-5/qabstractitemview.html#selectionMode-prop имеет один режим выбора. Возможно, это работает. Я бы предположил, что это можно сделать, если не сделать это вручную (внутри одного 'QListView' я имею в виду, а не через несколько) –