Сигналы не обнаруживаются для QTabWidget - PullRequest
3 голосов
/ 02 апреля 2012

Моя реализация QTabWidget не обнаруживает его tabCloseRequested() и currentChanged() сигналов.

TileSheetManager::TileSheetManager(QWidget *parent)
: QTabWidget(parent)
{
    int w = WIDTH;
    int h = HEIGHT;

    this->setMinimumSize(w, h);
    this->setMaximumSize(w, h);

    setTabsClosable(true);
    setTabShape(QTabWidget::Rounded);

    connect(this, SIGNAL(tabCloseRequested(int index)), this, SLOT(closeTileWidget(int index)));
    connect(this, SIGNAL(currentChanged(int index)), this, SLOT(tabChanged(int index)));
}

qDebug() не работал для меня, поэтому я использую QMessageBox для этого.

void TileSheetManager::closeTileWidget(int index)
{
   QMessageBox msgBox;
   msgBox.setText("Tab " + QString::number(index) + " removed!");
   msgBox.exec();

   TileWidget *t = (TileWidget *) widget(index) ;
   t->deleteLater();
   removeTab(index);
}

void TileSheetManager::tabChanged(int index)
{   
    QMessageBox msgBox;
    msgBox.setText("Tab was Changed!");
    msgBox.exec();

    TileWidget *t;

    for(int i = 0; i < count(); i++)
    {
        t = (TileWidget *) widget(i) ;
        t->resetSetBrush();
    }
} 

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

1 Ответ

7 голосов
/ 02 апреля 2012

Не использовать имена переменных в функции connect:

Обратите внимание, что параметры сигнала и слотов не должны содержать любые имена переменных, только тип.

Соединение должно быть

connect(this, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTileWidget(int)));
connect(this, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int)));
...