Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;Qt表达式:_BLOCK_TYPE_有效(pHead->;nBlockUse)错误_C++_Qt_Pointers_Memory Leaks - Fatal编程技术网

C++ c++;Qt表达式:_BLOCK_TYPE_有效(pHead->;nBlockUse)错误

C++ c++;Qt表达式:_BLOCK_TYPE_有效(pHead->;nBlockUse)错误,c++,qt,pointers,memory-leaks,C++,Qt,Pointers,Memory Leaks,我正在试图弄清楚为什么会出现这个错误。我已经看到了许多关于相同的问题/答案,但我只是没有看到任何可能导致我的代码出现此错误的原因 根据我所做的研究,造成这一错误的可能原因是: 1-我多次删除对象 2-卷影复制 3-我正在创建和删除从外部dll加载的对象 4-我创建对象时没有存储指针 这是我的密码: TreeView.h #pragma once #include <QtWidgets/qapplication.h> #include <QtWidgets/QTreeVie

我正在试图弄清楚为什么会出现这个错误。我已经看到了许多关于相同的问题/答案,但我只是没有看到任何可能导致我的代码出现此错误的原因

根据我所做的研究,造成这一错误的可能原因是:

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();
        }
};
这是我发现的。执行该函数后立即出现错误:

void muitiselect(){
    this->selectionModel()->selectedIndexes();
}

我真的很感激任何形式的帮助。提前感谢您。

通过动态分配内容并允许Qt清理它们,您似乎做得很好;但是,有一个例子是您没有这样做,即:

QWidget widget;
QHBoxLayout horizontalLayout(&widget);
在这里,当
水平布局
被销毁时,它会销毁
小部件
,小部件也会在其作用域结束时尝试销毁自身。尝试:

QWidget* widget = new QWidget();
QHBoxLayout horizontalLayout(widget);
查看哪些在内部使用

注意:项目的所有权转移到版面,版面负责将其删除


谢谢你来看看这个问题。我已经检查过了,错误不是从那里来的。我已经找出了错误的来源,我现在正在编辑这个问题。请看一看
QWidget* widget = new QWidget();
QHBoxLayout horizontalLayout(widget);