QTableView - не получен выбор изменен сигнал - PullRequest
4 голосов
/ 21 декабря 2011

Я довольно новичок в QT и не могу понять, как обрабатывается сигнал изменения выбора QTableView.Я настроил окно с виджетом openGL и QTableView.У меня есть класс модели данных, который правильно заполняет табличное представление, поэтому я добавил в этот класс открытый слот:

class APartsTableModel : public QAbstractTableModel
{
public:
    AVehicleModel *vehicle;
    explicit APartsTableModel(QObject *parent = 0);

    //MVC functions
    int rowCount(const QModelIndex &parent) const;
    int columnCount(const QModelIndex &paret) const;
    QVariant data(const QModelIndex &index, int role) const;
    QVariant headerData(int section, Qt::Orientation orientation, int role) const;

public slots:
    void selectionChangedSlot(const QItemSelection &newSelection,
                              const QItemSelection &oldSelection);

};

Когда я готов показать окно с табличным представлением, я выделяю / инициализирую егокак это:

//create the display view
AStarModelView *displayWindow = new AStarModelView(this,
                                                   starModel->vehicle);

//create the datamodel for the table view
APartsTableModel *dataModel = new APartsTableModel(displayWindow);
dataModel->vehicle = starModel->vehicle;

//create selection model for table view
QItemSelectionModel *selModel = new QItemSelectionModel(dataModel);
displayWindow->materialsTable->setSelectionModel(selModel);

//setup model and signal
displayWindow->materialsTable->setModel(dataModel);

connect(selModel,
        SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
        dataModel,
        SLOT(selectionChangedSlot(const QItemSelection &, const QItemSelection &)));

//show the view
displayWindow->show();

Когда я устанавливаю точку останова в реализации функции слота, я никогда не достигаю ее.Я также пытался не выделять новый QItemSelectionModel, но это тоже не сработало.Я действительно не уверен, что я делаю здесь не так.

Ответы [ 4 ]

3 голосов
/ 21 декабря 2011

Когда вы вызываете setModel () для представления, ваш локально выделенный QItemSelectionModel заменяется на созданный представлением.В любом случае вам не нужно создавать собственную модель выбора.Просто измените ваше подключение на

connect(displayWindow->materialsTable->selectionModel(),
        SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
        dataModel,
        SLOT(selectionChangedSlot(const QItemSelection&, const QItemSelection&)));
0 голосов
/ 26 декабря 2017

virtual Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex &index) const должен вернуть Qt::ItemIsSelectable | otherFlags

0 голосов
/ 23 декабря 2011

Какую первую вещь вы должны проверить в QT, когда кажется, что сигналы / слоты работают неправильно?Что в вашем классе есть макрос Q_OBJECT.Добавил это в определение класса APartsTable, и теперь я бью точку останова.

Когда наступит пятница?

0 голосов
/ 22 декабря 2011

Просто чтобы вытащить ответ из обсуждения:

Что в первую очередь следует проверять в QT, когда сигналы / слоты этого не делают кажется, работает правильно? Что у вашего класса есть макрос Q_OBJECT в этом. Добавил это в определение класса APartsTable, и теперь я попадание в точку останова

.

...