在一个类的构造函数中,建立一个局部指针,为甚么不会析构.如果说构造函数就是用来初始化的,这个回答我觉得有些牵强.
代码
//构造函数
ChartDisplay::ChartDisplay(QWidget *parent)
: QMainWindow(parent)
, ipLineEdit(new QLineEdit(QLatin1String("127.0.0.1"),this))
, portLineEdit(new QLineEdit(tr("10003"),this))
, ipLabel(new QLabel(tr("Server &ip:"),this))
, portLabel(new QLabel(tr("Server &port:"),this))
, statusLabel(new QLabel(tr("This examples requires that you run the Fortune Server example as well."),this))
, serverConnectButton(new QPushButton(tr("Get connect"),this))
, tcpSocket(new QTcpSocket(this))
, currentDataStr(QString())
{
initFunc();
connectFunc();
}
ChartDisplay::~ChartDisplay()
{
}
void ChartDisplay::initFunc()
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
//setWindowFlags(Qt::Dialog);
portLineEdit->setValidator(new QIntValidator(1, 65535, this));
ipLabel->setBuddy(ipLineEdit);
portLabel->setBuddy(portLineEdit);
serverConnectButton->setDefault(true);
serverConnectButton->setEnabled(1);
auto quitButton = new QPushButton(tr("Quit"));
auto buttonBox = new QDialogButtonBox;
buttonBox->addButton(serverConnectButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
connect(quitButton, &QAbstractButton::clicked, this, &QWidget::close);
// in.setDevice(tcpSocket);
// in.setVersion(QDataStream::Qt_4_0);
setWindowTitle(QGuiApplication::applicationDisplayName());
portLineEdit->setFocus();
//auto centerVBoxLayout = new QVBoxLayout(this);
auto chartWidget = new QWidget(this);
// auto anotherWidget = new QWidget(this);
auto gridLayout = new QGridLayout(chartWidget);
mychart *chart = new mychart(0,0,5,"时间","经度");
chart->setTitle("Dynamic 经度 chart");
chart->legend()->hide();
chart->setAnimationOptions(QChart::AllAnimations);
QChartView chartView(chart,chartWidget);
chartView.setRenderHint(QPainter::Antialiasing);
gridLayout->addWidget(&chartView,0,0,20,6,Qt::AlignCenter);
gridLayout->addWidget(ipLabel,1,0,1,1,Qt::AlignLeft);
gridLayout->addWidget(ipLineEdit,1,1,1,1,Qt::AlignLeft);
gridLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored),1,2,1,3,Qt::AlignLeft);
gridLayout->addWidget(serverConnectButton,1,5,1,1,Qt::AlignRight);
gridLayout->addWidget(portLabel,2,0,1,1,Qt::AlignLeft);
gridLayout->addWidget(portLineEdit,2,1,1,1,Qt::AlignLeft);
gridLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored),2,2,1,3,Qt::AlignLeft);
gridLayout->addWidget(quitButton,2,5,1,1,Qt::AlignRight);
gridLayout->addWidget(statusLabel,3,0,1,6,Qt::AlignLeft);
chartWidget->setLayout(gridLayout);
gridLayout->setRowStretch(0,10);
gridLayout->setRowStretch(1,1);
gridLayout->setRowStretch(2,1);
gridLayout->setRowStretch(3,1);
setCentralWidget(chartWidget);
}
这段代码中 auto quitButton = new QPushButton(tr("Quit"));没有被析构, 我自己写的 mychart *chart = new mychart(0,0,5,"时间","经度");被析构了.为什么,是因为我自己的类构造函数没有父类指针吗
mychart::mychart(qreal xmin, qreal ymin, qint8 tickcount, QString xtitle, QString ytitle)
:mxmin(xmin),
mymin(ymin),
mtickcount(tickcount),
mxtitle(xtitle),
mytitle(ytitle),
myAxis(new QValueAxis()),
msplineSeriesData(new QSplineSeries()),
mxDateAxis(new QDateTimeAxis())
{
QPen green(Qt::green);
green.setWidth(3);
msplineSeriesData->setPen(green);
msplineSeriesData->append(QDateTime(QDate(2022,6,10),QTime(14,20,32)).toMSecsSinceEpoch(),1);
msplineSeriesData->append(QDateTime(QDate(2022,6,10),QTime(14,20,34)).toMSecsSinceEpoch(),1);
msplineSeriesData->append(QDateTime(QDate(2022,6,10),QTime(14,20,36)).toMSecsSinceEpoch(),1);
msplineSeriesData->append(QDateTime(QDate(2022,6,10),QTime(14,20,38)).toMSecsSinceEpoch(),1);
addSeries(msplineSeriesData);
addAxis(mxDateAxis,Qt::AlignBottom);
addAxis(myAxis,Qt::AlignLeft);
bool ol = msplineSeriesData->attachAxis(mxDateAxis);
ol = msplineSeriesData->attachAxis(myAxis);
mxDateAxis->setTickCount(mtickcount);
mxDateAxis->setRange(QDateTime(QDate(2022,6,10),QTime(14,20,30)),QDateTime(QDate(2022,6,10),QTime(14,20,40)));
myAxis->setRange(mymin, 10);
mxDateAxis->setTitleText(mxtitle);
myAxis->setTitleText(mytitle);
//mxDateAxis->setFormat("yyyy-MM-dd hh-mm-ss-z");
//已经被弃用
//this->setAxisX(mxDateAxis,msplineSeriesData);
}