QDialog派生类

问题描述 投票:0回答:1

我有一个从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中调用了我的类,但是在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
c++ qt qdialog
1个回答
0
投票

这可能是重复的 这个 的问题。

答案是你必须自己写出这个功能。如果你有你的 myplot 对象的一个成员变量。MainWindow 类,然后你可以在 MainWindow::closeEvent. 关于如何实现这个功能,请看上面的链接答案。

BTW: 那你就不必让你的对话框变成模态,在MainWindow之前强制关闭它。


0
投票

你需要看看QDialog的样子......

你需要看看QDialog是什么样子的......这样做:在构造函数中传递一个QWidget而不是QDialog,在对话框中添加一个destructor并删除所有由myplot实例创建的东西(如果有的话),调用exec()而不是show()......。

class myplot : public QDialog
{
    Q_OBJECT
    public:
        explicit myplot(QWidget *parent = nullptr);
         ~myplot();
    .... 
© www.soinside.com 2019 - 2024. All rights reserved.