2016-06-17 4 views
0

Я новичок в Qt и C++. Я хочу реализовать вектор с использованием класса Item. Я думаю, что я делаю ошибку начинающих. Я получаю ошибку ниже. Кто-то может помочь?Qt создает класс и использует его в векторе

C: \ Qt \ Qt5.6.1 \ 5,6 \ msvc2015_64 \ включать \ QtCore \ qvector.h: 631: ошибка: C2280: 'Пункт :: Item (Const Пункт &)': попытка сослаться на удаленную функцию

Ниже мой mainwindow.cpp:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QVector> 
#include <QtCore> 
#include <QtGui> 
#include <QMessageBox> 
MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

} 
void MainWindow::AddRoot(QString item) 
{ 
    QTreeWidgetItem *itm = new QTreeWidgetItem(ui->treeWidget); 
    itm->setText(0,item); 
    ui->treeWidget->addTopLevelItem(itm); 
} 

void MainWindow::AddChild(QTreeWidgetItem *parent,QString item) 
{ 

} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_pushButton_clicked() 
{ 

    Item item; 

    item.setDescription(ui->lineEdit->text()); 
    data.push_back(item); 
    ui->treeWidget->setColumnCount(1); 
    AddRoot(item.getDescription()); 
} 

И мой класс item.cpp

#include "item.h" 
#include <QtCore> 
#include <QtGui> 
Item::Item() 
{ 

} 
void Item::setDescription(QString desc) 
{ 
    Description = desc; 
} 
void Item::setEnterDate(QDateTime enterDate) 
{ 
    EnterDate = enterDate; 
} 

void Item::setEndDate(QDateTime endDate) 
{ 
    EndDate = endDate; 
} 

QString Item::getDescription() 
{ 
    return Description; 
} 

QDateTime Item::getEnterDate() 
{ 
    return EnterDate; 
} 

QDateTime Item::getEndDate() 
{ 
    return EndDate; 
} 
#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <item.h> 
#include <QtGui> 
#include <QtCore> 
#include <QTreeWidget> 

mainwindow.h:

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
    QVector<Item> data; 
    void AddRoot(QString item); 
    void AddChild(QTreeWidgetItem *parent,QString item); 

private slots: 
    void on_pushButton_clicked(); 

private: 
    Ui::MainWindow *ui; 
}; 

#endif // MAINWINDOW_H 

item.h:

#ifndef ITEM_H 
#define ITEM_H 

#include <QtCore> 
#include <QtGui> 
class Item : public QObject 
{ 
    Q_OBJECT 

public: 
    explicit Item(QObject *parent = 0); 

    QString Description; 
    QDateTime EnterDate; 
    QDateTime EndDate; 

    QString getDescription(); 
    QDateTime getEnterDate(); 
    QDateTime getEndDate(); 

    void setDescription(QString desc); 
    void setEnterDate(QDateTime enterDate); 
    void setEndDate(QDateTime endDate); 
}; 

#endif // ITEM_H 
+0

Можете ли вы разместить заголовки? –

+0

Я добавил заголовки. – svgexca

ответ

2

Item является QObject. QObject s знают, что у вас нет конструктора копирования. Чтобы использовать QVector, элемент должен иметь конструктор копирования. Любое изменение Item не должно быть QObject или использовать QSharedPointer (, но только если вы понимаете право собственности).

+1

Разумеется, вы можете иметь подкатегорию 'QObject' для копирования ', см., Например, [этот вопрос] (http://stackoverflow.com/q/25890802/1329652). –

+0

@KubaOber Что, я не знал. Спасибо. –

+0

Благодарим вас обоих, изменив пункт, чтобы не быть QObject, решил мою проблему. – svgexca