2012-05-06 81 views
0

它應該很容易,但有些東西不起作用,我找不到問題。調用子類化的方法QWidget

我有兩個類,象下面這樣:

1)individualtab

#ifndef INDIVIDUALTAB_H 
#define INDIVIDUALTAB_H 

#include <QMainWindow> 
#include <QInputDialog> 
#include <QTableWidget> 
#include <QVBoxLayout> 
#include <QLabel> 

class IndividualTab : public QWidget 
{ 
    Q_OBJECT 

public: 
    IndividualTab(QWidget *parent = 0); 
    QTableWidget *table; 
    QVBoxLayout *layout; 

}; 
#endif // INDIVIDUALTAB_H 


IndividualTab::IndividualTab(QWidget *parent) : QWidget() 
{ 
    table = new QTableWidget(0,4); 
    layout = new QVBoxLayout(); 
} 

2)二等

#ifndef SECONDCLASS_H 
#define SECONDCLASS_H 

#include "individualtab.h" 

class secondClass : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit secondClass(QWidget *parent = 0); 
    Ui::secondClass *ui; 
    ~secondClass(); 

    QList<IndividualTab> *individualTabList; 
}; 
#endif // SECONDCLASS_H 


secondClass::secondClass(QWidget *parent) : QMainWindow(parent), ui(new Ui::secondClass) 
{ 
    ui->setupUi(this); 
} 


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

void secondClass::addNewItem() 
{ 
    //Getting parameters 
    QList<QString> parameters; 
    //creating QList 

    //Updating individualTab 
    for(int i = 0; i < ui->tabWidget->count(); i++) 
    { 
     if(parameters.at(0) == ui->tabWidget->tabText(i)) 
     { 
      IndividualTab tab = individualTabList->at(i); 
      tab.addItem(parameters); 
      break; 
     } 
} 
} 

我編譯時有這樣的錯誤:

In file included from ../secondclass.h:5:0, 
       from ../secondclass.cpp:1: 
/usr/include/qt4/QtGui/qwidget.h: In copy constructor 'IndividualTab::IndividualTab(const IndividualTab&)': 
/usr/include/qt4/QtGui/qwidget.h:806:5: error: 'QWidget::QWidget(const QWidget&)' is private 
../individualtab.h:10:7: error: within this context 
../secondclass.cpp: In member function 'void SecondClass::addNewItem()': 
../secondclass.cpp:142:56: note: synthesized method 'IndividualTab::IndividualTab(const IndividualTab&)' first required here 

我想到了問題是IndividualTab tab = individualTabList->at(i); 所以我

IndividualTab *tab = new IndividualTab(); 
tab = individualTabList->at(i); 

改變,但是在這種情況下,我有這個錯誤:

../secondclass.cpp: In member function 'void SecondClass::addNewItem()': 
../secondclass.cpp:143:42: error: cannot convert 'const IndividualTab' to 'IndividualTab*' in assignment 
../secondclass.cpp:144:17: error: request for member 'addItem' in 'tab', which is of non-class type 'IndividualTab*' 
In file included from ../secondclass.h:5:0, 
       from ../secondclass.cpp:1: 
/usr/include/qt4/QtGui/qwidget.h: In copy constructor 'IndividualTab::IndividualTab(const IndividualTab&)': 
../individualtab.h:10:7: instantiated from 'void QList<T>::node_construct(QList<T>::Node*, const T&) [with T = IndividualTab]' 
/usr/include/qt4/QtCore/qlist.h:512:13: instantiated from 'void QList<T>::append(const T&) [with T = IndividualTab]' 
../Ripetizioni/secondclass.cpp:112:38: instantiated from here 
/usr/include/qt4/QtGui/qwidget.h:806:5: error: 'QWidget::QWidget(const QWidget&)' is private 
../individualtab.h:10:7: error: within this context 
In file included from /usr/include/qt4/QtCore/qobject.h:50:0, 
       from /usr/include/qt4/QtGui/qwidget.h:46, 
       from /usr/include/qt4/QtGui/qmainwindow.h:45, 
       from /usr/include/qt4/QtGui/QMainWindow:1, 
       from ../secondclass.h:4, 
       from ../secondclass.cpp:1: 
/usr/include/qt4/QtCore/qlist.h: In member function 'void QList<T>::node_construct(QList<T>::Node*, const T&) [with T = IndividualTab]': 
/usr/include/qt4/QtCore/qlist.h:372:58: note: synthesized method 'IndividualTab::IndividualTab(const IndividualTab&)' first required here 

在此先感謝!

回答

3

QWidget s不意味着被複制。您的individualTabList應該是指向容器的指針 - IndividualTab。這個成員本身沒有什麼好的理由成爲一個指針。聲明更改爲:

QList<IndividualTab*> individualTabList; 

然後,您可以:

IndividualTab *tab = individualTabList.at(i); 
+0

它的工作原理!非常感謝! – Daniele

+0

@Daniele如果此答案解決您的問題,請接受它(綠色勾號) –