Я вложил в подкласс QTabWidget и добавил новый публичный слот. Когда я пытаюсь подключиться к этому слоту, Qt говорит мне, что моего слота не существует. Но, похоже, смотрит в родительский класс. Чего мне не хватает?
Вот минимальная программа, которая воспроизводит проблему. Я запускаю его в Qt 5.13 с 32-битным пакетом MinGW.
#include <QMainWindow>
#include <QApplication>
#include <QTabWidget>
#include <QTabBar>
#include <QDebug>
class MyTabWidget : public QTabWidget
{
public:
MyTabWidget(QWidget *parent) : QTabWidget(parent)
{
qDebug() << "connect() returns " <<
connect(this->tabBar(),SIGNAL(tabBarDoubleClicked(int)),this,SLOT(changeTabName(int)));
}
public slots:
void changeTabName(int index)
{
tabBar()->setTabText(index,"New Name");
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow *mw = new QMainWindow();
QWidget *tw;
MyTabWidget *t = new MyTabWidget(mw);
tw = new QWidget(mw);
t->addTab(tw,"Double-click This Tab");
mw->setCentralWidget(t);
mw->show();
return a.exec();
}
Вот вывод. Когда вызывается connect (), это указатель на подкласс, верно? Так зачем искать слот в суперклассе?
QObject::connect: No such slot QTabWidget::changeTabName(int) in main.cpp:14
QObject::connect: (sender name: 'qt_tabwidget_tabbar')
connect() returns false