qt学习笔记(绘图、关闭、尺寸改变事件)

  在paintEvent函数中:

QPainter painter(this);
painter.drawPixmap(0, 0, this->width(), this->height(), QPixmap("../painter/temp.png"));//使用painter目录下的temp.png图片填充整个窗口

  painter.drawPixmap好像无法绘制bmp。尝试使用bmp格式的图片绘制无法绘制。

   painter.drawEllipse(20, 20, this->width() - 20, this->height() - 20);//绘制一个椭圆,函数多有重载,此处只是其中一个。

  使用画笔

    QPen pen;
    pen.setColor(QColor(146,168,209));			//设置画笔颜色为粉蓝色
    pen.setStyle(Qt::SolidLine);				//设置画笔风格为实线
    pen.setWidth(10);							//设置画笔宽度为10
    painter.setPen(pen);						//设置为画笔
    painter.drawRect(20, 20, 200, 122);			//开始绘制矩形
    //绘制直线
    painter.drawLine(this->width()*0.2, this->height()*0.39, this->width()*0.8, this->height()*0.39)

  使用画刷

    QBrush brush;					
    brush.setColor(QColor(146,168,209));			//设置画刷颜色为粉蓝色
    brush.setStyle(Qt::CrossPattern);				//设置画刷风格为交叉线
    painter.setBrush(brush);						//设置当前画刷
    //绘制矩形
    painter.drawRect(20, 20, this->width() - 40, this->height() - 40);
    static const QPointF points[4] = {
    QPointF(10.0, 80.0),
    QPointF(20.0, 10.0),
    QPointF(80.0, 30.0),
    QPointF(90.0, 70.0)
	};
	painter.drawPolygon(points, 4);					//绘制多边形

  注意:在paintEvent函数中不可进行update,会照成死循环消耗CPU。

  捕获窗口关闭事件:
  重载closeEvent函数

void Widget::closeEvent(QCloseEvent *event)
{
    int ret = QMessageBox::information(this,"confirm", "are you sure to quit?", QMessageBox::Yes|QMessageBox::No);
    if(ret == QMessageBox::Yes)
        event->accept();				//如果确认则关闭
    else
        event->ignore();				//若选择No则忽略此事件
}

  捕获窗口尺寸改变事件:
  重载resizeEvent函数:

void Widget::resizeEvent(QResizeEvent *event)
{
    qDebug() << event->oldSize() << endl;		//输出旧的窗口大小
    qDebug() << event->size() << endl;			//输出窗口现在的大小
	this->update();								//更新
}
QResizeEvent是QT中的一个事件类,用于处理窗口大小变化的事件。该类可以被子类重新实现,以接收传递给事件参数的窗口大小变化事件。当调用resizeEvent()时,窗口已经具有新的几何形状,而旧的大小可以通过QResizeEvent::oldSize()访问。在处理大小调整事件后,窗口将被擦除并立即接收到绘制事件。在此处理程序中不需要进行绘图操作。 当QT运行时自动调用resize函数事件或者其他窗口控件大小发生变化时,会触发resize事件。如果想要在拖动主窗口或更改大小时,让窗口中的组件随窗口一起缩放,需要重写resizeEvent()函数。因为在窗口构造完成之后,子窗口的大小是固定的,只有在resizeEvent()事件函数中才能获取到各个控件正确的大小。 在实际应用中,需要注意以下几点: 1、函数名称唯一,因为resizeEvent()是QT的固有事件函数,我们只需要重写其功能,丰富其功能,而不是更改函数名称。 2、在头文件中声明resizeEvent()函数:void resizeEvent(QResizeEvent *event)。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [QT事件之resizeEvent事件触发(2)](https://blog.csdn.net/weixin_43646126/article/details/114873835)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值