在QMainWindow中修改QStatusBar而不删除它

时间:2014-04-25 22:00:13

标签: c++ qt qmainwindow qstatusbar

实际上我遇到了一个大问题,我有一个QTabWidget包含多个名为tab的QWidget-herited对象,我想在QTabWidget索引的函数中更改QStatusBar,但QMainwindow删除了QStatusBar(其中每次我更改选项卡时它都在Tab对象中,它会导致应用程序崩溃。这是我的代码

mainwindow.h

#ifndef TAB_H
#define TAB_H

#include <QtWidgets>

class Tab : public QWidget
{
public:
    Tab(int id);
    QStatusBar *sbar;


private:
};

#endif // TAB_H

mainwindow.cpp

#include "mainwindow.h"
#include "tab.h"
MainWindow::MainWindow()
{
tabs = new QTabWidget();

resize(800, 600);

connect(tabs, SIGNAL(currentChanged(int)), this, SLOT(currentChanged(int)));

for(int i = 0; i < 20; i++)
{
    tabs->addTab(new Tab(i), QString("%1").arg(i));
}

setCentralWidget(tabs);
}

MainWindow::~MainWindow()
{

}

void MainWindow::currentChanged(int)
{
    Tab *thistab = static_cast<Tab*>(sender());
    setStatusBar(new QStatusBar());
}

tab.h

#ifndef TAB_H
#define TAB_H

#include <QtWidgets>

class Tab : public QWidget
{
public:
    Tab(int id);
    QStatusBar *sbar;


private: 
};

#endif // TAB_H

tab.cpp

#include "tab.h"

Tab::Tab(int id)
{
    sbar = new QStatusBar();
    QHBoxLayout hbl;
    QLabel *ll = new QLabel("StatusBar tester: Tab number : #"+QString("%1").arg(id));
    sbar->addWidget(new QLabel(QString("%1").arg(id)));
    hbl.addWidget(ll);
    setLayout(&hbl);

}

感谢您的耐心

0 个答案:

没有答案