带有动态变化小部件的 QTabWidget
Posted
技术标签:
【中文标题】带有动态变化小部件的 QTabWidget【英文标题】:QTabWidget with dynamic change widgets 【发布时间】:2013-06-20 15:16:00 【问题描述】:我正在使用 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);
【问题讨论】:
【参考方案1】:任何 QWidget 只能有一个父级。如果要将按钮添加到许多小部件,则需要创建许多按钮对象(每个选项卡一个)。
另一个选项是在标签更改时将按钮移动到可见标签。但我认为这不是一个好的决定。
【讨论】:
+1 推荐另一个让我发笑的选项:-P 确实,我不会推荐它... 非常感谢。我将不得不重新考虑架构。以上是关于带有动态变化小部件的 QTabWidget的主要内容,如果未能解决你的问题,请参考以下文章