3

ウィンドウを作成し、必要なウィジェットを使用してQTabWidgetsを追加したいと思いました。そこで、Qt TabDialogの例に従い、私が知っていることから、例と同じパスをたどりました。問題は、ウィジェットをタブとして追加しようとすると、次のエラーが発生することです。 'QTabWidget :: addTab(Tab_One *、QString *&)'"を呼び出すための一致する関数がありません。Tab_OneがQWidgetから継承されているため、なぜこのエラーが発生するのですか?これが私のメインウィジェットコードです:

ヘッダーファイル:

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

そして、これが私のワイド(tab1)の1つです:ヘッダー:

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

長い投稿をありがとうございました

4

1 に答える 1

5

問題はタブではなく、QStringです。QTabWidget::addTab()QStringへのconst参照が必要ですが、QStringへのポインターを指定しています。次のように、間接参照演算子(*)を使用してみてください。

myTabWidget->addTab(firstTab, *labelTabOne);
myTabWidget->addTab(secondTab, *labelTabTwo);
于 2012-05-15T22:38:10.413 に答える