Qt QMdiArea未添加子窗口
我有一个函数,负责初始化自定义小部件并将其添加到MdiArea。当我第一次调用此函数时,它工作正常。但如果我再次调用,它将初始化自定义小部件,但不会添加到MdiArea。我在这里提到了这个功能:-Qt QMdiArea未添加子窗口,qt,Qt,我有一个函数,负责初始化自定义小部件并将其添加到MdiArea。当我第一次调用此函数时,它工作正常。但如果我再次调用,它将初始化自定义小部件,但不会添加到MdiArea。我在这里提到了这个功能:- void CArbWaveViewWidget::newFile() { m_ptrWavePresenter = new CArbWavePresenter; QMdiSubWindow *subWindow1 = new QMdiSubWindow; subWind
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);
}
WaveViewWidget::newFile()
{
m_ptrWavePresenter=新的演示者;
QMdiSubWindow*子窗口1=新的QMdiSubWindow;
子窗口1->setWidget(m_ptrWavePresenter->getTableView());//获取customWidget
qDebug()getGraphView());//获取customWidget
qDebug()添加子窗口(子窗口2);
}
如何解决这个问题?1。声明您的qmdusibwindow
声明QMdiSubWindow
时,将mdiArea
作为参数
QMdiSubWindow *subWindow = new QMdiSubWindow(mdiArea);
或者您可以使用setParent(QWidget*parent)
2.在qmdusibwindow
3.更新qmdusibwindow
内容
如果需要更新子窗口内容,请将qmdusbwindow
声明为类变量,初始化QMdiArea
和qmdusbwindow
并设置QWidget
你的班级
yourClass.cpp
您需要调用方法“show”
第一次运行正常。如果我第二次调用该函数,它不会加载子窗口。是的,因为您再次创建了所有上下文。只需更新你的小部件。为此,创建子窗口作为类变量,并调用一个只更新小部件的新函数。它将仅适用于具有一个子窗口的mdiarea。但是在我的例子中,我想要一个mdiarea,它有多个子窗口和不同的自定义小部件。如果您不知道您将拥有的qmdusbwindow的数量,请使用列表或向量。
QMdiSubWindow *subWindow = new QMdiSubWindow();
subWindow->setParent(mdiArea);
QWidget *myWidget = new QWidget();
subWindow->setWidget(myWidget);
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);
}
QMdiSubWindow *subWindow = new QMdiSubWindow();
subWindow->setParent(mdiArea);
subWindow->setWidget(yourWidget);
subWindow->show();