Проблемы с пониманием и обработкой сигналов QHeaderView

#qt #qheaderview

#qt #qheaderview

Вопрос:

В настоящее время я работаю над базовой таблицей QtGui, которая будет использоваться для различных приложений. Одна из функций, которую я хочу, — это иметь возможность дважды щелкнуть по заголовку столбца и вызвать функцию сортировки. Я просматривал документацию и различные публикации в Интернете, но я не совсем уловил общую идею. Я понимаю, что мне нужно подключить сигнал с двойным выделением к моему слоту handleDoubleClick, но на самом деле это не работает.

Многие примеры относятся к созданию собственного пользовательского класса и настройке сигналов для этого класса, но нужно ли мне это делать, когда в QHeaderView уже есть встроенные сигналы? Нет ли способа подключить встроенные сигналы к моему слоту?

Вот, в основном, что у меня есть.

 QHeaderView *headerView = mainTable->horizontalHeader();
headerView->setMovable(true);
headerView->setClickable(true);

QObject::connect(headerView, SIGNAL(sectionDoubleClicked()), headerView, SLOT(sortByHeader()));

void sortByHeader()
{
    cout << "Double clicked";
}
  

Решаемая:
Метод Абхиджита сработал, но оказалось, что мне также нужно было передать тип параметра. Итак, это была синтаксическая ошибка.

Итак, это что-то вроде этого

 Class1* myclass = new Class1();
QObject::connect(headerView, SIGNAL(sectionDoubleClicked(int)), myclass, SLOT(sortByHeader(int)));
  

Ответ №1:

 QObject::connect(headerView, SIGNAL(sectionDoubleClicked()), headerView, SLOT(sortByHeader()));
  

Вы просите метод connect подключить doubleclickedsignal к слоту с именем sortByHeader , принадлежащему классу QHeaderView. следовательно, он не вызывает ваш слот. Если вы определили sortByHeader() слот в своем собственном классе с именем Class1 , то вам следует сделать это,

 Class1* myclass = new Class1();
QObject::connect(headerView, SIGNAL(sectionDoubleClicked()), myclass, SLOT(sortByHeader()));
  

Комментарии:

1. Ах. Оказывается, мне также нужно было передать тип параметра QObject::connect(headerView, SIGNAL(sectionDoubleClicked(int)), myclass, SLOT(sortByHeader(int)));

2. На самом деле ключ в том, чтобы скопировать и вставить его из ссылки 🙂