zoukankan      html  css  js  c++  java
  • QT自定义窗口

    qt 中允许自定义窗口控件,使之满足特殊要求,

    (1)可以修改其显示,自行绘制

    (2)可以动态显示

    (3)可以添加事件,支持鼠标和键盘操作

    自定义控件可以直接在QtDesigner里使用,可以直接加到父窗口里。

    绘制窗口

    1.新建一个类,继承与QWidget或QFrame,最好是继承于QFrame

    2.重写以下函数

    void CellMonitor::paintEvent(QPaintEvent *event)
    {
     QPainter painter(this)
    }

    3.使用这个类

    例子:画一个圆形

    void CircleWidget::paintEvent(QPaintEvent *event)
    {
      QPainter painter(this);
      panter.setBrush(QBrush(QColor(0x00,0xFF,0x00)));
      painter.drawEllipse(QPoint(100,100),100,100);
    }

    circlewidget.h

    #ifndef CIRCLAWIDGET_H
    #define CIRCLAWIDGET_H
    #include <QFrame>
    class CircleWidget:public QFrame
    {
        Q_OBJECT
    public:
        CircleWidget(QWidget *parent);
        ~CircleWidget();
    private:
        void paintEvent(QPaintEvent *event);
    
    };
    
    #endif // CIRCLAWIDGET_H

    circlewidget.cpp

    # include"circlawidget.h"
    #include<QPainter>
    CircleWidget::CircleWidget(QWidget *parent):QFrame(parent)
    {
    
    }
    CircleWidget::~CircleWidget()
    {
    
    }
    void CircleWidget::paintEvent(QPaintEvent *event)
    {
          QPainter painter(this);
          painter.setBrush(QBrush(QColor(0x00,0xFF,0x00)));
          painter.drawEllipse(QPoint(100,100),100,100);
    }

    main.cpp

    #include "mainwindow.h"
    #include <QApplication>
    #include "circlawidget.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        //MainWindow w;
        CircleWidget w(NULL);
        w.resize(400,300);
    
        w.show();
    
        return a.exec();
    }

    显示效果:

    这个过程演示了如何通过自定义类创建一个Widget窗口显示一个圆。

    但是实际的过程是我们需要将新建的Wiget或Frame窗口作为一个子窗口在父窗口中调用,那应该如何实现?通过以下方法:

    1.新建一个MainWidget的工程,按照上面的方法构建CircleWidget类,在ui界面工具栏选择Widget或Frame 放入ui界面。

    2.右击widget控件,选择Promote to ...,出现如下界面

    3.在promoted class name: 填入类名“CircleWidget”,点击add

    4.在多选框打钩,点击Promote 按键。

    通过以上步奏就完成了添加自定义控件到主界面中。这里不要忘了在main.cpp中修改显示主界面。

    main.cpp

    #include "mainwindow.h"
    #include <QApplication>
    #include "circlewidget.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        //CircleWidget w(NULL);
       // w.resize(400,300);
    
        w.show();
    
        return a.exec();
    }

    完成后效果:

  • 相关阅读:
    单元测试笔记
    centos7安装rabbitmq
    spring cache之redis使用示例
    ObjectMapper序列化时间
    安装alertmanager
    prometheus安装
    Ribbon配置随访问策略
    优化if..else代码的两种方式
    spring bean的生命周期
    idea热部署
  • 原文地址:https://www.cnblogs.com/fuhang/p/9900045.html
Copyright © 2011-2022 走看看