Получение индекса строки QTableWidget, щелкнув вертикальный заголовок?

У меня есть QTableWidget, содержащий вывод различных математических функций. Пользователь должен иметь возможность щелкнуть номер рядом со строкой (вертикальный заголовок), а мне нужно получить индекс строки, по которой щелкнули. Я искал некоторое время, но я не могу найти именно то, что мне нужно. Я читал что-то об использовании сигнала verticalHeader() sectionDoubleClicked(), но не могу заставить это работать. Обычно я просто щелкал правой кнопкой мыши виджет в дизайнере и переходил к нужному слоту, но его там не было.

я пробовал

QObject::connect(ui->table->verticalHeader(),SIGNAL(sectionDoubleClicked(int)),this,SLOT(termSelect(int)));

где termSelect

void termSelect(int index)
{
    cout << "row selected: " << index;
}

но я получаю нет такой ошибки слота.

Я пытался сделать это в заголовочном файле

public Q_SLOTS:
    void cTermSelect(int);

но тогда я получаю ошибку связывания.

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


person user3128002    schedule 22.12.2013    source источник
comment
Вы забыли добавить макрос Q_OBJECT в определение класса?   -  person hank    schedule 23.12.2013


Ответы (1)


Обратите внимание, что сигнал sectionDoubleClicked срабатывает при двойном щелчке, а ваш вопрос касается одиночного щелчка. Вы также можете использовать сигнал sectionClicked, если хотите.

Объявление вашего слота cTermSelect, но вы ссылаетесь на него в используемом коде termSelect. Вероятно, это и есть причина проблемы. Остальной код в порядке.

Когда пользователь щелкает вертикальный заголовок, выбранная строка выбирается и становится текущей по умолчанию. Я надеюсь, что вы не хотите делать что-то удивительное при щелчке по заголовку, потому что это испортит пользовательский опыт. Так что выбора таблицы отслеживания должно быть достаточно. Вы можете использовать сигнал itemSelectionChanged или currentCellChanged QTableWidget для его обнаружения.

person Pavel Strakhov    schedule 23.12.2013