gpt4 book ai didi

c++ - QTabWidget 带有动态变化的小部件

转载 作者:行者123 更新时间:2023-11-28 03:14:55 26 4
gpt4 key购买 nike

我正在使用 QTabWidget(由 AbstractManagerTab 组成的 pHTab)来显示一些数据(IpTrafficPage 和 SpecTrafficPage 小部件),我需要将 QPushButtons 动态添加到添加的选项卡。

当我启动应用程序时,添加的按钮仅在最后一个选项卡上可见。有什么问题吗?

class AbstractTrafficPage : public QWidget
{
Q_OBJECT
public:
explicit AbstractTrafficPage(QWidget *parent = 0);
void addCommandButton(QWidget *btn);
private:
QVBoxLayout *commBtnsLayout;
};

AbstractTrafficPage::AbstractTrafficPage(QWidget *parent) :
QWidget(parent),
commBtnsLayout(new QVBoxLayout)
{
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(commBtnsLayout);
mainLayout->addStretch();

setLayout(mainLayout);
}

void AbstractTrafficPage::addCommandButton(QWidget *btn)
{
commBtnsLayout->addWidget(btn);
}

class IpTrafficPage : public AbstractTrafficPage
{
Q_OBJECT
public:
explicit IpTrafficPage(QWidget *parent = 0) : AbstractTrafficPage(parent) {};
};

class SpecTrafficPage : public AbstractTrafficPage
{
Q_OBJECT
public:
explicit SpecTrafficPage(QWidget *parent = 0) : AbstractTrafficPage(parent) {};
};

class AbstractManagerTab : public QWidget {
public:
AbstractManagerTab(QWidget *parent);
~AbstractManagerTab();
void addCommandButton(QWidget *btn);
private:
QTabWidget *pHTab;
}

AbstractManagerTab::AbstractManagerTab(QWidget *parent) :
QWidget(parent),
pHTab(new QTabWidget)
{
IpTrafficPage *ipPage = new IpTrafficPage(this);
pHTab->addTab(ipPage, tr("IP);
SpecTrafficPage *specPage = new SpecTrafficPage(this);
pHTab->addTab(specPage, tr("Spec"));

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(pHTab);
setLayout(mainLayout);
}

AbstractManagerTab::~AbstractManagerTab()
{
delete pHTab;
}

AbstractManagerTab::addCommandButton(QWidget *btn)
{
for (int index = 0; index < pHTab->count(); ++index) {
AbstractTrafficPage *page = dynamic_cast<AbstractTrafficPage *>
(pHTab->widget(index));
if (page)
page->addCommandButton(btn);
}
}

class StoredRecsTab : public AbstractManagerTab
{
Q_OBJECT
public:
explicit StoredRecsTab(QWidget *parent = 0);
};

StoredRecsTab::StoredRecsTab(QWidget *parent) :
AbstractManagerTab(parent)
{
QPushButton *createRecBtn = new QPushButton(tr("Create"), this);
QPushButton *removeRecBtn = new QPushButton(tr("Remove"), this);

addCommandButton(createRecBtn);
addCommandButton(removeRecBtn);
}

最佳答案

任何 QWidget 只能有一个父级。如果要向许多小部件添加一个按钮,则需要创建许多按钮对象(每个选项卡一个)。

另一种选择是在选项卡更改时将按钮移动到可见选项卡。但我认为这不是一个很好的决定。

关于c++ - QTabWidget 带有动态变化的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com