gpt4 book ai didi

c++ - QDialog派生类

转载 作者:行者123 更新时间:2023-12-02 10:32:06 30 4
gpt4 key购买 nike

我从用于显示图表的QDialog派生了类。构造函数如下所示:

myplot::myplot(QDialog *parent) : QDialog(parent)
{
chartView = new QChartView();
chart = new QChart();

Qt::WindowFlags flags = 0;
flags |= Qt::WindowMaximizeButtonHint;
flags |= Qt::WindowCloseButtonHint;
setWindowFlags(flags);

this->setLayout(new QVBoxLayout);
this->layout()->addWidget(chartView);

this->setModal(1);
chartView->setChart(chart);
}

我从Mainwindow.cpp调用我的类(class),但在App退出后对话框不会关闭:
myplot* plot = new myplot();        //does not close after app exit
plot->do_something();
plot->show();

我以为可以通过此方法解决问题,但它不起作用:
myplot* plot = new myplot(this);    //does not work

当我使用此对话框时,对话框立即关闭
myplot plot;                //immediatelly close
plot.do_something();
plot.show();

当我使用exec而不是 .show()时,关闭对话框后,出现错误 “调试断言失败,_CtrlIsValidHeapPointer(block)”
plot.exec();

//work but after exiting dialog error

请问,如何正确处理我的派生类在App退出后关闭?我也想让 myplot类不是模态的(现在我将它设为模态的,以便用户在应用退出之前手动将其关闭)。

添加头文件:
#ifndef MYPLOT_H
#define MYPLOT_H

class myplot : public QDialog
{
Q_OBJECT

private:
public:
explicit myplot(QDialog *parent = nullptr);
signals:

};


#endif // MYPLOT_H

最佳答案

这可能是this问题的副本。

答案是您必须自己编写该功能。如果您将myplot对象作为MainWindow类的成员变量,则可以在MainWindow::closeEvent中将其正确关闭。有关如何实施此操作的提示,请参见上面的链接答案。

顺便说一句:然后,您不必使对话框模态强制在MainWindow之前强制将其关闭。

关于c++ - QDialog派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61870119/

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