我有一个函数负责初始化自定义窗口小部件并将其添加到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);
}
我该如何解决这个问题?
答案 0 :(得分:2)
QMdiSubWindow
当您声明QMdiSubWindow
时,请将mdiArea
作为参数
QMdiSubWindow *subWindow = new QMdiSubWindow(mdiArea);
或者您可以使用setParent ( QWidget * parent )
QMdiSubWindow *subWindow = new QMdiSubWindow();
subWindow->setParent(mdiArea);
QWidget
QMdiSubWindow
QWidget *myWidget = new QWidget();
subWindow->setWidget(myWidget);
QMdiSubWindow
内容如果您需要更新子窗口内容,请将QMdiSubWindow
声明为类变量,初始化QMdiArea
和QMdiSubWindow
并设置QWidget
class yourClass {
public:
yourClass();
void newFile();
private:
QMdiArea *m_area;
QMdiSubWindow *m_subWindow1, *m_subWindow2;
void init();
};
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();