gpt4 book ai didi

qt - QMdiArea 不添加子窗口

转载 作者:行者123 更新时间:2023-12-05 02:22:50 32 4
gpt4 key购买 nike

我有一个函数负责初始化自定义小部件并将其添加到 MdiArea。当我第一次调用它时它工作正常。但是如果我再次调用,它正在初始化自定义小部件而不是添加进入 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);
}

我该如何解决这个问题?

最佳答案

1。声明您的QMdiSubWindow

当你声明一个QMdiSubWindow时,将mdiArea作为参数

QMdiSubWindow *subWindow = new QMdiSubWindow(mdiArea);

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

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

2。在您的 QMdiSubWindow

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

3。更新QMdiSubWindow内容

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

你的类.h

class yourClass {

public:
yourClass();
void newFile();

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

void init();
};

你的类.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);
}

关于qt - QMdiArea 不添加子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27032270/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com