首页 > 其他分享 >使用QT QPainter画一面彩色墙

使用QT QPainter画一面彩色墙

时间:2023-09-09 10:32:10浏览次数:42  
标签:pixmap QT BrickWidth int 彩色 color QPainter painter BrickHeight

使用QT QPainter画一面彩色墙

效果

使用QT QPainter画一面彩色墙_QPainter

定义一个颜色表

static const QRgb colorTable[8] = {
    0xFFA500, 0xCC6666, 0x66CC66, 0x6666CC,
    0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00
};

定义砖块宽度高度

private:     
    Ui::RainbowWidget *ui;    
    enum { BrickWidth =80, BrickHeight = 40 };
    int col() { return contentsRect().width() / BrickWidth +1 ; }
    int row() { return contentsRect().height() / BrickHeight +1; }     
    void  drawBrick(QPainter &painter, int x, int y, int colorIndex);


画砖块形状

void RainbowWidget::drawBrick(QPainter &painter, int x, int y, int colorIndex)
{
    QColor color = colorTable[colorIndex];
    painter.fillRect(x + 1, y + 1,BrickWidth - 2, BrickHeight - 2,
                     color);
    painter.setPen(color.light());
    painter.drawLine(x, y + BrickHeight - 1, x, y);
    painter.drawLine(x, y, x +BrickWidth - 1, y);

    painter.setPen(color.dark());
    painter.drawLine(x + 1, y + BrickHeight - 1,
                     x + BrickWidth - 1, y + BrickHeight - 1);
    painter.drawLine(x + BrickWidth - 1, y + BrickHeight- 1,
                     x + BrickWidth - 1, y + 1);
}

使用图片加载为窗口背景

RainbowWidget::RainbowWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::RainbowWidget)
{
    ui->setupUi(this);
    QRect rect = contentsRect();
    QPixmap pixmap(rect.width() ,rect.height());
    QPainter painter(&pixmap); 
    QColor color=RGB(100,0,0);
    painter.fillRect(pixmap.rect(), color);
     //painter.fillRect(rect, color);
    for (int i = 0; i < row(); ++i) {
       // int spacing=(qrand() % 33 + 1) ;
        for (int j = 0; j < col(); ++j) {
            int colorIndex=qrand() % 7 + 1;
            if (i%2 !=0){
                drawBrick(painter,   j * BrickWidth, i * BrickHeight, colorIndex);
            }else{
                drawBrick(painter,   j * BrickWidth-(BrickWidth/2 ) , i * BrickHeight, colorIndex);
                // drawBrick(painter,   j * BrickWidth-50 , i * BrickHeight, shape1);
               // drawBrick(painter,   j * BrickWidth-spacing , i * BrickHeight, shape1);
            }
        }
    }

    //pixmap.save("wall.png");
    //背景
    QPalette palette = this->palette();
    palette.setBrush(QPalette::Window,QBrush(pixmap));
    this->setPalette(palette);
}

在这里我们可以学习到如何将图画到QPixmap上,并可以将QPixmap存为文件,这个加载背景的方式不像使用paintEvent会在窗口变化时动态刷新,应该会比paintEvent损耗资源少一些

知道在不使用paintEvent的情况下如何画图并QWidget上显示出来

在使用QT绘图QPainter对象时,发现QT在窗口QWidget画图大部分例子都是在paintEvent上进行的,如果要在别的地方画,在一个Label上画该如何做呢?

这先画到QPixmap,再以背景形式加载也是一个变通方式

QLabel *lb=ui->label;
lb->setPixmap(pixmap);

使用QT QPainter画一面彩色墙_QPainter_02

标签:pixmap,QT,BrickWidth,int,彩色,color,QPainter,painter,BrickHeight
From: https://blog.51cto.com/u_12668715/7418022

相关文章

  • C++系列三:QT-Quick
    目录前言:理论:案例:前言:其实和我接触过的Flutter,有异曲同工之处。记住F1,其实就ok了。参考链接:官方、教程1、教程2、教程3、教程3理论:案例://main.cpp:QQmlApplicationEngineengine;engine.load(QUrl(QStringLiteral("qrc:/qt/qml/qtquickapplication1/main.qml")));if(e......
  • qt 有必要记录的
    []这个表示Lambda的开始,如果要加参数可以这样:[]()后面括号里面放参数,Qt中connect中的信号,参数1.[]:里面为空,表示不使用任何参数对象的参数;2.=:表示按值的方式进行传递;3.&:表示以引用的方式进行传递;4.this:表示函数体内可以使用Lambda所在类中的成员变量;5.a:按值的方式进行传......
  • VS_vsaddin_QT联合编辑
    VS_vsaddin_QT联合编辑主要包含了使用VS2019,QT_VS_tools插件3.0.0和QT5.15.2联合编辑时,出现的一些问题。QtCreator和VS联合编辑,中文乱码的问题联合编辑时中文乱码Qt中添加VTK窗口显示点云......
  • Qt中添加VTK窗口显示点云
    Qt中添加VTK窗口显示点云1.在Qt中添加显示点云的控件2.QVTKOpenGLNativeWidget.h的解释3.VTK文档及使用例程VTK总文档入口VTK的C++接口文档VTK的c++使用例程遇到的问题......
  • Qt中QGraphics类坐标映射关系详解
    1、Item(图元)坐标:属于局部坐标,通常以图元中心为原点(中心对称),非中心对称类,比如dialog类,一般以左上角为原点,正方向x朝右,y朝下。2、setPos的坐标是父类坐标系的坐标,一般对于item位于scene中的应用场景。3、scene(场景)坐标:属于逻辑坐标logicalcoordinates(与QPainter相同),以场......
  • Qt 图形视图框架<三>——<坐标系统>
    Qt图形视图框架<三>——<坐标系统> 一基础知识 图形视图框架是基于笛卡尔坐标系统的,一个图形项在场景中的位置和几何形状由x坐标和y坐标来表示。当使用一个没有变换的视图来观察场景时,场景中的一个单元代表屏幕上的一个像素。图形视图框架的三个坐标系分别是视图......
  • Qt5.9 Graphics View 最简单制作画图
    话不多说先看程序的效果图: 这个也算是一个基础的制作,下面带大家来看看如合制作吧。首先,从QGraphicsView类继承定义一个图形视图类QWGraphicsView。qwgraphicsview.h#ifndefQWGRAPHICSVIEW_H#defineQWGRAPHICSVIEW_H #include<QObject>#include<QGraphicsView>/......
  • Qt QListView添加数据
    QListView添加数据准备数据QStringListlist;list<<"数据1"<<"数据2";准备模型QStringListModel*model;model=newQStringListModel(this);将数据添加到模型中model->setStringList(list);为QListView添加数据模型ui->listView->setMode......
  • Qt图形视图框架事件传递顺序
     全文链接:http://www.fearlazy.com/index.php/post/111.html Qt为我们提供的图形视图框架真的是非常好用,它通过分解出视图、场景和图元降低了我们绘制图形的难度。它提供了强大图元控制能力,如快速查找图元、检测图元位置、检测图元碰撞等。除此以外图形视图框架还有一个很强大......
  • qt程序调用cuda-11.7,cmake编译时,提示:"CMakeCUDACompilerId.cu" failed. Compiler:
    报错显示:Running/home/wc/software/cmake-3.26.3-linux-x86_64/bin/cmake/home/wc/work/junke_src/missile-sim'-GCodeBlocks-UnixMakefiles'in/home/wc/work/junke_src/build/debug.CMakeErrorat/home/wc/software/cmake-3.26.3-linux-x86_64/share/cmak......