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(,),,);
}

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(,),,);
}

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(,); 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();
}

完成后效果:

QT自定义窗口的更多相关文章

  1. QT自定义窗口(模拟MainWindow)

    在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的 ...

  2. Qt自定义窗口部件

    QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)   改进法   1.改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和Hexs ...

  3. qt 自定义窗口绘制正弦曲线

    circlewidget.h #ifndef CIRCLAWIDGET_H #define CIRCLAWIDGET_H #include <QFrame> #include<QVe ...

  4. qt 自定义窗口显示鼠标划过的轨迹

    鼠标事件分为四种: 1.按下 2.抬起 3.移动 4.双击 鼠标事件继承与QWidget void mouseDoubleClickEvent(QMouseEvent *event) void mou ...

  5. QT笔记之自定义窗口拖拽移动

    1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...

  6. Qt入门(19)——自定义窗口部件

    我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange().        void setRange( int minVal, int maxV ...

  7. paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

    源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...

  8. Qt自定义标题栏

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt自定义标题栏     本文地址:http://techieliang.com/2017/1 ...

  9. QT自定义信号和槽

    最近项目中使用到QT,在此记录一下QT的核心,信号与槽: QObject::connect(const QObject *sender, const char *signal, const QObje ...

随机推荐

  1. TZ_16_Vue父子组件之间的通信

    1.父向子传递props,该如何传递 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  2. JNI初级:android studio生成so文件详细过程

    本文主要参考blog:http://blog.csdn.net/jkan2001/article/details/54316375 下面是本人结合blog生成so包过程中遇到一些问题和解决方法 (1) ...

  3. 基础篇-1.5Java的数组

    1 引言 每一种编程语言都有其自身的数组概念,大同小异,都是为了存储一堆数据,而Java的数组是用来存储相同类型的数据,如声明一个arr[10]数组,可以用来代替声明10个变量. 2 声明和创建数组 ...

  4. python基础--数据类型的常用方法1

    1.数字类型 整型 用途:存qq号,手机号,不带字母的身份证号... 进制转换: 二进制转十进制:10 -->  1*(2**1) + 0*(2**0) 2 八进制转十进制:  235  --& ...

  5. activity与fragment之间的传递数据

    首先activity之间的数据传递就是 用intent和intent+bundle intent 传递 Intent i= new Intent(MainActivity.this,TheAty.cl ...

  6. web前端学习(四)JavaScript学习笔记部分(4)-- JavaScriptDOM对象

    1.Javascript-DOM简介 1.1.HTML DOM 1.2.DOM操作HTML 1.2.1.JavaScript能够改变页面中的所有HTML元素 1.2.2.JavaScript能够改变页 ...

  7. NFS服务器搭建与配置

    原文:https://blog.csdn.net/qq_38265137/article/details/83146421 NFS服务简介什么是NFS?NFS就是Network File System ...

  8. Python学习笔记(二)使用Sublime Text编写简单的Python程序()

    一.使用Sublime Text编写Python 1.点击“文件” →”新建文件“ 2.点击”文件“→”保存“,并保存为.py文件 此时已经创建好Python文件了,接下来就可以编写Python程序了 ...

  9. Bnd教程(1):如何用命令行安装bnd

    1. 如果你用的是MacOS,请运行: brew install bnd 然后运行bnd version看是否安装成功: $ bnd version 4.0.0.201801191620-SNAPSH ...

  10. Spring_Bean的作用域---和使用外部属性文件

    <!-- 使用 bean的scope属性来配置bean的作用域 singleton:默认值.容器初始时创建bean实例,在整个容器的生命周期内只创建这一个bean单例 prototype:原型的 ...