5.Qt自定义Button按钮的实现
1.编写自定义按钮
|
MyButton.h |
|
#ifndef #define #include /** * * */ class { Q_OBJECT public: explicit //重写MyButton的构造函数 MyButton(const //表示一个矩形 QRect //表示按钮中的文字 QString //用来表示是否按下了的布尔值 bool //表示鼠标按下的事件 void //表示鼠标释放的事件 void void signals: //信号,点击的信号 void public }; #endif |
|
MyButtonn.cpp |
#include "MyButton.h" #include <QPainter> #include <QMouseEvent> MyButton::MyButton(QWidget *parent) : QWidget(parent), _rect(0, 0, 100, 30), _text(QString()) {
//通过这个标记按钮是否被按下了 _pressed = false; this->setGeometry(_rect); } MyButton::MyButton(const QString &text, QWidget *parent): QWidget(parent),_text(text),_rect(0,0,100,30) {
_pressed = false; this->setGeometry(_rect); } void MyButton::mousePressEvent(QMouseEvent *ev) {
_pressed = true; update(); } void MyButton::mouseReleaseEvent(QMouseEvent *ev) {
_pressed = false; update(); if(_rect.contains(ev->pos())) emit clicked(); // callback handler } void MyButton::paintEvent(QPaintEvent *) {
QPainter p(this); if(_pressed) //如果是按下的,则显示的是黄色的 p.setBrush(Qt::yellow); else //如果没有被按下了,回复称灰色的 p.setBrush(Qt::darkGray); p.drawRect(_rect); p.drawText(_rect,_text,QTextOption(Qt::AlignCenter)); } |
|
MyWidget.h |
#ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include "MyButton.h" class MyWidget : public QWidget {
Q_OBJECT public: explicit MyWidget(QWidget *parent); MyButton* button; void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); QVector< QVector<QPoint> > _lines; signals: public slots: void slotButtonClicked(); }; #endif // MYWIDGET_H |
|
MyWidget.cpp |
#include "MyWidget.h" #include <QPainter> #include <QPixmap> #include <QMouseEvent> #include <QDebug> #include <QApplication> MyWidget::MyWidget(QWidget *parent) : QWidget(parent) {
button = new MyButton("MyButton", this);
connect(button, SIGNAL(clicked()), this, SLOT(slotButtonClicked())); button->setGeometry(30, 30, 100, 30); } //槽函数 void MyWidget::slotButtonClicked() {
qDebug() << "button is clicked"; } void MyWidget::paintEvent(QPaintEvent *) {
QPainter p(this); //通过下面的方式实现画多条线 for(int i = 0; i < _lines.size();++i) {
const QVector<QPoint> & line = _lines.at(i); for(int j = 0; j < line.size() - 1;++j) {
p.drawLine(line.at(j),line.at(j + 1)); } } } /** * @brief MyWidget::mouseMoveEvent 鼠标移动的事件 * @param ev */ void MyWidget::mouseMoveEvent(QMouseEvent *ev) {
if(_lines.size() == 0) {
QVector<QPoint> line; _lines.append(line); } QVector<QPoint>& lastLine = _lines.last(); lastLine.append(ev->pos()); update(); } void MyWidget::mousePressEvent(QMouseEvent *ev) {
QVector<QPoint> line; _lines.append(line); QVector<QPoint>& lastLine = _lines.last(); lastLine.append(ev->pos()); } void MyWidget::mouseReleaseEvent(QMouseEvent *ev) {
QVector<QPoint>& lastLine = _lines.last(); lastLine.append(ev->pos()); } int main(int argc,char** argv) {
QApplication app(argc,argv); MyWidget w; w.show(); return app.exec(); } |
|
鼠标按下的运行结果: 鼠标离开的运行效果: |
5.Qt自定义Button按钮的实现的更多相关文章
- Android 自定义Button按钮显示样式(正常、按下、获取焦点)
现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...
- C#自定义Button按钮控件
C#自定义Button按钮控件 在实际项目开发中经常可以遇到.net自带控件并不一定可以满足需要,因此需要自定义开发一些新的控件,自定义控件的办法也有多种,可以自己绘制线条颜色图形等进行重绘,也可以采 ...
- Qt自定义标签按钮
当你接触到Qt时,你会为它极为方便的跨平台方面感到吃惊,从而想尝试着使用Qt.渐渐地你会发现Qt自带的一些控件不能满足自己的需要,此时就需要我们自己定义一个属于自己的控件.总所周知,标签的风格设置类比 ...
- Android自定义Button按钮显示样式
关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法. 首先android的selector是在 ...
- wpf 自定义Button按钮
创建ButtonEx类 public class ButtonEx : Button { static ButtonEx() { DefaultStyleKeyProperty.OverrideMet ...
- 制作自定义背景Button按钮、自定义形状Button的全攻略(转)
在Android开发应用中,默认的Button是由系统渲染和管理大小的.而我们看到的成功的移动应用,都是有着酷炫的外观和使用体验的.因此,我们在开发产品的时候,需要对默认按钮进行美化.在本篇里,笔者结 ...
- IOS开发之自定义Button(集成三种回调模式)
前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...
- 如何在MFC界面开发中响应Button按钮的Down和Up事件
通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButto ...
- iOS_Swift初识之使用三种回调方式自定义Button
最近在学习Swift ,发现青玉伏案大神早期用OC写的一篇博客--IOS开发之自定义Button(集成三种回调模式) 很适合用来熟悉Swift的回调方式,于是我就用Swift翻版了一下,具体实现原理 ...
随机推荐
- [POI2009]KAM-Pebbles
题目描述 Johny and Margaret are playing "pebbles". Initially there is a certain number of pebb ...
- bzoj 4180: 字符串计数
Description SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999. 他给出了一个字符串T,字符串T中有且仅有4种字符 'A', 'B', 'C', ...
- bzoj 4567: [Scoi2016]背单词
Description Lweb 面对如山的英语单词,陷入了深深的沉思,"我怎么样才能快点学完,然后去玩三国杀呢?".这时候睿智 的凤老师从远处飘来,他送给了 Lweb 一本计划册 ...
- 【Gcd】
[题目描述] 有 n 个正整数 x1~xn,初始时状态均为未选.有 m 个操作,每个操作给定一个编号 i,将 xi 的选取状态取反.每次操作后,你需要求出选取的数中有多少个互质的无序数对. [输入数据 ...
- bzoj1911[Apio2010]特别行动队 斜率优化dp
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5057 Solved: 2492[Submit][Statu ...
- bzoj2006 NOI2010 数据结构+堆维护区间和最大
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 3431 Solved: 1686[Submit][Statu ...
- WINFORM中treeview 节点显示不全
在设置treeview节点时,出现如下显示不全的问题: 这个问题是由于我们在treeview任务中编辑节点时设置的字体大于我们在treeview属性中设置frot字体导致的. 所以只要将treevie ...
- 如何在Google上下载高清原图
在我们学习和生活中常常一些高清图片作为相关的素材,比如制作PPT.写博文.制作视频都需要大量图片.我们常常会在百度上下载一些图片,但是百度上提供的图片存在很多问题:存在水印.清晰度不够等.而Googl ...
- curl_multi实现并发
普通请求 curl_normal.php <?php $srart_time = microtime(TRUE); $chArr=[]; //创建多个cURL资源 for($i=0; $i< ...
- IE6浏览器有哪些常见的bug,缺陷或者与标准不一致的地方,如何解决
IE6不支持min-height,解决办法使用css hack: .target { min-height: 100px; height: auto !important; height: 100px ...