1.首先在mainwindow.h中
添加class QLabel;
添加QLabel声明
private:
QLabel *communicationinfo;
QLabel *operationinfo;
QLabel *tempinfo;
2.在mainwindow.C中添加
#include <QLabel>
statusinit函数,实现如下
void MainWindow::statusbarinit()
{
QLabel *tempinfo =new QLabel;
QLabel *communicationinfo=new QLabel;
QLabel *operationinfo=new QLabel;
tempinfo->setMinimumSize(150, 30); // 设置标签最小大小
tempinfo->setFrameShape(QFrame::Panel); // 设置标签形状
tempinfo->setFrameShadow(QFrame::Sunken); // 设置标签阴影
tempinfo->setTextFormat(Qt::PlainText);
communicationinfo->setMinimumSize(150, 30); // 设置标签最小大小
communicationinfo->setFrameShape(QFrame::Panel); // 设置标签形状
communicationinfo->setFrameShadow(QFrame::Sunken); // 设置标签阴影
communicationinfo->setTextFormat(Qt::PlainText);
operationinfo->setMinimumSize(150, 30); // 设置标签最小大小
operationinfo->setFrameShape(QFrame::Panel); // 设置标签形状
operationinfo->setFrameShadow(QFrame::Sunken); // 设置标签阴影
operationinfo->setTextFormat(Qt::PlainText);
ui->statusBar->addWidget(tempinfo,1);
ui->statusBar->addWidget(communicationinfo,1);
ui->statusBar->addWidget(operationinfo,1);
operationinfo->setText("label3");
communicationinfo->setText("label2");
tempinfo->setText("label1");
}
到此,Statusbar设置成功,编译通过,显示内容位labe1,2,3.无错错误。
但是当我在mainwindow的其他函数中调用
tempinfo->setText(string);时,程序会崩溃,报的错误是程序crash。
我以为是声明的QLabel被释放了,将new的语句更改为
QLabel *tempinfo =new QLabel(this);
QLabel *communicationinfo=new QLabel(this);
QLabel *operationinfo=new QLabel(this);
上述语句,依然不行。
经过多此次测试,发现在初始化函数中写什么都没问题,但是只要是在初始化函数意外的函数调用QLabel的任何函数都会崩溃。
请教,我错在哪里,实在想不明白。
7 个解决方案
#1
我在使用QT CREATOR + mingw 中,遇到过这种莫名其妙的问题,
重启后 clean - > qmake -> rebuild -> run
楼主可以试试
重启后 clean - > qmake -> rebuild -> run
楼主可以试试
#2
我也遇到过莫名其妙的问题,这里我已经重启过了,电脑和qt creator都重启过了
#3
tempinfo =new QLabel;
communicationinfo=new QLabel;
operationinfo=new QLabel;
这样就可以了。
communicationinfo=new QLabel;
operationinfo=new QLabel;
这样就可以了。
#4
那么你在初始化函数外调用QLabel::setText 时,该对象确实有效吗
#5
对头,看来是你代码问题,初始化函数用的局部变量,而外面使用的是未初始化的成员变量
#6
问题解决了。。。
错误在于,我在头文件中已经声明了QLabel,但是在函数中又声明了一次QLabel,所以此时导致全局QLabel并没有被初始化,所以才会在访问的时候崩溃,因为访问的确实是未初始化的指针。
错误在于,我在头文件中已经声明了QLabel,但是在函数中又声明了一次QLabel,所以此时导致全局QLabel并没有被初始化,所以才会在访问的时候崩溃,因为访问的确实是未初始化的指针。
#7
你说的对,我的笔误,写程序的时候估计的脑袋浆糊了,这种错误都会犯。
#1
我在使用QT CREATOR + mingw 中,遇到过这种莫名其妙的问题,
重启后 clean - > qmake -> rebuild -> run
楼主可以试试
重启后 clean - > qmake -> rebuild -> run
楼主可以试试
#2
我也遇到过莫名其妙的问题,这里我已经重启过了,电脑和qt creator都重启过了
#3
tempinfo =new QLabel;
communicationinfo=new QLabel;
operationinfo=new QLabel;
这样就可以了。
communicationinfo=new QLabel;
operationinfo=new QLabel;
这样就可以了。
#4
那么你在初始化函数外调用QLabel::setText 时,该对象确实有效吗
#5
对头,看来是你代码问题,初始化函数用的局部变量,而外面使用的是未初始化的成员变量
#6
问题解决了。。。
错误在于,我在头文件中已经声明了QLabel,但是在函数中又声明了一次QLabel,所以此时导致全局QLabel并没有被初始化,所以才会在访问的时候崩溃,因为访问的确实是未初始化的指针。
错误在于,我在头文件中已经声明了QLabel,但是在函数中又声明了一次QLabel,所以此时导致全局QLabel并没有被初始化,所以才会在访问的时候崩溃,因为访问的确实是未初始化的指针。
#7
你说的对,我的笔误,写程序的时候估计的脑袋浆糊了,这种错误都会犯。