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(,),,);
}
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自定义窗口的更多相关文章
- QT自定义窗口(模拟MainWindow)
在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的 ...
- Qt自定义窗口部件
QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin) 改进法 1.改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和Hexs ...
- qt 自定义窗口绘制正弦曲线
circlewidget.h #ifndef CIRCLAWIDGET_H #define CIRCLAWIDGET_H #include <QFrame> #include<QVe ...
- qt 自定义窗口显示鼠标划过的轨迹
鼠标事件分为四种: 1.按下 2.抬起 3.移动 4.双击 鼠标事件继承与QWidget void mouseDoubleClickEvent(QMouseEvent *event) void mou ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
- Qt入门(19)——自定义窗口部件
我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange(). void setRange( int minVal, int maxV ...
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...
- Qt自定义标题栏
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt自定义标题栏 本文地址:http://techieliang.com/2017/1 ...
- QT自定义信号和槽
最近项目中使用到QT,在此记录一下QT的核心,信号与槽: QObject::connect(const QObject *sender, const char *signal, const QObje ...
随机推荐
- TZ_14_Zuul网关
1.spring-cloud的微服务大致是 2.zuul是 Netflix开源的微服务网关, 它可以和 Eureka. Ribbon. Hystrix等组件配合使用.zul的核心是一系列的过滤器,这些 ...
- Sublime setting 个性修改
{ // 编辑器字体大小 "font_size": 10, // 设置行间距 "line_padding_bottom":5, "line_paddi ...
- git学习记录——分支管理和多人协作
在公司里难免会出现多个人一起工作,这就需要构建多个分支派发给多个人去干活 这就产生一个需求,分支管理 分支的创建,合并和删除 其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制 ...
- io.spring.platform继承方式和import方式更改依赖版本号的问题
使用io.spring.platform时,它会管理各类经过集成测试的依赖版本号. 但有的时候,我们想使用指定的版本号,这个时候就需要去覆盖io.spring.platform的版本号. 前面的文章总 ...
- canvas旋转图片
canvas旋转图片 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 2019.8.7 NOIP模拟测试14 反思总结
先扔代码 调完自闭网络流了,新一轮考试前看看能不能赶完…… 考得极其爆炸,心态也极其爆炸,真的是认识到自己能力上的不足 思维跑偏,代码能力差 就这样吧,再努力努力,不行就AFO T1旋转子段: 因为我 ...
- 洛谷P1966 [NOIP2013提高组Day1T2]火柴排队
P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi) ...
- Leetcode590N-ary Tree Postorder TraversalN叉树的后序遍历
给定一个 N 叉树,返回其节点值的后序遍历. class Node { public: int val; vector<Node*> children; Node() {} Node(in ...
- Vue--过渡动画实现的三种方式
一.使用vue的transition标签结合css样式完成动画 <!DOCTYPE html> <html lang="en"> <head> ...
- 2018-9-30-C#-winforms-输入颜色转换颜色名
title author date CreateTime categories C# winforms 输入颜色转换颜色名 lindexi 2018-09-30 18:27:49 +0800 2018 ...