1. 程式人生 > 其它 >QT翻金幣遊戲的choosesence場景的配置

QT翻金幣遊戲的choosesence場景的配置

技術標籤:QT學習筆記

目錄~

設計這個介面,其實也不難。


設定標題,圖示,尺寸

首先新建類,就叫 c h o o s e s e n c e choosesence choosesence

上來先設定一下標題,圖示和視窗大小

    this->setFixedSize(QSize(520,688));
    this->setWindowIcon(QPixmap(":/res/Coin0001.png"));
    this->setWindowTitle("選擇關卡"
);

設定選單退出

然後設定一下選單的退出選項

按照 Q M e n u B a r − Q M e n u − Q A c t i o n QMenuBar-QMenu-QAction QMenuBarQMenuQAction的層級關係一個一個設定下來

最後用 c o n n e c t connect connect給退出 a c t i o n action action繫結事件,觸發時讓當前視窗關閉

    //下面是設定選單
    QMenuBar *Men = new QMenuBar();
    this->setMenuBar(Men);
    QMenu *option =
Men->addMenu(QString("開始")); QAction *exit = option->addAction(QString("退出")); connect(exit,&QAction::triggered,[=](){ this->close(); });

設定視窗背景

然後設定一下視窗的背景

還是一樣重寫 p a i n t E v e n t paintEvent paintEvent方法

void Choosescence::paintEvent(QPaintEvent *
) { QPainter painter(this); QPixmap map; map.load(":/res/OtherSceneBg.png"); painter.drawPixmap(0,0,this->width(),this->height(),map); map.load(":/res/Title.png"); painter.drawPixmap( (this->width()-map.width())*0.5,30,map); }

設定20個選關按鈕

最後來到了我們的核心,中間的 20 20 20個選關按鈕

但是這是不規則按鈕??沒關係,我們寫好了自己的不規則按鈕類按鈕類

那麼我們直接 f o r for for迴圈 20 20 20次,計算當前按鈕屬於第幾行第幾列

然後移動到相應的位置即可

但是按鈕中間還有一個數字表示關卡號

加入直接用按鈕的 s e t T e x t setText setText方法太醜了(因為按鈕不規則導致的)

沒關係,我們用 l a b e l label label設定數字,然後移動到相同座標就可以啦!!!

但是這樣發現點選按鈕沒反應了!!原因是 l a b e l label label直接擋住了按鈕

我們還需要設定 l a b e l label label的屬性,滑鼠穿透性

 label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文字的居中表示
 //設定滑鼠進行穿透
 label->setAttribute(Qt::WA_TransparentForMouseEvents);//滑鼠穿透
    //設定4*5個按鈕
    int x = 0,y = 0;
    //監聽每個按鈕的點選事件
    for(int i=0;i<20;i++)
    {
        MyPushButton *circle = new MyPushButton(":/res/LevelIcon.png");//新建按鈕
        circle->setParent(this);//繫結父親
        x = 70+i%4*100, y = 144+i/4*100;//計算座標
        circle->move(x,y);
        connect(circle,&MyPushButton::clicked,[=](){//觸發按鈕開啟遊戲
            qDebug() << QString("你選擇了第%1關").arg(i+1) ;
            this->hide();
            play = new playScence(i+1);
            play->show();
        });

        QLabel *label = new QLabel;
        label->setParent(this);
        label->setFixedSize(circle->width(),circle->height());
        label->setText(QString::number(i+1) );
        label->move(x,y);
        label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        //設定滑鼠進行穿透
        label->setAttribute(Qt::WA_TransparentForMouseEvents);
    }

這樣就大功告成啦!!!