簡體   English   中英

c ++ Qt表達式:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)錯誤

[英]c++ Qt Expression : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) error

我試圖弄清楚為什么會出現此錯誤。 我已經看到了很多與此有關的問題/答案,但是我只是看不到任何可能導致我的代碼出現此錯誤的原因。

根據我一直在進行的研究,導致此錯誤的可能原因是:

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();
        }
};

Source.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::addItem QLayout::addWidget

注意:項目的所有權已轉移到布局,並且布局的責任是刪除它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM