小部件未在QT主窗口中显示

时间:2014-07-29 18:04:36

标签: c++ qt

我正在构建一个简单的应用程序,主窗口必须显示两个小部件(右边是QTreeView,左边是QTabWidget),执行此操作我使用的是QHBoxLayout。 这是我编写的代码(MainWindow的构造函数):

MainWindow::MainWindow()
{
    mainLayout = new QHBoxLayout(this);
    tabber = new QTabWidget(this);
    analysisTreeView = new QTreeView(this);

    tabber->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    mainLayout->addWidget(tabber, 0);
    mainLayout->addWidget(analysisTreeView, 0);

    createActions();
    createMenus();
    createToolBars();

    connect(tabber, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int)));

    setLayout(mainLayout);
}

但是当我运行应用程序时,主窗口显示没有小部件。为什么呢?

根据要求,我添加了一些代码:

点击主窗口工具栏中的按钮后,Tabber中会添加一个新标签:

void MainWindow::newSheet()
{
    GraphicsScene *newScene = new GraphicsScene(itemMenu,this);
    QGraphicsView *newView = new QGraphicsView(this);
    newScene->setSceneRect(-200, -200, 400, 400);
    newView->scale(1.5,1.5);
    newView->setCacheMode(QGraphicsView::CacheBackground);
    newView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
    newView->setRenderHint(QPainter::Antialiasing);
    newView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    newView->setScene(newScene);
    sheetList.append(newView);
    tabber->addTab(newView,"PNC");
    connect(newScene, SIGNAL(itemInserted(PItem*)), this, SLOT(itemInserted(PItem*)));
    connect(newScene, SIGNAL(requestUpdateGUI(GraphicsScene*)), this,  SLOT(updateGUI(GraphicsScene*)));
}

我的main.cpp:

#include <QApplication>

#include "mainwindow.h"

int main(int argc, char *argv[])
{
    Q_INIT_RESOURCE(application);

    QApplication a(argc, argv);
    MainWindow window;

    window.showMaximized();
    return a.exec();
}

1 个答案:

答案 0 :(得分:1)

我认为你的班级专攻QMainWindow。如果是这样,它需要设置centralWidget:

MainWindow::MainWindow()
{
    // added by jpo38
    QWidget* mainWidget = new QWidget( this );
    setCentralWidget( mainWidget );
    // end added by jpo38

    mainLayout = new QHBoxLayout(mainWidget);
    tabber = new QTabWidget(mainWidget);
    analysisTreeView = new QTreeView(mainWidget);

    tabber->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    mainLayout->addWidget(tabber, 0);
    mainLayout->addWidget(analysisTreeView, 0);

    createActions();
    createMenus();
    createToolBars();

    connect(tabber, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int)));

    setLayout(mainLayout);
}