Qt - 如何在两个QVBoxLayouts之间更改QPushButton

时间:2012-05-25 20:09:26

标签: c++ qt layout qt-creator

所以我有一个名为'vboxmain'的主要布局。该计划有两种状态:二十一点和扑克。对于我都有一个按钮。在这个vboxmain中,我有一个上半部分,它覆盖了大部分程序,并且两个游戏都是相同的,但我也有一个底部应该为两个游戏显示不同的部分。例如,扑克游戏应该拥有五个QCheckBox和一个按钮。至于二十一点游戏我只需要两个按钮。我创建了这两个底部布局作为QVBoxLayouts。所以现在我有:

BlackjackiValikud = new QVBoxLayout; //for blackjack
Pokkerivalikud = new QVBoxLayout;  //for poker

我尝试创建两个按钮操作:

void mainwindow::BlackJack_clicked(){
    vboxmain->removeItem(Pokkerivalikud);
    vboxmain->addItem(BlackjackiValikud);
}

void mainwindow::Poker_clicked(){
    vboxmain->removeItem(BlackjackiValikud);
    vboxmain->addItem(Pokkerivalikud);
}

按钮连接如下:

connect(BlackjackButton, SIGNAL(clicked()), this, SLOT(BlackJack_clicked()));
connect(PokerButton, SIGNAL(clicked()), this, SLOT(Poker_clicked()));

但是目前它没有用,我无法想办法做到这一点,所以我正在寻求帮助。这可能不是最好的方法,但我不知道其他任何方式。所以我可以使用一些帮助来解决如何使用任何解决方案 - 这样使用两个按钮我可以根据需要更改我的vboxmain的底部。

我愿意接受解决方案。

2 个答案:

答案 0 :(得分:3)

你的意思是什么不起作用?

您必须确保在添加布局时(通过QLayout::setEnabled ( bool enable))启用布局,或者该窗口小部件可见(通过QWidget::show())。一般情况下,您必须制作可见的项目,这些项目会添加到已经可见的小部件中......

另一种方法是使用QStackedLayout来显示。您有扑克视图的小部件poker和黑杰克视图的小部件blackjack。按下按钮,您可以使用

void QStackedLayout::setCurrentIndex ( int index )
void QStackedLayout::setCurrentWidget ( QWidget * widget )

答案 1 :(得分:0)

您可能希望保留布局并更改底部布局中显示的内容。为此,请为从QWidget派生的每个游戏(比如blakjackWidget和pokerWidget)创建类。并在底部布局中只显示其中一个。