我想弄清楚为什么会出现此错误。我已经看到很多关于相同的问题/答案,但我只是没有看到任何可能导致我的代码出现此错误的原因。
根据我一直在做的研究,这个错误的可能原因是:
1 - 我不止一次删除对象
2 - 卷影复制
3 - 我正在创建和删除从外部 dll 加载的对象
4 - 我正在创建对象而不存储指针
这是我的代码:
TreeView.h
#pragma once
#include <QtWidgets/qapplication.h>
#include <QtWidgets/QTreeView>
#include <QtWidgets/QTreeWidgetItem>
#include <QtWidgets\qfilesystemmodel.h>
#include <QtWidgets/qmainwindow.h>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QDirModel>
#include <QtCore/QDebug>
#include <QtCore\qtimer.h>
#include <iostream>
#include <QtCore\qmap.h>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/qpushbutton.h>
using namespace std;
class Tree: public QTreeView {
Q_OBJECT
public:
QFileSystemModel *model;
QPushButton *button;
Tree(QWidget *parent = 0):QTreeView(parent){
this->resize(200,600);
//create the tree
string directory = "C:\\Users\\Alloisio\\Documents\\Visual Studio 2012\\Projects\\TreeView\\TreeWidget\\Indicators\\Factores";
model = new QFileSystemModel(this);
model->setRootPath( directory.c_str());
this->setModel(model);
this->setRootIndex(model->setRootPath(directory.c_str()));
this->setSelectionMode(QAbstractItemView::ExtendedSelection); //allow multi select with Ctrl
//button
button = new QPushButton(this);
button->setText("Display Selected");
button->move(30,600);
QObject::connect(button, SIGNAL (clicked()), this, SLOT (muitiselect()));
}
public slots:
void muitiselect(){
this->selectionModel()->selectedIndexes();
}
};
源.cpp
#include "TreeView.h"
int main(int argc, char *argv[]){
QApplication app(argc, argv);
Tree *tree = new Tree;
tree->show();
app.exec();
}
这是我发现的。执行函数后立即出现错误:
void muitiselect(){
this->selectionModel()->selectedIndexes();
}
非常感谢任何形式的帮助。提前谢谢你。
最佳答案
您似乎通过动态分配事物并允许 Qt 清理它们来做所有正确的事情;然而,有一个例子你没有这样做,那就是:
QWidget widget;
QHBoxLayout horizontalLayout(&widget);
在这里,当 horizontalLayout
被销毁时,它会销毁 widget
,它也会在其范围结束时尝试销毁自身。尝试:
QWidget* widget = new QWidget();
QHBoxLayout horizontalLayout(widget);
参见 QLayout::addWidget
内部使用 QLayout::addItem
Note: The ownership of item is transferred to the layout, and it's the layout's responsibility to delete it.
关于C++ Qt 表达式 : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30856863/