2012-05-15 2 views
3

Я хотел сделать окно и добавить QTabWidgets с виджетами, которые я ему хочу. Поэтому я следовал примеру Qt TabDialog и из того, что знаю, я придерживался того же пути, что и в примере. Проблема в том, что я получаю эту ошибку при попытке добавить мои виджеты в качестве вкладок: «/home/user/Programming/C++/QtTests/TabExample/TabExample-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Release/../TabExample/tabwidget.cpp:20: ошибка : нет соответствующей функции для вызова в 'QTabWidget :: addTab (Tab_One *, QString * &)' ". Почему я получаю эту ошибку, потому что Tab_One наследуется от QWidget? Вот мой основной код виджета:Ошибка при попытке добавить виджеты в QTabWidget

Заголовочный файл:

#ifndef TABWIDGET_H 
#define TABWIDGET_H 

#include <QWidget> 

class QTabWidget; 
class Tab_One; 
class Tab_Two; 
class QString; 
class QHBoxLayout; 
class QDialog; 

class TabDialog : public QDialog { 
    Tab_One *firstTab; 
    Tab_Two *secondTab; 
    QTabWidget *myTabWidget; 
    QString *labelTabOne; 
    QString *labelTabTwo; 
    QHBoxLayout *layout; 
public: 
    TabDialog(QWidget *parent = NULL); 
}; 

#endif // TABWIDGET_H 

и исходный файл:

#include <QWidget> 
#include <QDialog> 
#include <QTabWidget> 
#include <QHBoxLayout> 
#include <QString> 

#include "tabwidget.h" 
#include "tab1.h" 
#include "tab2.h" 

TabDialog::TabDialog(QWidget *parent) : QDialog(parent) 
{ 
    layout = new QHBoxLayout; 

    labelTabOne = new QString("My First Tab"); 
    labelTabTwo = new QString("My Second Tab"); 

    myTabWidget = new QTabWidget; 

    firstTab = new Tab_One; 
    secondTab = new Tab_Two; 

    myTabWidget->addTab(firstTab, labelTabOne); 
    myTabWidget->addTab(secondTab, labelTabTwo); 

    layout->addWidget(myTabWidget); 
    setLayout(layout); 
} 

и вот один из моих widets (Tab1): Заголовок:

#ifndef TAB1_H 
#define TAB1_H 

#include <QWidget> 
class QVBoxLayout; 
class QPushButton; 

class Tab_One : public QWidget { 
    QPushButton *button_one; 
    QPushButton *button_two; 
    QVBoxLayout *layout; 

public: 
    Tab_One(QWidget *parent = NULL); 
}; 

#endif // TAB1_H 

и источник:

#include <QWidget> 
#include <QDialog> 
#include <QTabWidget> 
#include <QHBoxLayout> 
#include <QString> 

#include "tabwidget.h" 
#include "tab1.h" 
#include "tab2.h" 

TabDialog::TabDialog(QWidget *parent) : QDialog(parent) 
{ 
    layout = new QHBoxLayout; 

    labelTabOne = new QString("My First Tab"); 
    labelTabTwo = new QString("My Second Tab"); 

    myTabWidget = new QTabWidget; 

    myTabWidget->addTab(new Tab_One(this), labelTabOne); 
    myTabWidget->addTab(new Tab_Two(this), labelTabTwo); 

    layout->addWidget(myTabWidget); 
    setLayout(layout); 
} 

Большое спасибо и извините за длинный пост

ответ

5

Проблема не вкладка, но QString. QTabWidget::addTab() ожидает ссылки const на QString, но вы даете ей указатель на QString. Попробуйте с помощью оператора разыменования (*), как это:

myTabWidget->addTab(firstTab, *labelTabOne); 
myTabWidget->addTab(secondTab, *labelTabTwo); 
+1

Бог, я не могу поверить в это ... спасибо большое! –

 Смежные вопросы

  • Нет связанных вопросов^_^