六、Qt在构造函数中调用自定义界面初始化函数,导致控件初始化失败!!!

问题:

在设计 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);
}

原因:

待我深入了解后,在解释!

发布了444 篇原创文章 · 获赞 113 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/panchang199266/article/details/103941643