1

所以我有一个名为“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 的底部。

我对解决方案持开放态度。

4

2 回答 2

3

你说它不起作用是什么意思?

您必须确保在添加布局时启用布局(通过QLayout::setEnabled ( bool enable))或小部件可见(通过QWidget::show())。通常,您必须使添加到已经可见的小部件中的可见项目...

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

void QStackedLayout::setCurrentIndex ( int index )
void QStackedLayout::setCurrentWidget ( QWidget * widget )
于 2012-05-25T20:25:10.507 回答
0

You may want to keep the layouts and change what's presented in the bottom layout. To do so, create classes for each game(say blakjackWidget and pokerWidget) derived from QWidget. and show only one of them in the bottom layout.

于 2012-05-25T20:21:44.690 回答