【问题标题】:QTabWidget not appearingQTabWidget 没有出现
【发布时间】:2025-12-29 02:25:07
【问题描述】:

我在创建 UI 时遇到了一些困难。

我需要什么:

1 个 QTabWidget 和 3 个 QWidget 作为选项卡。其中一个 Widget 包含 QPushButtons、QLineEdits,并且必须包含另一个 QTabWidget。

我的问题:

我在其他 QTabWidget 上成功的地方,这个没有出现。我已手动将 QPushButton 和 QLineEdit 放入 .ui 文件中。现在我想在同一页面上动态创建一个 QTabWidget。

我的页面代码:

namespace Ui
{
class cImageInterface;
} 

class cImageInterface : public QWidget
{
    Q_OBJECT

public:
    cImageInterface();
    ~cImageInterface();

private:
    Ui::cImageInterface* ui;

cAppTabWidget* tabW_Application;
};

构造函数:

cImageInterface::cImageInterface() : ui(new Ui::cImageInterface)
{
  tabW_Application = new cAppTabWidget(this);

  ui->setupUi(this);
}

QTabWidget 代码:

class cAppTabWidget : public QTabWidget
{
    Q_OBJECT

public:
    explicit cAppTabWidget(QWidget* parent);
    ~cAppTabWidget();

protected:

private:
Ui::cAppTabWidget* ui;
cAppInterface* tab_Application;
int m_NbTab;
};

建造者:

cAppTabWidget::cAppTabWidget(QWidget* parent)
                            : ui(new Ui::cAppTabWidget)
                            , tab_Application(new cAppInterface)
                            , m_NbTab(1)
{
  this->setGeometry(0, 230, 800, 360);
  this->addTab(tab_Application, "App5896");
}

cAppInterface 只是一个 QWidget 派生类,在构造函数中只有一个 setupUi。我可以使用show() 看到我的 QTabWidget,但我无法将它放在我的页面中。

谢谢

【问题讨论】:

  • 嗯,是否可以按页进行 2 布局?还是只有一个但有 x、y 等值?因为这不是我想要的:imgur.com/oZ7ASYY 编辑:我认为我很愚蠢,我已经找到了解决方案。如果没问题会更新
  • 它不起作用,我已经将布局放入 .ui 文件,并将 ui->appTabLayout->addWidget(tabW_Application); 放入 cImageInterface 构造函数,它正在编译,但我有一个 core dumped 错误
  • 你在ui->setupUi(this)之前做ui->appTabLayout->addWidget(tabW_Application);吗?在致电setupUi 之前,您无法访问ui 成员。
  • 你摇滚。谢谢。我会尽快接受我自己的答案。

标签: c++ qt qwidget qtabwidget


【解决方案1】:

感谢 thuga 帮助我。

解决方案是在cImageInterface 中放入一个布局,然后将QTabWidget 放入其中。

我在我的代码中创建它时遇到了一个问题,所以我将它放在 .ui 文件中。

<layout class="QVBoxLayout" name="appTabLayout">
<property name="sizeConstraint">
 <enum>QLayout::SetNoConstraint</enum>
</property>

然后你就可以了:

cImageInterface::cImageInterface() : ui(new Ui::cImageInterface)
{
  tabW_Application = new cAppTabWidget(this);

  ui->setupUi(this);

  ui->appTabLayout->addWidget(tabW_Application);
}

【讨论】: