qt的内存泄漏问题(qt中的new和delete操作) 20C

环境 qt5.7
在thermaldialog对话框中 点击按钮 弹出 themaltopshow 对话框
ThermalDialog 、ThermalTopShow 为对应对话框的类名
代码如下:
void ThermalDialog::on_TshowButton_clicked()
{
......
thermaltopshow = new ThermalTopShow; //
......
}

    问题: 1、在只关闭themaltopshow对话框情况下,会出现内存泄漏的问题吗?
                                    如果有 怎么解决, 需要delete操作吗
                            2、C++中 是new 和 delete 搭配使用的,qt中好像很少使用delete,请教一下为什么

2个回答

qt的指针管理是半自动的
QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象
参考:https://blog.csdn.net/dbzhang800/article/details/6300025

要对你的窗口设置WA_DeleteOnClose属性,默认的情况下关闭窗口仅仅意味着隐藏它
thermaltopshow ->setAttribute(Qt::WA_DeleteOnClose, true);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Qt中new和delete问题
void MainWindow::gotocell()rnrn [color=#FF0000] GoToCell*dialog = new GoToCell(this);[/color]rn if(dialog.exec())rn rn QString str = dialog.CellLineEdit->text().toUpper(); rn spreadsheet->setCurrentCell(str.mid(1).toInt()-1,rn str[0].unicode()-'A');rn rn [color=#FF0000] delete dialog;[/color]rnrnrn这是参考书上的一段程序。MainWindow是一个对象名称,GoToCell也是一个对象名称,把dialog设置成MainWindow的子对象,为什么还要delete这一步。
关于QT中的new和delete
qt中会自动释放子控件的空间,那他会不会自动释放new分配的其他类型的空间呢?rn例如:CNode * p = new CNode(); //cnode是自定义的类rn在函数结束后,没有调用delete p;rnrnrn我在用qt 中遇到一个问题,声明了一个全局变量,在mainwindow中分配了空间,不释放,在函数局部可以使用,但是在别的地方使用时,指针又变成了0x0rn晕!!!rn请高手解答!!!
qt中new与delete的使用
qt中有时候使用new后并没有使用delete,原因是 Qt 自动回收是靠父子关系。父亲销毁了。他的孩子也销毁。 #include "mainwindow.h" #include #include #include int main(int argc, char *argv[]) {     QApplication a(argc, argv);     Mai
Qt中delete的问题
最近项目遇到了一个bug,压力测试ui总会崩溃,gdb调试未果,跑到了库函数,无从查起: (gdb)bt #0 0x4146b1e4 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&,QPoint const&, int, QPainter*, QWidgetBackingStore*) () from/qt/lib/l
qt中关于new与delete的使用
在qt中有些new出来的对象需要手动delete,有些不需要。这是因为qt遵循父与子的回收机制,极大的减少了我们的工作量。 int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; QLabel *label =new QLabel(“hello”,&w); //这里使用new之后不需要执行de...
迷惑于Qt中的new与delete
举个例子,刚学Qt的例子rn[code=c]int main(int argc, char *argv[])rnrn QApplication a(argc, argv);rn QLabel *label = new QLabel;rn label->show();rn a.exec();rnrn return 0;rn[/code]rn这里面的label是new出来的,那么需要delete吗?rn我的疑问是,在Qt中什么时候需要delete呢?rn
Qt中使用new之后没有delete
Qt中使用new之后没有delete 参考网址:http://m.blog.csdn.net/chaozi2008/article/details/43308021 补充: 1、  承于QObject在父对象销毁时会自动去销毁子对象。(父类被销毁时,子类也被销毁)。 注意:有时候qt代码中没有指明parent,比如使用addItem、addWidget,setItem等是一样的,会自动
QT内存泄漏
Qt的半自动化的内存管理 (1)QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象。 (2)QWidget及其派生类的对象,可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构该对象)。 (3)QAbstractAnimation派生类的对象,可以设置 QAbstractAnimation::DeleteWhe
Qt自动生成代码内存泄漏问题...
最近在玩Qt,发现个问题。Qt自动生成的代码中,同例程中的代码中,menu, button, 以至dialog等控件都用指针操作(如下),初始的时候就new出一个指针来。rn如果在主窗口中,似乎倒无所谓,因为主窗口退出,整个程序也就退出了,之后自然所有占用内存全部释放掉了rn但如果是在主程序中创建的另外一个窗口实例,每次退出后其窗口指针可以被删除,但其中通过new创建的控件指针呢?rnrn如下是用Qt的Eclipse插件中UI编辑器创建编辑一个窗口后自动生成的代码,定义了一个QDialog窗口类的UI(这个类的一个实例是该QDialog类中的私有成员)。可以看到其中的控件都是在heap上分配的指针,而且其自定义的类没有destructor,也就无从谈起这些指针的清除。我在Qt的文档中也没有看到相关的描述。rnrn有大牛么?rn这是Qt特有的机制?rn还是默认大家都知道需要事后清除的?rn如果需要清除,一般性在哪里清除?(在QDialog析构函数中?)rnrn请明示!rnrn[code=C/C++]rnrn/********************************************************************************rn** Form generated from reading ui file 'newtaskdlg.ui'rn**rn** Created: Sun Sep 6 01:19:21 2009rn** by: Qt User Interface Compiler version 4.5.2rn**rn** WARNING! All changes made in this file will be lost when recompiling ui file!rn********************************************************************************/rnrn#ifndef UI_NEWTASKDLG_Hrn#define UI_NEWTASKDLG_Hrnrn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rnrnQT_BEGIN_NAMESPACErnrnclass Ui_NewTaskDlgClassrnrnpublic:rn QLineEdit *regExpLineEdit;rn QLineEdit *startUrlLineEdit;rn QLineEdit *taskLabelLineEdit;rn QSpinBox *maxLayerSpinBox;rn QLabel *label;rn QLabel *label_2;rn QLabel *label_3;rn QLabel *label_4;rn QComboBox *searchTypeComboBox;rn QDialogButtonBox *addTaskButtonBox;rn QLabel *label_5;rn QLineEdit *resultFileNameLineEdit;rn QLabel *label_6;rn QSpinBox *maxRecordSpinBox;rn QLabel *label_7;rn QTimeEdit *maxRunningTimeEdit;rn QPushButton *editPredefinedRegExpPushButton;rn QPushButton *resultFilePathPushButton;rn QCheckBox *isSameDomainCheckBox;rn QCheckBox *isTopDirCheckBox;rn QCheckBox *isAllowDuplicateCheckBox;rnrn void setupUi(QDialog *NewTaskDlgClass)rn rn if (NewTaskDlgClass->objectName().isEmpty())rn NewTaskDlgClass->setObjectName(QString::fromUtf8("NewTaskDlgClass"));rn NewTaskDlgClass->resize(386, 328);rn regExpLineEdit = new QLineEdit(NewTaskDlgClass);rn regExpLineEdit->setObjectName(QString::fromUtf8("regExpLineEdit"));rn regExpLineEdit->setGeometry(QRect(220, 10, 161, 23));rn regExpLineEdit->setEchoMode(QLineEdit::Normal);rn regExpLineEdit->setReadOnly(true);rn startUrlLineEdit = new QLineEdit(NewTaskDlgClass);rn startUrlLineEdit->setObjectName(QString::fromUtf8("startUrlLineEdit"));rn startUrlLineEdit->setGeometry(QRect(80, 40, 301, 23));rn startUrlLineEdit->setReadOnly(false);rn taskLabelLineEdit = new QLineEdit(NewTaskDlgClass);rn taskLabelLineEdit->setObjectName(QString::fromUtf8("taskLabelLineEdit"));rn taskLabelLineEdit->setGeometry(QRect(80, 130, 181, 23));rn maxLayerSpinBox = new QSpinBox(NewTaskDlgClass);rn maxLayerSpinBox->setObjectName(QString::fromUtf8("maxLayerSpinBox"));rn maxLayerSpinBox->setGeometry(QRect(340, 130, 41, 25));rn maxLayerSpinBox->setMinimum(1);rn maxLayerSpinBox->setValue(10);rn label = new QLabel(NewTaskDlgClass);rn label->setObjectName(QString::fromUtf8("label"));rn label->setGeometry(QRect(10, 130, 71, 21));rn label_2 = new QLabel(NewTaskDlgClass);rn label_2->setObjectName(QString::fromUtf8("label_2"));rn label_2->setGeometry(QRect(10, 40, 53, 21));rn label_3 = new QLabel(NewTaskDlgClass);rn label_3->setObjectName(QString::fromUtf8("label_3"));rn label_3->setGeometry(QRect(10, 10, 53, 21));rn label_4 = new QLabel(NewTaskDlgClass);rn label_4->setObjectName(QString::fromUtf8("label_4"));rn label_4->setGeometry(QRect(270, 130, 61, 21));rn searchTypeComboBox = new QComboBox(NewTaskDlgClass);rn searchTypeComboBox->setObjectName(QString::fromUtf8("searchTypeComboBox"));rn searchTypeComboBox->setGeometry(QRect(80, 9, 111, 25));rn addTaskButtonBox = new QDialogButtonBox(NewTaskDlgClass);rn addTaskButtonBox->setObjectName(QString::fromUtf8("addTaskButtonBox"));rn addTaskButtonBox->setGeometry(QRect(200, 290, 176, 34));rn addTaskButtonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);rn label_5 = new QLabel(NewTaskDlgClass);rn label_5->setObjectName(QString::fromUtf8("label_5"));rn label_5->setGeometry(QRect(10, 160, 71, 21));rn resultFileNameLineEdit = new QLineEdit(NewTaskDlgClass);rn resultFileNameLineEdit->setObjectName(QString::fromUtf8("resultFileNameLineEdit"));rn resultFileNameLineEdit->setGeometry(QRect(80, 160, 271, 23));rn resultFileNameLineEdit->setReadOnly(true);rn label_6 = new QLabel(NewTaskDlgClass);rn label_6->setObjectName(QString::fromUtf8("label_6"));rn label_6->setGeometry(QRect(10, 190, 71, 21));rn maxRecordSpinBox = new QSpinBox(NewTaskDlgClass);rn maxRecordSpinBox->setObjectName(QString::fromUtf8("maxRecordSpinBox"));rn maxRecordSpinBox->setGeometry(QRect(80, 190, 91, 25));rn maxRecordSpinBox->setMinimum(0);rn maxRecordSpinBox->setMaximum(1000000);rn maxRecordSpinBox->setValue(200);rn label_7 = new QLabel(NewTaskDlgClass);rn label_7->setObjectName(QString::fromUtf8("label_7"));rn label_7->setGeometry(QRect(180, 190, 91, 21));rn maxRunningTimeEdit = new QTimeEdit(NewTaskDlgClass);rn maxRunningTimeEdit->setObjectName(QString::fromUtf8("maxRunningTimeEdit"));rn maxRunningTimeEdit->setGeometry(QRect(280, 190, 71, 25));rn maxRunningTimeEdit->setDateTime(QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0)));rn maxRunningTimeEdit->setDisplayFormat(QString::fromUtf8("H:m"));rn maxRunningTimeEdit->setCalendarPopup(true);rn maxRunningTimeEdit->setTime(QTime(0, 0, 0));rn editPredefinedRegExpPushButton = new QPushButton(NewTaskDlgClass);rn editPredefinedRegExpPushButton->setObjectName(QString::fromUtf8("editPredefinedRegExpPushButton"));rn editPredefinedRegExpPushButton->setGeometry(QRect(190, 9, 30, 25));rn resultFilePathPushButton = new QPushButton(NewTaskDlgClass);rn resultFilePathPushButton->setObjectName(QString::fromUtf8("resultFilePathPushButton"));rn resultFilePathPushButton->setGeometry(QRect(350, 160, 30, 25));rn isSameDomainCheckBox = new QCheckBox(NewTaskDlgClass);rn isSameDomainCheckBox->setObjectName(QString::fromUtf8("isSameDomainCheckBox"));rn isSameDomainCheckBox->setGeometry(QRect(80, 70, 241, 20));rn isSameDomainCheckBox->setChecked(true);rn isTopDirCheckBox = new QCheckBox(NewTaskDlgClass);rn isTopDirCheckBox->setObjectName(QString::fromUtf8("isTopDirCheckBox"));rn isTopDirCheckBox->setGeometry(QRect(80, 90, 211, 20));rn isAllowDuplicateCheckBox = new QCheckBox(NewTaskDlgClass);rn isAllowDuplicateCheckBox->setObjectName(QString::fromUtf8("isAllowDuplicateCheckBox"));rn isAllowDuplicateCheckBox->setGeometry(QRect(80, 220, 271, 20));rnrn retranslateUi(NewTaskDlgClass);rn QObject::connect(addTaskButtonBox, SIGNAL(rejected()), NewTaskDlgClass, SLOT(deleteLater()));rnrn QMetaObject::connectSlotsByName(NewTaskDlgClass);rn // setupUirnrn .....rn.....rnrnnamespace Ui rn class NewTaskDlgClass: public Ui_NewTaskDlgClass ;rn // namespace UirnrnQT_END_NAMESPACErnrn#endif // UI_NEWTASKDLG_Hrnrn[/code]
Qt内存泄漏问题
软件跑时间长了问题很多。。rn跑17小时暂用比起始时多暂用了800m内存。。吓人啊rnrn感觉是这里的问题。rn我用的QListWidget在里面自定义了样式rn里面new了很多 QLabel还有一个100* 100的缩略图 一个QProgressBarrn有8w个把过往的。。但是,我控制里面只显示1000条。。rnrn当里面条目超过1000时rn我就这样删除第一条了。rndelete ui.listWidget->takeItem(0);rnrn写了个小程序试了下就2个label 一个progressbar。。软件启动占用了3mb。。我创建了1000个。。占用12mb,删除所有的之后还占用了9mb。rn并没有完全释放啊?? 算一算。。1000条释放后还多占用6mb。。那一条就差不多6kb。。rn这样的话我那8w条,也占用了468mb。。rnrn不晓得这怎么解决。。大神来指导下。。
关于QT的 delete的问题
我看QT自带的example 里面的代码是一顿new 但就是没看到deletern我想问下,QT 代码的delete在那边?
QT delete问题
void Dialog::changeEvent(QEvent *event)rnrn trayIcon=new QSystemTrayIcon(this);rn connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason)));rnrnrnvoid Dialog::onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason)rnrn switch(reason)rn rn case QSystemTrayIcon::DoubleClick:rn delete trayIcon;rn break;rn rnrnrn请问下如何在onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason)中delete掉Dialog::changeEvent(QEvent *event)中的trayIcon?rn
QT中new QTreeWidgetItem问题
我的问题如下:rn一个对话框类,构造函数中new一个QTreeWidget[code=c]rnADlg::ADlg(QWidget *parent): QDialog(parent)rnrn tree = new QTreeWidget;rn[/code]rn析构函数中析构它[code=c]rnADlg::~ADlg()rnrn delete tree;rn[/code]rn类的一个成员函数中为这个树添加节点,打开对话框时调用[code=c]rnvoid ADlg::OpenADlg()rnrn QTreeWidgetItem *Item1= new QTreeWidgetItem(tree, list1);rn for(int i=0;i<..;i++)rn rn QStringList list2;rn list2<<(..);rn QTreeWidgetItem *Item2= new QTreeWidgetItem(Item1, list2);rn Item1->addChild(Item2);rn rn exec(); rn[/code]rn问题是,每次析构这个类的时候内存都会出错,请求指点哪里出了问题
QT父子与QT对象delete
Qt的对象模型提供了一种Qt对象之间的父 子关系,当很多个对象都按一定次序建立起来这种父子关系的时候,就组织成了一颗树。当delete一个父对象的时候,Qt的对象模型机制保证了会自动的把 它的所有子对象,以及孙对象,等等,全部delete,从而保证不会有内存泄漏的情况发生。 任何事情都有正反两面作用,这种机制看上去挺好,但是却会对很多Qt的初学者造成困扰,我经常给别人回答的问题是:1,new了一个Qt对象之后,在什么 情况下应该delete它?2,Qt的析构函数是不是有bug?3,为什么正常delete一个Qt对象却会产生segment fault?等等诸如此类的问题,这篇文章就是针对这个问题的详细解释。
重载New和Delete检测内存泄漏
#include #include #include #include #include #include #include using namespace std; map> my_map; class A { public: int a = 1; }; void * __cdecl operator new(unsigned int size, const char *fil
c++ new/delete [],内存泄漏,动态数组
一 概念 new/delete是用于动态分配和撤销内存的运算符。new/delete是c++里才有的,c中是用malloc和free,c++虽然也可以用,但是不建议用。当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。删除一个指针p(delete p)实际意思是删除了
重载new和delete检测内存泄漏
内存泄漏就是new出来的内存没有通过delete合理的释放。 重载new和delete检测内存泄漏原理是: 在重载的new中记录内存分配情况,在重载的delete中删除内存分配记录,从而跟踪所有内存分配信息。 下面代码的是在《Think in C++ V2》第2章中源码的例子基础上修改的。 一点笔记来自《Think in C++ V2》中第2章: 1. 断言是一个肯定语句,用来肯定显
QT开发(十九)——QT内存泄漏问题
QT开发(十九)——QT内存泄漏问题一、QT对象间的父子关系QT最基础和核心的类是:QObject,QObject内部有一个list,会保存children,还有一个指针保存parent,当自己析构时,会自己从parent列表中删除并且析构所有的children。QT对象之间可以存在父子关系,每一个对象都可以保存它所有子对象的指针,每一个对象都有一个指向其父对象的指针...
QT内存泄漏解决方案.rar
详细说明了QT检测内存泄漏的方法,包括检测工具及其安装方法和设置方法。
QT 如何防止内存泄漏?
怎样做才不会出现这种情况
QT之内存泄漏管理
QT之内存泄漏管理QT之内存泄漏管理 插叙 QT半自动内存管理 内存例子 内存管理陷阱 QT智能指针 参考链接 结尾插叙 在C++学习里,我们都知道,New和Delete是成对出现的,如果你忘记了Delete,少了还可以容忍,多了,你就重启应用吧,因为你占用内存太大了! 在QT里,我们经常会看到很多NEW出来的对象,但是不需要我们自己去Delete掉。为什么会这样?那是因为QT里,有很
QT 4.86有内存泄漏?
我有个QT5.31的小工程,在VS2010和VS2012下编译运行都没有任何问题。但是我想把它迁移到VS2008+4.86下去,因为这样更轻量级,且4.86是QT4的最后一个版本,应该是经典版本,Bug很少才对。整个工程我就改了一处代码,就是connect语法变了,从:rnconnect(network_manager, &QNetworkAccessManager::finished, this, &LoginDialog::ReadXML);rn变成:rnconnect(network_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(ReadXML(QNetworkReply*)));rnVS2008顺利编译通过,运行也有相应的效果。但是效果显示之后,提示有问题:rnUnhandled exception at 0x66fdf3b1 (QtCored4.dll) in NeobeV6.exe: 0xC0000005: Access violation reading location 0xfeeefefa.rnrn点击Break按钮,停在:rnstruct Q_CORE_EXPORT QListData rn inline int size() const return d->end - d->begin; rnrn后来我追踪了一下,结果是C:\Qt\4.8.6_2008\src\network\access\qnetworkreplyimpl.cpp 的 QNetworkReplyImplPrivate::finished() 函数的最后一句语句有问题:rnvoid QNetworkReplyImplPrivate::finished() rn // 其它语句rn resumeNotificationHandling(); // 这句!!!rnrn看着名字,还是应该与connect的语法有关系,请各位大大指教一下,非常感谢!
qt 界面内存泄漏?
问题链接:rnhttp://bbs.qter.org/forum.php?mod=viewthread&tid=5618rnrnrnrn第一次创建一个窗口并返回后发现内存增加了一点(几百kb左右),之后创建并返回内存就不再增加了。rn有没哪位大神知道这个原理啊?rn以及在子界面较多的情况下应该如何避免这个问题呢?rnrnps:之前在Ubuntu 上发现的这个问题,以为是linux的内存管理机制(cache)。但没想到在windows上也有这个问题rnrn类似问题:rnhttp://bbs.qter.org/forum.php?mod=viewthread&tid=1030rnhttp://bbs.csdn.net/topics/390341517rn
Qt sqlite 查询内存泄漏
QSqlDatabase db; if(QSqlDatabase::contains("test")) db = QSqlDatabase::database("test"); else db = QSqlDatabase::addDatabase("QSQLITE", "test"); db.setDataba
QT内存泄漏检测工具VLD
首先,特别声明 仅支持VC++编译器即MSVC。(第一个坑) 其次,下载VLD工具包(V2.5.1),并完成安装 下载链接 然后,相关配置 将vld安装目录下的include目录中的两个头文件复制到Qt默认的include目录下。 vld安装目录下的lib目录下对应的lib文件复制到Qt默认的lib目录下。 vld安装目录下的bin\Win32目录下的内容拷贝到PATH环境变量中。 ...
QT - 内存泄漏检测
一、安装vld-2.5.1-setup.exe        下载地址:https://archive.codeplex.com二、pro中添加头文件目录与库目录INCLUDEPATH += &quot;C:\\Program Files (x86)\\Visual Leak Detector\\include&quot; LIBS += &quot;C:\\Program Files (x86)\\Visual Leak ...
QT QNetworkAccessManager内存泄漏
有一个纠结的问题,现做一个HTTP客户端,使用QNetworkAccessManager发现有内存泄漏现象,特意写了一个测试代码,如下:rnrnnettest.hrnrn[code=C/C++]rn#ifndef NETTEST_Hrn#define NETTEST_Hrnrn#include rn#include "ui_nettest.h"rn#include rn#include rn#include rnrnclass NetTest : public QWidgetrnrn Q_OBJECTrnrnpublic:rn NetTest(QWidget *parent = 0);rn ~NetTest();rnrnprivate:rn Ui::NetTestClass ui;rn QNetworkAccessManager *qnam;rn QNetworkRequest qnr;rnrnpublic slots:rn void onSend();rn void accept(QNetworkReply *r);rn;rnrn#endif // NETTEST_Hrn[/code]rnrnnettest.cpprn[code=C/C++]rn#include "nettest.h"rn#include rnrnNetTest::NetTest(QWidget *parent)rn : QWidget(parent)rnrn ui.setupUi(this);rn connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(onSend()));rn qnr.setUrl(QUrl("http://www.baidu.com/"));rn qnam=new QNetworkAccessManager();rn connect(qnam, SIGNAL(finished(QNetworkReply *)), this,SLOT(accept(QNetworkReply *)));rnrnrnvoid NetTest::onSend()rn qDebug()<<"发送数据!";rn qnam->get(qnr);rnrnrnvoid NetTest::accept(QNetworkReply *r)rn qDebug()<<"接收数据!";rn qDebug()<readAll();rnrn[/code]rnrn界面就是一个按钮,点击按钮触发onSend();数据接受完成后触发accept(QNetworkReply *r)输出数据。rnrn在实际运行中,不断点击发送按钮,程序所使用的内存不断增长,在accept()中delete r;也没用。rnrn本人平台Ubuntu11.04 Qt4.7rnrn求高手指教,怎样释放每一次网络请求后占用的内存。
Qt中控件指针的delete问题
我在Qt的主窗口中定义了QAction控件的指针,但是在程序中没有任何调用,然后在主窗口的析构函数中delete这个控件,发现每次在调用主窗口的析构函数时都在“退出代码:”后显示一串无规律数字,而正常情况下应该为0。这是为什么?
QT中关于使用delete内存管理的问题
我在成员函数中创建了一个窗口要不要delete他代码如下rn[code=C/C++]rnrn QWidget *widget = new QWidget;//没有指定父窗口rn widget->resize(200,200);rn QLabel *label = new QLabel(tr("Name"));rn QHBoxLayout *hboxlayout = new QHBoxLayout;rn QLineEdit *lineedit = new QLineEdit;rn hboxlayout->addWidget(label);rn hboxlayout->addWidget(lineedit);rn widget->setLayout(hboxlayout);rn widget->setWindowTitle(tr("newFile"));rn widget->show();rnrn[/code]rn我没有指定父窗口啊 我很担心内存泄露........rngoogle没有答案只好在这问问了
QT中new出来的控件是否需要手动delete?
qt中根据父子回收机制 要自动回收清理要满足两种情况 1、是qobject的派生类 2、有指定的父对象 这样父类在清理的时候也会顺带把子清理掉。 class MainWindow : public QMainWindow { Q_OBJECT pravite: QSerialPort *serialport = NULL; //串口指针 } MainWindow::MainWindow(...
QT中QObject的子类的 delete问题
rn 各位高手,小弟刚接触QT有几个问题请教一下:rn1,为什么new一个QObject的子类,但是不需要现实的delete啊,这样不会造成内存泄露吗,rn2,句柄实体模式是什么啊?
QT——delete详解
1 Qt半自动的内存管理 Qt中已下情况new出的对象可以不用亲自去delete: (1)QObject及其派生类的对象,如果其parent非0,则其parent析构时会析构该对象,除此之外,有些类的对象可以接收设置一些特别的标记,例如: 1) QWidget及其派生类的对象,可以设置Qt::WA_DeleteOnClose标志位(当close时会析构该对象) 2)QAbstractAni...
Qt 笔记:Qt中的IO操作
Qt中IO操作的处理方式 -Qt通过统一的接口简化了文件与外部设备的操作方式 -Qt中的文件被看做一种特殊的外部设备 -Qt中的文件操作与外部设备的操作相同 IO操作中的关键函数接口 -打开设备:bool open(OpenMode mode) -读取数据:QByteArray read(qint64 maxSize) -写入数据:qint64 write(const QByteAr...
QT new QPainter导致的问题
平台windows 7,Qt 4rn.h:rn[code=c]rn#ifndef KEYBOARDEVENTTEST1_Hrn#define KEYBOARDEVENTTEST1_Hrnrn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include "ui_keyboardeventtest1.h"rnrnclass KeyboardEventTest1 : public QWidgetrnrn Q_OBJECTrnrnpublic:rn KeyboardEventTest1(QWidget *parent = 0, Qt::WFlags flags = 0);rn ~KeyboardEventTest1();rnrn void drawPix();rn void keyPressEvent(QKeyEvent *);rn void paintEvent(QPaintEvent *);rnrnprivate:rn Ui::KeyboardEventTest1Class ui;rnrnprivate:rn QPixmap *pix;rn QImage image;rn int startX;rn int startY;rn int width;rn int height;rn int step;rn;rnrn#endif // KEYBOARDEVENTTEST1_Hrnrn[/code]rn.cpprn[code=c]rn#include "keyboardeventtest1.h"rnKeyboardEventTest1::KeyboardEventTest1(QWidget *parent, Qt::WFlags flags)rn :QWidget(parent)rn rn setWindowTitle(tr("Key Event"));rnrn setAutoFillBackground(true);rnrn QPalette palette = this->palette();rn palette.setColor(QPalette::Window,Qt::white);rn setPalette(palette);rnrn setMinimumSize(512,256);rn setMaximumSize(512,256);rnrn width=size().width();rn height=size().height();rn pix = NULL;rn pix = new QPixmap(width,height);rn pix->fill(Qt::white);rnrn step=32;rn image.load("a.jpg");rnrn startX=0;rn startY=0;rnrn drawPix();rnrnrnKeyboardEventTest1::~KeyboardEventTest1()rnrnrnrnvoid KeyboardEventTest1::drawPix()rnrn pix->fill(Qt::white);rn QPainter painter(pix);rn QPen pen(Qt::DotLine);rn painter.setPen(pen);rn for(int i=step;imodifiers() == Qt::ControlModifier)rn rn if(event->key() == Qt::Key_Left)rn rn startX=(startX-1<0)?startX:startX-1;rnrn rn if(event->key() == Qt::Key_Right)rn rn startX=(startX+1+image.width ()>width)?startX:startX+1;rnrn rn if(event->key() == Qt::Key_Up)rn rn startY=(startY-1<0)?startY:startY-1;rnrn rn if(event->key() == Qt::Key_Down)rn rn startY=(startY+1+image.height()>height)?startY:startY+1;rnrn rn rn elsern rn startX=startX-startX%step;rn startY=startY-startY%step;rnrn if(event->key() == Qt::Key_Left)rn rn startX=(startX-step<0)?startX:startX-step; rn rn if(event->key() == Qt::Key_Right)rn rn startX=(startX+step+image.width()>width)?startX:startX+step; rn rn if(event->key() == Qt::Key_Up)rn rn startY=(startY-step<0)?startY:startY-step; rn rn if(event->key() == Qt::Key_Down)rn rn startY=(startY+step+image.height()>height)?startY:startY+step;rn rn if(event->key() == Qt::Key_Home)rn rn startX=0;rn startY=0;rn rn if(event->key() == Qt::Key_End)rn rn startX=width-image.width();rn startY=height-image.height();rn rn rn drawPix();rn update(); rn rnrnvoid KeyboardEventTest1::paintEvent(QPaintEvent *)rnrn QPainter painter(this);rn painter.drawPixmap(QPoint(0,0),*pix);rnrnrn[/code]rnrn问题出现在drawPix()函数中,rn如果QPainter painter(pix);换成QPainter *painter = new QPainter(pix);的话,在屏幕第一次显示的时候,能够显示出正确的界面,但是当用户按ctrl和向左等箭头的时候,屏幕上就什么都不显示。如果使用QPainter painter(pix);就什么问题都没有,都能正常显示,想知道这是什么问题?!rnrn
qt中的IO操作
在Qt里文件被看成一种特殊的外部设备。与外部设备的操作方式相同。qt通过统一的借口来操作文件及外部设备。   操作方式: (1).打开设备:open(); (2).读取数据:  read() (3).写入数据:  write() (4).关闭设备:  close()   qt中IO设备的类型: 顺序存储设备:只能从头到尾开始读取数据,不能指定读写数据的位置 随机存储设备:可以定...
Qt中操作excel
最近有一个把检测结果导出到excel中的任务,由于对qt比较熟悉,所以打算使用qt来实现。查了一下,使用qt下自带的QAxObject类,实现还是比较简单的。 首先需要在pro文件中添加axcontainer QT += core gui axcontainer 然后添加包含文件 #include &lt;QAxObject&gt; 如下是代码的具体实现: void MainWin...
Qt中的打印操作
Qt中对打印的支持是有一个独立的printsupport模块来完成的
Qt中的JSON操作
JSON(JavaScript Object Notation,js对象标记)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,使用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效的提升网络传输效率。关于JSON的更多解释,请参看JSON官网。
Qt中操作Excel
首先在.pro文件中添加CONFIG += qaxcontainer QString filepath=QFileDialog::getSaveFileName(this,tr("Save orbit"),".",tr("Microsoft Office 2007 (*.xlsx)"));//获取保存路径[喝小酒的网摘]http://blog.hehehehehe.cn/a/17194.ht
QT new模态对话框
1. 如果父窗口是new出的,则子窗口如果用堆栈的方式(Dlg dlg;)创建,则会出现QWSLock::up/down(): Invalid argument错误, 这实际上QT4.8的一个Bug,如果不想重新编译Qt的话,可以采用以下方式临时避免一下。 2. 正确的方式是,子窗口也要用new的方式创建,new出的窗口设置为模态需要以下四个步骤: (1)Dlg *dlg = new Dlg...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法