windows程序设计2017考试题02——编程题目二(被选中的单元格)

在窗口的正中央绘制一个6*6的单元格的方阵,其中:(1)每个单元格的宽和高分别为50,边线为黑色,内部用蓝色填充;(2)用户在单元格方阵内点击鼠标时,被点击单元格的填充色变为红色,用户连续点击单元格内的不同的单元格,只有当前被点击的单元格的填充色为红色,其它单元格的填充色依然为蓝色。

              

图(a)程序启动后的界面                              图(b)用户点击的单元格变色示意

                                            图2 计算单元对话框

提示:

  1. 重载paintEvent函数用于绘图;重载mousePressEvent函数用于响应鼠标消息;
  2. 使用QPainter类的对象绘图,用setBrush函数设置画刷颜色,用setPen用于设置画笔的颜色,用drawRect函数绘制单元格;
  3. 调用update函数迫使窗口重绘。

 

1.Mainwindow.cpp 


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<qpainter.h>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::setFixedSize ( int w, int h  )
{
    setFixedSize(400,400);
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    // 设置画笔颜色
    painter.setPen(QColor(0,0,0));

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);
    // 设置画笔颜色、宽度
    // 设置画刷颜色
    painter.setBrush(QColor(Qt::blue));

    for(int i=0;i<6;i++)
    {
        for(int j=0;j<6;j++)
        {
             painter.drawRect(50+j*50, 50+i*50, 50, 50);
        }
    }
    painter.setPen(QColor(0,0,0));
    painter.setBrush(QColor(255, 0, 0));
    int xx=(x-50)/50+1;
    int yy=(y-50)/50+1;
    painter.drawRect(xx*50, yy*50, 50, 50);
}
void MainWindow::mousePressEvent(QMouseEvent *e)
{
     x=e->x();
     y=e->y();
    update();
}

 2.MainWindow.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QMouseEvent>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    void paintEvent(QPaintEvent *event);
    void mousePressEvent(QMouseEvent *e);
    void setFixedSize(int w, int h);
    int x;
    int y;
};

#endif // MAINWINDOW_H


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值