QMdiArea没有添加子窗口

时间:2014-11-20 05:16:07

标签: qt

我有一个函数负责初始化自定义窗口小部件并将其添加到MdiArea.When我第一次调用它时工作正常。但如果我再次调用它,它正在初始化自定义窗口小部件但不添加进入MdiArea。我在这里提到了这个功能: -

void CArbWaveViewWidget::newFile()
{
     m_ptrWavePresenter = new CArbWavePresenter;

     QMdiSubWindow *subWindow1 = new QMdiSubWindow;
     subWindow1->setWidget(m_ptrWavePresenter->getTableView()); // getting customWidget
     qDebug()<<"Table View ==="<<m_ptrWavePresenter->getTableView();
     subWindow1->setAttribute(Qt::WA_DeleteOnClose);

     QMdiSubWindow *subWindow2 = new QMdiSubWindow;
     subWindow2->setWidget(m_ptrWavePresenter->getGraphView()); // getting customWidget
     qDebug()<<"Graph View ==="<<m_ptrWavePresenter->getGraphView();
     subWindow2->setAttribute(Qt::WA_DeleteOnClose);
     mdiArea->addSubWindow(subWindow1);
     mdiArea->addSubWindow(subWindow2); 
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

1。声明您的QMdiSubWindow

当您声明QMdiSubWindow时,请将mdiArea作为参数

QMdiSubWindow *subWindow = new QMdiSubWindow(mdiArea);

或者您可以使用setParent ( QWidget * parent )

QMdiSubWindow *subWindow = new QMdiSubWindow();
subWindow->setParent(mdiArea);

2。在QWidget

中创建并添加QMdiSubWindow
QWidget *myWidget = new QWidget();
subWindow->setWidget(myWidget);

3。更新QMdiSubWindow内容

如果您需要更新子窗口内容,请将QMdiSubWindow声明为类变量,初始化QMdiAreaQMdiSubWindow并设置QWidget

yourClass.h

class yourClass {

public:
    yourClass();
    void newFile();

private:
    QMdiArea *m_area;
    QMdiSubWindow *m_subWindow1, *m_subWindow2;

    void init();
};

yourClass.cpp

yourClass::yourClass()
{
    init();
}

void yourClass::init()
{
    m_area = new QMdiArea();
    m_subWindow1 = new QMdiSubWindow(m_area);
    m_subWindow2 = new QMdiSubWindow(m_area);
    // continue to init your QMdiSubWindow
}

void yourClass::newFile()
{
    // Set your QWidget (yourWidget) into your QMdiSubWindow
    m_subWindow1->setWidget(yourWidget);
    m_subWindow2->setWidget(anotherWidget);
}

答案 1 :(得分:0)

您需要调用方法“show”

QMdiSubWindow *subWindow = new QMdiSubWindow();
subWindow->setParent(mdiArea);
subWindow->setWidget(yourWidget);
subWindow->show();