Qt, сбой, когда кнопка QStackedWidget пытается получить доступ к метке другого QStackedWidget

Main создает два QStackedWidget, класс Body и класс Bottom.
В классе Body есть кнопка, и при ее нажатии она должна изменить текст в метке снизу. Сбой программы, когда кнопка Body-> пытается использовать открытую функцию Bottom, которая изменяет частную метку.

main.cpp

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

//GRAPHIC INTERFACE
QStackedWidget *stackedWidget_body = new QStackedWidget;
QStackedWidget *stackedWidget_bottom = new QStackedWidget;

//create classe
Body    * wBody ;
Bottom  *wBottom;
wBody = new Body(wBottom); //pass the reference of the Bottom class, wBottom
wBottom = new Bottom();
//wBottom->setLLabel();  //this command will change the name of the label, it means that setLLabel works well

//insert the body widget
stackedWidget_body->addWidget(wBody);
//insert the bottom widget
stackedWidget_bottom->addWidget(wBottom);

//layout
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedWidget_body);
layout->addWidget(stackedWidget_bottom);

//WINDOW
QWidget window;
window.setLayout(layout);
window.show();

a.exec();
return 0 ;
}

Body.h

namespace Ui {
class Body;
}

class Body : public QWidget
{
Q_OBJECT

public:
explicit Body(Bottom  *_wBottom, QWidget *parent = 0);
~Body();

public slots:
void test();   // it will be called then the button will be pressed

private:
Ui::Body *ui;
Bottom  *wBottom;
void testSend(Bottom  *wBottom);
};

Body.cpp

Body::Body(Bottom  *_wBottom, QWidget *parent) :
wBottom(_wBottom),
QWidget(parent),
ui(new Ui::Body)
{
QPushButton *button_standard2 = new QPushButton("test");
connect(button_standard2, SIGNAL(clicked(bool)),this, SLOT(test()));
//layout
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(button_standard2);
this->setLayout(layout);
ui->setupUi(this);
}

Body::~Body()
{delete ui;}

void Body::test(){
testSend(wBottom);
}

void Body::testSend(Bottom  *wBottomX)
{
wBottomX->setLLabel();
}

bottom.h

namespace Ui {
class Bottom;
}

class Bottom : public QWidget
{
Q_OBJECT

public:
explicit Bottom(QWidget *parent = 0);
~Bottom();
void setLLabel();

private:
Ui::Bottom *ui;
QLabel *bLabel;
};

bottom.cpp

Bottom::Bottom(QWidget *parent) :
QWidget(parent),
ui(new Ui::Bottom)
{
bLabel = new QLabel("Name");

//layout
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(bLabel);
//setLLabel();  //this functions does it work
this->setLayout(layout);
ui->setupUi(this);
}

Bottom::~Bottom()
{delete ui;}

void Bottom::setLLabel(){
std::cout<<"change";
Bottom::bLabel->setText("value");  //The problem is here, when the function is called from Body::testSend
}

Можете ли вы дать мне какой-нибудь совет?

-1

Решение

//create classe
Body    * wBody ;
Bottom  *wBottom;
wBody = new Body(wBottom); //pass the reference of the Bottom class, wBottom
wBottom = new Bottom();

Вы отправляете недействительный wBottom экземпляр для wBody, Попробуйте поменять последние две строки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]