1

だから私は「vboxmain」と呼ばれるメインレイアウトを持っています。そして、プログラムにはブラックジャックとポーカーの2つの状態があります。両方にボタンがあります。このvboxmainには、プログラムの大部分をカバーする上部があり、両方のゲームで同じですが、両方のゲームで異なる部分を表示する下部もあります。たとえば、ポーカーゲームは5つのQCheckBoxと1つのボタンを保持する必要があります。ブラックジャックゲームに関しては、2つのボタンが必要です。これらの下部レイアウトの両方をQVBoxLayoutsとして作成しました。だから今私は持っています:

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

そして、次のような2つのボタンアクションを作成してみました。

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

レイアウトを保持し、下部のレイアウトに表示されるものを変更することをお勧めします。これを行うには、QWidgetから派生した各ゲーム(たとえば、blakjackWidgetやpokerWidget)のクラスを作成します。一番下のレイアウトにそれらの1つだけを表示します。

于 2012-05-25T20:21:44.690 に答える