Имеется кастомный виджет. Вот его код:
int RInstruments::toggle(){
std::cout<<"toggle"<<std::endl;
if (hide->text()=="^") hide->setText("v");
else hide->setText("^");
main->hide();
return 0;
}
RInstruments::RInstruments(QWidget* parent, bool visible): QWidget(parent){
this->instruments_visible = visible;
QLabel* filters_l = new QLabel(this);
filters_l->setText("Фильтры");
filters_l->setStyleSheet("font-size:20px;");
hide = new QPushButton(this);
hide->setText("^");
connect(hide, SIGNAL(released()), this, SLOT(toggle()));
main = new RInstrumentsMain(parent);
}
Заголовок:
class RInstruments : public QWidget{
Q_OBJECT
public:
RInstruments(QWidget *parent = 0, bool visible = true);
public slots:
int toggle();
protected:
RInstrumentsMain* main;
QPushButton* hide;
bool instruments_visible;
};
Вместо connect(hide, SIGNAL(released()), this, SLOT(toggle())) пробовал современный синтаксис
connect(hide, &QPushButton::released, this,&RInstruments::toggle)
UPD: экспериментально выяснил, что если убрать строку main = new RInstrumentsMain(parent), то обработчик работает, но не показывается виджет RInstrumentsMain.