linux下Qt C++5.11自定义控件操作步骤----以自定义Label为例

上机环境linux mint Qt5.11

  • 需求:自定义一个label,使得label在点击时可以显示鼠标的坐标值
  • 步骤一,新建一个QWidget项目

  • 方便起见,设置如下

  • 步骤二,新建一个Label类
自定义的控件,无非是在Qt官方控件的基础上添加新的槽(通俗点就是响应事件的函数),那么必定要继承基类,那么基类的具体名称是什么?如何查找?我们不妨拖拽一个官方控件,以查看它的相关属性

再一看,右边属性信息

  • 为项目新添加一个C++类我暂且定义为mylabel,让这一标签继承基类QLabel,根据需求,点击标签将会显示鼠标,x,y轴坐标信息,这势必关系到选择哪些合适的微件(widget,说白了就是新时代优雅的控件)响应事件,具体做法是,把鼠标放在控件名,如QLabel处,按下F1

查看Reimplemented protected functions

感觉mousePressEvent甚得朕心,于是乎,在头文件加上相关函数声明(protected部分)

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QWidget>
#include<QLabel>
class mylabel : public QLabel
{
    Q_OBJECT
public:
    explicit mylabel(QWidget *parent = nullptr);
protected:
    void mousePressEvent(QMouseEvent *ev);
    void mouseReleaseEvent(QMouseEvent *ev);
    void mouseMoveEvent(QMouseEvent *ev);
signals:

public slots:
};

#endif // MYLABEL_H
  • 接下来,要写下详尽的功能,切换到类的实现文件mylabel.cpp
#include "mylabel.h"
#include<QLabel>
#include<QMouseEvent>//必须添加控件头文件,否则程序会让你好看
#include<QString>//必须添加控件头文件,否则程序会让你好看
mylabel::mylabel(QWidget *parent) : QLabel(parent)
{

}
void mylabel::mousePressEvent(QMouseEvent *ev)
{
    int x=ev->x();//把鼠标放在QMouseEvent处,按下F1可以发现该类的公共函数x(),y()是用来获取x,y轴坐标的
    int y=ev->y();
    QString str=QString("x轴坐标:%1, y轴坐标:%2").arg(x).arg(y);
    this->setText(str);
}
void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{

}
void mylabel::mouseMoveEvent(QMouseEvent *ev)
{

}

以为这样就万事大吉了?......I‘m deeply sorry,点击ui文件

选中label微件,鼠标右键 点击promote to......

在promoted class name处添加你写好的 类名----mylabel,添加成功后,下次打开,如上图所示

接下来就是选中label组件,然后右键选择promoted to 选择拟定义好的类mylabel,最后运行结果如下,你的label控件最好拖的跟窗体一样大,这样才由更好的测试体验

原文地址:https://www.cnblogs.com/saintdingspage/p/12155489.html

时间: 2025-01-17 10:55:14

linux下Qt C++5.11自定义控件操作步骤----以自定义Label为例的相关文章

Linux下自动备份MySQL数据库详细操作步骤(转载)

环境说明操作系统:CentOSIP:192.168.150.214Oracle数据库版本:Oracle11gR2用户:root 密码:123456端口:3306数据库:ts_0.ts_1.ts_2.ts_3 详细的操作步骤如下1.root用户登录服务器 mkdir -p /backup/mysqldata  #新建Oracle数据库备份目录 2.新建Oracle数据库备份脚本vi /backup/mysqldata/dbbackup.sh #新建文件,输入以下代码 |#!/bin/bash|#D

linux下查找进程及终止进程操作的相关命令

使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号.首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word1)ps a 显示现行终端机下的所有程序,包括其他用户的程序.2)ps -A 显示所有程序.3)ps c 列出程序时,显示

Linux下Qt的安装与配置

参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7.0版本 qt-everywhere-opensource-src-4.7.0.tar.gz 拷贝并解压 这里我装的是Vmware上面的linux,所以windows与linux直接的文件共享,建议用samba,Samba我前面的笔记有介绍,这里不详谈. 拷贝到下面这个目录下 解压用 : tar zx

Linux下安装mysql5.6.11(找点有用的信息太费劲)(转)

Linux下安装mysql5.6.11(找点有用的信息太费劲) (2013-04-25 10:25:09)     1.申请阿里云Linux服务器 昨天在阿里云申请了一个免费试用5天的Linux云服务器. 操作系统:Red Hat Enterprise Linux Server 5.4 64位. CPU:1核 内存:512M 硬盘空间:20G 带宽:1Mbps. 今天在这台云服务器上安装了基本环境(JDK.Tomcat和MySQL).本文主要在阿里云Linux云服务器安装MySQL全过程,以及对

linux下Qt调用非标准库中的函数调用----------如pthread_create、pthread_cond_***、、

在Linux下Qt中使用POSIX标准的pthread_creaet函数调用创建新线程,使用如下代码后编译通过 extern "C" { #include <pthread.h> } 但是运行后发现并未成功创建新线程,并且无报错!!! (编译链接时有添加:-lpthread) 其中原因本人尚不清楚... 并且pthread_mutex_*** (互斥锁).pthread_cond_*** (条件变量) 等相关函数估计也无效... 后来借鉴网友提供的方法:将C文件创建成函数库

Linux下的内核编译与模块操作

Linux下的内核编译与模块操作 一:实验环境 1):虚拟机 2):linux系统 3):linux系统的硬盘的空余空间要大于7G 4):虚拟机的内存要大于2.5G以上 二:实验目标 1):源码编译Linux内核 2):使用Linux内核模块 3):实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能 三:实验脚本 第一块 --源码编译Linux内核 linux系统与windows系统是两种截然不同的系统,windows系统中的软件都是需要付费的,而linux系统中的

Linux下互斥量加锁与解锁操作的C代码实现

一.概述 在实际的软件程序中,由于代码量较大,函数之间的调用关系较为复杂,因此对于某些全局变量的操作要格外小心.在程序中,一般采用互斥量加锁的方式来保证对全局变量的操作的唯一性. 本文详细介绍了Linux下互斥量加锁与解锁操作的C代码实现,为相关的软件开发工作的开展提供了有益的参考. 二.加锁与解锁函数及时间结构体介绍 1.加锁函数pthread_mutex_timedlock 函数原型:int pthread_mutex_timedlock(pthread_mutex_t *restrict

Linux下QT中执行shell命令

当需要在QT中执行shell命令时可以利用以下方法: (1)首先包含头文件: #include <QProcess> (2)执行shell命令: QProcess::execute("ls"); ///////////////////// #include  <QProcess> void Widget:on_pushButton_clicked() { //* system("ls");//调用LINUX C函数库中的system(cons

linux下删除特殊字符命名文件的操作记录

在linux下,有时候会碰到以特殊字符命名的文件,要删除这些文件需要加转义符号.下面列出几个例子看看吧: [[email protected] tmp]# touch \(22\)[[email protected] tmp]# touch \1231[[email protected] tmp]# touch \\1231[[email protected] tmp]# touch \<22:23\>[[email protected] tmp]# ll-rw-r--r-- 1 root r