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
}
Можете ли вы дать мне какой-нибудь совет?
//create classe
Body * wBody ;
Bottom *wBottom;
wBody = new Body(wBottom); //pass the reference of the Bottom class, wBottom
wBottom = new Bottom();
Вы отправляете недействительный wBottom
экземпляр для wBody
, Попробуйте поменять последние две строки.
Других решений пока нет …