Qt - 如何使 QPushButton 在两个 QVBoxLayout 之间切换

Qt - how to make QPushButton change between two QVBoxLayouts

本文关键字:两个 QVBoxLayout 之间 何使 QPushButton Qt      更新时间:2023-10-16

所以我有一个叫做'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 的底部。

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

你的意思是它不起作用?

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

另一种方法是使用 QStackedLayout 来显示其中之一。您有一个用于扑克视图的小部件poker和一个用于二十一点视图的小部件blackjack。按下按钮时,您可以使用任一

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

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