尝试将小部件添加到 QTabWidget 时出错

Posted

技术标签:

【中文标题】尝试将小部件添加到 QTabWidget 时出错【英文标题】:Error trying to add widgets to QTabWidget 【发布时间】:2012-05-15 22:31:42 【问题描述】:

我想制作一个窗口并添加一个带有我想要的小部件的 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 继承的?这是我的主要小部件代码:

头文件:

#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): 标题:

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

非常感谢,很抱歉发了这么长的帖子

【问题讨论】:

【参考方案1】:

问题不在于您的标签,而在于 QString。 QTabWidget::addTab() 期望一个对 QString 的 const 引用,但你给它一个指向 QString 的指针。尝试使用取消引用运算符 (*),如下所示:

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

【讨论】:

以上是关于尝试将小部件添加到 QTabWidget 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将小部件添加到滚动区域会导致它们堆叠在一起

无法动态地将小部件添加到 QScrollArea 对象

带有动态变化小部件的 QTabWidget

Qt将小部件添加到GraphicsView?

将小部件添加到地图会破坏 GWT 中的其他小部件

更改通知提供程序以将小部件添加到收藏屏幕