Qt学习笔记-基于QGraphicsScene的填词游戏

583 篇文章 127 订阅
36 篇文章 23 订阅

话不多说,运行截图如下:




代码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtWidgets>
#include <QMessageBox>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    void initWidget();

public slots:
    void btnClicked();

private:
    Ui::Widget *ui;
    QGraphicsRectItem *bkgndRect1;
    QGraphicsRectItem *bkgndRect2;
    QGraphicsRectItem *bkgndRect3;

    QGraphicsSimpleTextItem *text1;
    QGraphicsSimpleTextItem *text2;
    QGraphicsSimpleTextItem *text3;
};

#endif // WIDGET_H


widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    initWidget();
    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));
}

void Widget::initWidget(){

    QGraphicsScene *scene=new QGraphicsScene(0,0,600,300);
    ui->graphicsView->setScene(scene);

    QPen pen(Qt::blue);
    pen.setWidth(2);
    pen.setStyle(Qt::DashLine);

    bkgndRect1=new QGraphicsRectItem(0,0,150,40);
    bkgndRect1->setFlag(QGraphicsItem::ItemIsSelectable,true);
    bkgndRect1->setZValue(0);
    bkgndRect1->setPos(10,10);
    bkgndRect1->setBrush(Qt::gray);
    scene->addItem(bkgndRect1);

    bkgndRect2=new QGraphicsRectItem(0,0,150,40);
    bkgndRect2->setFlag(QGraphicsItem::ItemIsSelectable,true);
    bkgndRect2->setZValue(0);
    bkgndRect2->setPos(210,10);
    bkgndRect2->setBrush(Qt::gray);
    scene->addItem(bkgndRect2);

    bkgndRect3=new QGraphicsRectItem(0,0,150,40);
    bkgndRect3->setFlag(QGraphicsItem::ItemIsSelectable,true);
    bkgndRect3->setZValue(0);
    bkgndRect3->setPos(410,10);
    bkgndRect3->setBrush(Qt::gray);
    scene->addItem(bkgndRect3);


    text1=new QGraphicsSimpleTextItem("HOW");
    text1->setFlag(QGraphicsItem::ItemIsMovable,true);
    text1->setFlag(QGraphicsItem::ItemIsSelectable,true);
    text1->setZValue(1);
    text1->setPos(20,150);

    text2=new QGraphicsSimpleTextItem("AER");
    text2->setFlag(QGraphicsItem::ItemIsMovable,true);
    text2->setFlag(QGraphicsItem::ItemIsSelectable,true);
    text2->setZValue(1);
    text2->setPos(15,260);

    text3=new QGraphicsSimpleTextItem("YOU");
    text3->setFlag(QGraphicsItem::ItemIsMovable,true);
    text3->setFlag(QGraphicsItem::ItemIsSelectable,true);
    text3->setZValue(1);
    text3->setPos(100,195);

    QFont font;
    font.setPixelSize(32);
    text1->setFont(font);
    text2->setFont(font);
    text3->setFont(font);
    QPen textPen(Qt::blue);
    text1->setPen(textPen);
    text2->setPen(textPen);
    text3->setPen(textPen);
    scene->addItem(text1);
    scene->addItem(text2);
    scene->addItem(text3);
}

void Widget::btnClicked(){
    int posDistance1_x=(int)text1->pos().rx()-(int)bkgndRect1->pos().rx();
    int posDistance1_y=(int)text1->pos().ry()-(int)bkgndRect1->pos().ry();

    int posDistance2_x=(int)text2->pos().rx()-(int)bkgndRect2->pos().rx();
    int posDistance2_y=(int)text2->pos().ry()-(int)bkgndRect2->pos().ry();

    int posDistance3_x=(int)text3->pos().rx()-(int)bkgndRect3->pos().rx();
    int posDistance3_y=(int)text3->pos().ry()-(int)bkgndRect3->pos().ry();

    qDebug()<<"posDistance1_x"<<posDistance1_x<<" posDistance1_y"<<posDistance1_y;
    if(-10<posDistance1_x&&posDistance1_x<110&&-10<posDistance1_y&&posDistance1_y<16
       &&-10<posDistance2_x&&posDistance2_x<110&&-10<posDistance2_y&&posDistance2_y<16
       &&-10<posDistance3_x&&posDistance3_x<110&&-10<posDistance3_y&&posDistance3_y<16){
        QMessageBox::information(this,tr("正确"),tr("答案为 How are you"));
        return;
    }

    QMessageBox::critical(this,tr("错误"),tr("答案错误!"));

}

Widget::~Widget()
{
    delete ui;
}


main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值