void MainInterface::CutCardPic(int x,int y,card c) { QPixmap pic = m_AllCardsPic.copy(x,y,card_width,card_height); CardPicture* cardpic = new CardPicture(this); cardpic->hide(); //暂时隐藏 cardpic->setPic(pic); cardpic->setCard(c); m_Cards.insert(c,cardpic); //插入QMap中 connect(cardpic,SIGNAL(TellSelected()),this,SLOT(CardSelected())); }
void PowerPlantModeWidget::Refresh() { // Reset selected card selectedCard = nullptr; // Load power plant cards auto marketCards = Game::getInstance().GetCardStack().GetVisibleCards(); // Clear old components while(cards.size() > 0) { gridLayout->removeWidget(cards[0]); delete cards[0]; cards.erase(cards.begin()); } // Dummy cards for (int i = 0; i < marketCards.size(); i++) { QPushButton *card = new QPushButton(); card->setObjectName("powerPlantCardButton"); card->setIcon(QIcon(marketCards[i]->GetImagePath().c_str())); card->setIconSize(QSize(200, 200)); cards.push_back(card); // Fade the future market if (i >= Game::getInstance().GetCardStack().futureMarketIndex) { QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(this); effect->setOpacity(0.25); card->setGraphicsEffect(effect); } else if (Game::getInstance().GetStep() == 2 && Game::getInstance().GetNowBidding() && Game::getInstance().GetPlantIndex() != i) { QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(this); effect->setOpacity(0.55); cards[i]->setGraphicsEffect(effect); } // Only first row if (i < Game::getInstance().GetCardStack().futureMarketIndex) { // If step 2 if (Game::getInstance().GetStep() == 2 && !Game::getInstance().GetNowBidding()) { // Connect connect(cards[i], &QPushButton::clicked, [=]() { qDebug(string("Card " + std::to_string(i) + " clicked!").c_str()); // Make all other cards faded for (int j = 0; j < Game::getInstance().GetCardStack().futureMarketIndex; j++) { QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(this); if(cards[j] != cards[i]) effect->setOpacity(0.55); else effect->setOpacity(1); cards[j]->setGraphicsEffect(effect); } selectedCard = cards[i]; selectedCard->repaint(); emit CardSelected(i); }); } } } // Add components for (int i = 0; i < cards.size(); i++) { gridLayout->addWidget(cards[i], i / per_row, i%per_row, Qt::AlignCenter); } }