当前位置: 首页 > news >正文

简易购物网站前端模板网站开发语言 微信接口

简易购物网站前端模板,网站开发语言 微信接口,热门网页游戏排行,信息流推广方式qt窗体布局 窗体渲染过程 qt中窗体渲染逻辑顺序为 本窗体-子窗体/控件 递归#xff0c;也就是说先渲染父窗体再渲染子窗体。其中子窗体按加入时的先后顺序进行渲染。通过下方的函数调用堆栈可以看出窗体都是在widget组件源码的widgetprivate::drawwidget中进行渲染的子窗体/控件 递归也就是说先渲染父窗体再渲染子窗体。其中子窗体按加入时的先后顺序进行渲染。通过下方的函数调用堆栈可以看出窗体都是在widget组件源码的widgetprivate::drawwidget中进行渲染的qt内部完成对当前窗体的渲染后再drawWidget最后调用paintSiblingsRecursive这个递归调用函数对所有子窗体进行逐个渲染paintEvent也是在这个paintSiblingsRecursive之前就完成了。 qt窗体的一次渲染过程分两部分工作第一部分工作是qt内部对窗体进行渲染工作这个渲染过程对编程人员来说是不可见不可直接干预的只能通过设置style stylesheet palette进行事先设置第二部分是paintEvent中编程人员可以在这个里面通过Qpainter进行渲染发挥用QPainter渲染出来的结果去覆盖qt内部渲染出来的结果。其中window、widget、form都是在paintEvent之外渲染的而button、label等等控件则是在paintEvent之中进行隐藏在QPushButton::paintEvent中。  qt的组件被触发渲染/绘制时QPainter就需要重新进行渲染/绘制否则QPainter的内容就会被覆盖所以如果QPainter需要对窗体进行渲染操作需要在目标窗体中的paintEvent中去实现QPainter的操作步骤。 demo中窗体结构 MainWindow     centralWidget         pushbutton         vboxlayout  centralWidget-setlayout(vboxlayout)             mywidget                 vboxlayout   mywideget-setlayout(vboxlayout)                     mybutton         tbutton1         tbutton2 效果 mybutton.cppMyButton::MyButton(QWidget* parent):QPushButton(parent) {setAttribute(Qt::WA_StyledBackground);setStyleSheet(background-color:rgba(255,255,0,100)); //设置mybutton背景色为黄色半透明半透明叠加好像无效 }--------------------- mywidget.cppMyWidget::MyWidget(QWidget *parent): QWidget{parent} {QVBoxLayout *layout new QVBoxLayout(this);setLayout(layout);m_button new MyButton(this);m_button-setText(button_myWidget);layout-addWidget(m_button);layout-setAlignment(m_button,Qt::AlignCenter);//resize(400, 400);//layout会自动设置窗体的size。setAttribute(Qt::WA_StyledBackground);setStyleSheet(background-color: rgba(255,0,0,100)); //设置mywidget窗体背景色位半透明 }-------------- mainwindow.cppMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui-setupUi(this);QPushButton *button1 new QPushButton(this-centralWidget());//这里就表示已经将pushbutton加入到centralwidget中了button1-setGeometry(QRect(270, 20, 200, 100));button1-setText(tbutton1);layout new QVBoxLayout(this-centralWidget());m_widget new MyWidget(this-centralWidget());layout-addWidget(m_widget);this-centralWidget()-setLayout(layout);QPushButton *button new QPushButton(this-centralWidget());button-setGeometry(QRect(500, 20, 200, 100));button-setText(tbutton2); } qt中widget、window、form的渲染过程对开发者来说是隐藏的。但是qt为开发者提供了QPainter进行画面渲染绘制工作的类qpainter就相当于opengl中的render可以自由操控渲染过程以及渲染目标是比较方便灵活的。 它的渲染过程由qpainter::begin(paintdevice)开始到qpainter::end()结束渲染过程是独立的不受qt内部渲染窗体的过程的影响。其中当painter构造函数中含有paintdevice参数时在构造函数中就会调用begin()不需要再显式调用begin()painter对象在析构的时候会自动调用end()可以不需要显式调用end()。 qt的窗体渲染与QPainter渲染冲突问题 qt内部对窗体渲染也是直接渲染到QWidget的QPaintDevice的内存上QPainter也是放在QWidget的QPaintDevice内存上。这样就会导致渲染结果的冲突。QPainter对窗体的渲染需要放在paintEvent中因为paintEvent是在qt内部对widget渲染完了后再执行的这样用户用QPainter自定义的渲染结果才能在qt内部渲染结果上叠加。而不是被qt内部渲染结果冲刷掉 QPainter渲染无效原因 需要注意的是QPainter应该在渲染目标对象的PaintEvent中进行工作否则渲染的结果会被冲刷掉。比如 在Mainwindow中的paintEvent中用QPainter对mainWindow的子窗体centralwidget进行渲染就不会有任何效果因为centralwidget这个子窗体的渲染是在Mainwindow的paintevent完成之后才进行的。可以将覆盖在centralwideget上的mywidget作为渲染目标在mywidget中的paintEvent中完成QPainter的工作。qt 快捷功能 快速生成代码 父类虚函数重写 查看父类及父类中的虚函数 QPainter使用 一定要设置绘制对象绘制对象必须继承自QPaintDevice。一般用在paintEvent()函数中 ​​​​​​​void MyWidget::paintEvent(QPaintEvent *event) {QPainter painter(this);   //传入this表示要在mywidget上进行绘制painter.drawImage(this-rect(),QImage(G:/1/1.png)); } QPainter painter();//painter-begin(0); // impossible - paint device cannot be 0 when it begin painting//QPixmap image(0, 0);//painter-begin(image); // impossible - image.isNull() true;painter-begin(myWidget);//painter-begin(myWidget); // impossible - only one painter at a timepainter.drawEllipse(QRectF(0,0,100,100));painter.end(); 下面四个类都继承自QPaintDevice都可以让QPainter进行绘制 QPixmap专门为图像在屏幕上的显示做了优化QBitmap是QPixmap的一个子类它的色深限定为1可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap因为QBitmap色深小因此只占用很少的存储空间所以适合做光标文件和笔刷。QImage专门为图像的像素级访问做了优化QPicture则可以记录和重现QPainter的各条命令。 QPicture将QPainter的命令序列化到一个IO设备保存为一个平台独立的文件格式 对上面的demo做个小调整将mywidget中的setstylesheet设置到centralwidget中并在mywidget的paintevent中绘制一块不透明的区域 mybutton.cppMyButton::MyButton(QWidget* parent):QPushButton(parent) {setAttribute(Qt::WA_StyledBackground);setStyleSheet(background-color:rgba(0,0,255,100)); //设置mybutton背景色为黄色半透明半透明叠加好像无效 }--------------------- mywidget.cppMyWidget::MyWidget(QWidget *parent): QWidget{parent} {QVBoxLayout *layout new QVBoxLayout(this);setLayout(layout);m_button new MyButton(this);m_button-setText(button_myWidget);layout-addWidget(m_button);layout-setAlignment(m_button,Qt::AlignCenter);//resize(400, 400);//layout会自动设置窗体的size。//setAttribute(Qt::WA_StyledBackground);//setStyleSheet(background-color: rgba(77,66,105,100)); //设置mywidget窗体背景色位半透明 }void MyWidget::paintEvent(QPaintEvent *event) {QPainter painter(this);QRect ret this-rect();painter.fillRect(QRect(ret.x()50,ret.y()50,ret.width()*3/2,ret.height()/2), QColor(0,255,0,100));QWidget::paintEvent(event); }-------------- mainwindow.cppMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui-setupUi(this);this-centralWidget()-setAttribute(Qt::WA_StyledBackground);this-centralWidget()-setStyleSheet(background-color: rgba(255,0,0,100)); QPushButton *button1 new QPushButton(this-centralWidget());//这里就表示已经将pushbutton加入到centralwidget中了button1-setGeometry(QRect(270, 20, 200, 100));button1-setText(tbutton1);layout new QVBoxLayout(this-centralWidget());m_widget new MyWidget(this-centralWidget());layout-addWidget(m_widget);this-centralWidget()-setLayout(layout);QPushButton *button new QPushButton(this-centralWidget());button-setGeometry(QRect(500, 20, 200, 100));button-setText(tbutton2); } 效果 centralwidget的子窗体及其递归都继承了他的stylesheetmybutton有额外设置的stylesheet所以没有继承而mywidget的Qpainter绘制的区域并不受mywidget继承的stylesheet而渲染出的结果所影响。 qt QLabel QPushButton 控件重写paintEvent后 控件消失-CSDN博客    qt 6.7 在布局中的按和文本框用resize设置大小无效_layer resize 设置无效-CSDN博客
http://www.dnsts.com.cn/news/72534.html

相关文章:

  • 东港区网站制作网站维护的协议
  • 如何做直接打开网站的二维码建设网站是普通办公吗
  • 一流的山西网站建设免费制作扫码下单小程序
  • 南京h5 网站建设企业网站建设ejiew
  • 游戏开发和网站开发微信微网站模板下载
  • 网站建设丨选择金手指排名15网站报名怎么做
  • 设计一个外贸网站需要多少钱不用下载直接浏览的网站
  • 实验楼编程网站二级学院网站制度建设
  • 果业局网站建设WordPress允许评论编辑
  • 诸城做网站公司岚皋网站建设
  • 优化网站建设价格广州网络推广机构
  • 佛山seo网站百度服务电话6988
  • unity3d转行网站开发浅析企业网络营销推广方法
  • 做网站贵吗免费友链平台
  • 网站设计素养品牌营销策划是什么意思
  • 梧州网站建设费用做的系统怎么和网站对接
  • 网站网络推广教程线上广告代理平台
  • 珠海网站推广排名扁平化网站下载
  • 做网站代管理三年商城系统软件开发
  • 益阳房地产网站建设艺术设计作品
  • 湖北网站建站系统哪家好wordpress类似于mdx主题
  • 锡山建设局网站该网站是恶意网站
  • 环保网站建设模板免费下载绍兴网站关键词优化
  • 临湘市建设局网站wordpress 自建页面
  • 怎么在本地搭建网站百度云主机上装网站
  • 网站的建设与规划网络的营销方法有哪些
  • 游戏网站开发实验报告网站伪静态作用
  • 网站建设费记在什么科目下杭州模板开发建站
  • 乒乓球网站建设目标二维码生成器官网
  • 庞各庄网站建设网站赚钱平台