问题:
在设计 UI 界面时,无法无法直接将控件拖到状态栏,一般是选择自定义控件,然后在MainWindow 构造函数中初始化控件,并将其加入到状态栏中。一般我是将初始化控件的代码单独抽取一个函数,例如:
MyMainWindow::MyMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyMainWindow)
{
ui->setupUi(this);
init();
}
void MyMainWindow::init()
{
setCentralWidget(ui->splitterMain);
labCellIndex = new QLabel("当前单元格坐标:");
labCellIndex->setMinimumWidth(250);
labelCellType = new QLabel("当前单元格类型:", this);
labelCellType->setMinimumWidth(200);
labelStudId = new QLabel("学生ID:", this);
labelStudId->setMinimumWidth(200);
ui->statusBar->addWidget(labelCellType);
ui->statusBar->addWidget(labelStudId);
ui->statusBar->addWidget(labCellIndex);
}
运行上述代码后,始终在状态栏中看不到这三个自定义标签,而且后续再对这些标签进行设置文字时,更是直接导致程序崩溃。
解决办法:
不要单独抽取函数,将上述代码直接写到构造函数中!!!改造后的代码如下:
MyMainWindow::MyMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyMainWindow)
{
ui->setupUi(this);
setCentralWidget(ui->splitterMain);
labCellIndex = new QLabel("当前单元格坐标:");
labCellIndex->setMinimumWidth(250);
labelCellType = new QLabel("当前单元格类型:", this);
labelCellType->setMinimumWidth(200);
labelStudId = new QLabel("学生ID:", this);
labelStudId->setMinimumWidth(200);
ui->statusBar->addWidget(labelCellType);
ui->statusBar->addWidget(labelStudId);
ui->statusBar->addWidget(labCellIndex);
}
原因:
待我深入了解后,在解释!