Qt中对主窗口的一些基本操作

一,给主窗口添加背景
我们在做Qt项目的时候,难免需要在主场口上面添加背景图片,一般有两种方法来实现这一功能,可以在主窗口上面粘贴一个很大的QLabel然后在QLabel上面绘制图片,一般不会这样做,另外一种放法我们就需要重写绘制事件函数。paintEvent事件是在窗口状态改变之后处罚的,窗口的状态改变,可以是大小改变,也可以是别的。
如下:
头文件:

protected:
    //只要窗口状态改变自动调用此函数
    //需要绘制窗口必须通过此函数实现
    //重新绘图函数
    void paintEvent(QPaintEvent *);

然后在源文件实现:

void painter::paintEvent(QPaintEvent *)
{

    //方法一
    //QPainter p(this);
    //创建画家对象 指定当前窗口为绘图设备
    QPainter p;
    p.begin(this);

    //绘图操作
    //p.drawPixmap(0, 0, width(), height(), QPixmap("./image/c++father.jpg"));
    //获取窗口的整个区域
    p.drawPixmap(rect(), QPixmap("./image/c++father.jpg"));

    //定义画笔
    QPen pen;
    pen.setWidth(5);//设置线宽119 126 194
   // pen.setColor(Qt::red);//设置颜色
    pen.setColor(QColor(119, 126, 194));//通过rgb
    pen.setStyle(Qt::DashDotDotLine);
    //把画笔交给画家
    p.setPen(pen);

    //画直线
    p.drawLine(50, 50, 150, 50);
    p.drawLine(50, 50, 50, 150);

    //创建画刷
    QBrush brush;
    brush.setColor(Qt::red);
    brush.setStyle(Qt::Dense1Pattern);

    p.setBrush(brush);
    //画矩形
    p.drawRect(150, 150, 100, 50);
    //画圆
    p.drawEllipse(QPoint(150, 150), 50, 25);

    //画笑脸
    p.drawPixmap(x, 200, 80, 80, QPixmap("./image/face.png"));
    p.end();

}

注:

  1. 在创建QPainter对象的时候可以直接在构造函数指定父对象, 也可以通过begin来指定
  2. 绘图的时候调用函数drawPixmap,要传入绘图起点和宽高,是一个矩形区域,width()是该对象的宽度, height()是本对象的高度,也可以直接传入QRect对象,可以查看手册
  3. 对于QPixmap类的对象传参的时候,可以先创建对象,然后使用load函数加载图片,也可以直接使用构造函数传入图片路径返回一个对象
  4. 在绘制的时候可以指定线宽,但是这个是在基于QPen类里面对象的,也可以指定格式,颜色等属性。
  5. 对于区域填充的话可以使用QBrush类中的对象
  6. 上述的一些参数比如线条的格式,画刷的格式等都可以在手册查看

** 二,设置窗口的一些基本属性**

  1. 设置窗口的固定大小
	//配置主场景
    //设置固定大小
    setFixedSize(320, 588);
  1. 设置窗口的图标
//设置图标
    setWindowIcon(QIcon(":/image/face.png"));
  1. 设置窗口标题
//设置title
    setWindowTitle("测试");

三,去掉窗口边框并且移动窗口:
1.首先去掉边框:
关于WindowFlags枚举值很多,其中有一个WindowStaysOnTopHint,可以让窗体位于所有界面之上,类似于QQ主面板,一打开就在所有软件之上

//去掉边框
setWindowFlags(Qt::FramelessWindowHint | windowFlags());

2.去掉边框之后是不能移动的,我们需要重写鼠标事件
1.重写鼠标按下事件


void Widget::mousePressEvent(QMouseEvent *event)
{
//判断鼠标按下的是否为左键
    if (event->button() == Qt::LeftButton)
    {
        PressStatus = true;
        //记录鼠标按下左键的位置
        MousePoint = event->pos();
    }
}

2.鼠标移动事件重写

// 若鼠标左键被按下,移动窗体位置
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    if (PressStatus)
    // 鼠标相对于窗体的位置 event->globalPos() - this->pos()
        move(event->pos() - MousePoint + this->pos());
}

3.鼠标释放事件重写

// 设置鼠标未被按下
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    Q_UNUSED(event);

    PressStatus = false;
}

你可能感兴趣的:(Qt学习,css,c++)