【Qt】6.QTableWidget控件、其他控件、自定义控件封装、鼠标事件

news2024/11/26 21:09:23

目录

QTableWidget控件

代码

widget.cpp

结果

其他控件

stackWidget栈控件

下拉框

代码

widget.cpp

结果

自定义控件封装

代码

smallwidget.h

smallwidget.cpp

widget.cpp

结果

鼠标事件

代码

mylabel.h

mylabel.cpp

结果

QTableWidget控件

  1. 设置列数setColumnCount

  2. 添加水平头setHorizontalHeaderLabels

  3. 设置行数setRowCount

  4. 设置正文setItem(行号,列号,具体内容)

  5. 添加老六

  6. 删除老六

代码

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //QTableWidget控件使用
    QStringList list;
    list<<"姓名"<<"性别"<<"年龄";

    //告诉控件,有多少列
    ui->tableWidget->setColumnCount(list.size());

    //设置水平头
    ui->tableWidget->setHorizontalHeaderLabels(list);

    //设置行数
    ui->tableWidget->setRowCount(3);

    //准备数据
    QStringList nameList;
    nameList<<"张三"<<"李四"<<"王五";
    QList<QString> sexList;
    sexList<<"男"<<"女"<<"男";

    //设置正文
    for (int i=0;i<3;i++) {
        int j=0;
        ui->tableWidget->setItem(i,j,new QTableWidgetItem(nameList[i]));
        j++;

        //添加性别
        ui->tableWidget->setItem(i,j,new QTableWidgetItem(sexList.at(i)));
        j++;

        //添加年龄
        //int转QString number
        ui->tableWidget->setItem(i,j,new QTableWidgetItem(QString::number(i+20)));
    }

    //点击按钮,添加老六
    connect(ui->btn_TianJia,&QPushButton::clicked,[=](){
        //先判断有没有,有就不添加,没有就添加
        bool flag=ui->tableWidget->findItems("老六",Qt::MatchExactly).empty();
        if(flag){
            ui->tableWidget->insertRow(0);
            ui->tableWidget->setItem(0,0,new QTableWidgetItem("老六"));
            ui->tableWidget->setItem(0,1,new QTableWidgetItem("男"));
            ui->tableWidget->setItem(0,2,new QTableWidgetItem(QString::number(20)));
        }
        else{
            QMessageBox::warning(this,"警告","老六有了!");
        }
    });

    //点击按钮,删除老六
    connect(ui->brn_ShanChu,&QPushButton::clicked,[=](){
        //先判断有没有,有就删除,没有就不删除
        bool flag=ui->tableWidget->findItems("老六",Qt::MatchExactly).empty();
        if(flag){
            QMessageBox::warning(this,"警告","老六没了!");
        }
        else{
            //先找到老六所在行
            int hang=ui->tableWidget->findItems("老六",Qt::MatchExactly).first()->row();

            //找到行数,删除掉
            ui->tableWidget->removeRow(hang);
        }
    });
}

Widget::~Widget()
{
    delete ui;
}

结果

其他控件

stackWidget栈控件

设置当前索引setCurrentIndex(0)

下拉框

  1. addItem

  2. setCurrentText()

利用QLabel显示gif图片和普通图片。

代码

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QMovie>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //stackWidget
    //设置默认选中第0项
    ui->stackedWidget->setCurrentIndex(0);

    connect(ui->btn_ScrollArea,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(0);
    });

    connect(ui->btn_ToolBox,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(1);
    });

    connect(ui->btn_TabWidget,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(2);
    });

    //下拉框使用
    ui->comboBox->addItem("兰博基尼");
    ui->comboBox->addItem("法拉利");
    ui->comboBox->addItem("迈凯伦");

    //点击选择法拉利按钮
    connect(ui->btn_XuanZe,&QPushButton::clicked,[=](){
        ui->comboBox->setCurrentText("法拉利");
    });

    //利用QLabel显示图片
    ui->tu_pian->setPixmap(QPixmap(":/TuPian/a1.png"));

    //利用QLabel显示gif图片
    QMovie *movie=new QMovie(":/TuPian/a3.gif");
    ui->dong_tu->setMovie(movie);

    //播放gif
    movie->start();
}

Widget::~Widget()
{
    delete ui;
}

结果

自定义控件封装

  1. 创建QT-设计师界面类

  2. 拖拽Widget 右键 提升为-类名写入-全局包含-添加-提升

  3. QSpinBox移动Slider跟着移动

  4. 对外接口

代码

smallwidget.h

#ifndef SMALLWIDGET_H
#define SMALLWIDGET_H

#include <QWidget>

namespace Ui {
class SmallWidget;
}

class SmallWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SmallWidget(QWidget *parent = nullptr);
    ~SmallWidget();

    void setValue(int v);
    int getValue();

private:
    Ui::SmallWidget *ui;
};

#endif // SMALLWIDGET_H

smallwidget.cpp

#include "smallwidget.h"
#include "ui_smallwidget.h"

SmallWidget::SmallWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SmallWidget)
{
    ui->setupUi(this);

    //QSpinBox移动 Slider跟着移动
    void(QSpinBox::*signal)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,signal,ui->horizontalSlider,&QSlider::setValue);

    //Sli移动 SpinBox跟着移动
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
}

void SmallWidget::setValue(int v){
    ui->spinBox->setValue(v);
}
int SmallWidget::getValue(){
    return ui->spinBox->value();
}

SmallWidget::~SmallWidget()
{
    delete ui;
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //点击设置到一半的位置
    connect(ui->btnSet,&QPushButton::clicked,[=](){
        ui->widget->setValue(50);
    });

    //点击获取,拿到当前值
    connect(ui->btnGet,&QPushButton::clicked,[=](){
        qDebug()<<"当前值为:"<<ui->widget->getValue();
    });
}

Widget::~Widget()
{
    delete ui;
}

结果

鼠标事件

  1. 鼠标进入enterEvent

  2. 鼠标离开leaveEvent

  3. 鼠标按下、释放、移动

  4. 通过ev获取到x、y

  5. ev判断鼠标左右键

  6. QString格式化字符串%1 %2

代码

mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class MyLabel : public QLabel
{
    Q_OBJECT
public:
    explicit MyLabel(QWidget *parent = nullptr);

    //捕获事件
    //鼠标进入
    void enterEvent(QEvent *);

    //鼠标离开
    void leaveEvent(QEvent *);

    //鼠标按下
    void mousePressEvent(QMouseEvent *ev);

    //鼠标释放
    void mouseReleaseEvent(QMouseEvent *ev);

    //鼠标移动
    void mouseMoveEvent(QMouseEvent *ev);

signals:

};

#endif // MYLABEL_H

mylabel.cpp

#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>

MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
    //设置鼠标追踪
    this->setMouseTracking(true);
}

//鼠标进入
void MyLabel::enterEvent(QEvent *){
    qDebug()<<"鼠标进入";
}

//鼠标离开
void MyLabel::leaveEvent(QEvent *){
    qDebug()<<"鼠标离开";
}

//鼠标按下
void MyLabel::mousePressEvent(QMouseEvent *ev){
    //如果鼠标按下的是左键,然后提示内容
    if(ev->button()==Qt::LeftButton){
        //找按下的位置
        QString str=QString("鼠标按下 x=%1 y=%2").arg(ev->x()).arg(ev->y());
        qDebug()<<str;
    }
}

//鼠标释放
void MyLabel::mouseReleaseEvent(QMouseEvent *ev){
    //如果鼠标按下的是左键,然后提示内容
    if(ev->button()==Qt::LeftButton){
        QString str=QString("鼠标释放 x=%1 y=%2").arg(ev->x()).arg(ev->y());
        qDebug()<<str;
    }
}

//鼠标移动
void MyLabel::mouseMoveEvent(QMouseEvent *ev){
    //如果鼠标按下的是左键,然后提示内容,持续状态需要用buttons,用与操作符进行判断
    //if(ev->buttons()&Qt::LeftButton){
        QString str=QString("鼠标移动 x=%1 y=%2").arg(ev->x()).arg(ev->y());
        qDebug()<<str;
    //}
}

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oAuth2的入门

目录一、OAuth2流程演示示例第一步第二步二、流程2.1 资源所有者2.2 客户2.3 客户2.4 认证服务器2.5 客户2.6 资源服务器三、测试一、OAuth2流程演示示例 第一步 先到gitee下载oAuth2官方提供的代码&#xff0c;然后导入项目 https://gitee.com/lisenaq/oauth2-example.git第…

SpringMVC(十四):SpringMVC异常处理

文章目录 SpringMVC异常处理 一、异常简介 二、异常处理具体实现

Charles 的简单使用

1.下载并安装charles官方下载地址&#xff1a;https://www.charlesproxy.com/download/当前最新版本是4.6.3 选择合适的安装包进行下载&#xff08;windows.msi、macos.dmg、linux.tar.gz&#xff09;例windows.msi&#xff1a;执行msi文件&#xff0c;选择合适的下载地址&…

【机器学习】聚类算法(理论)

聚类算法&#xff08;理论&#xff09; 目录一、概论1、聚类算法的分类2、欧氏空间的引入二、K-Means算法1、算法思路2、算法总结三、DBSCAN算法1、相关概念2、算法思路3、算法总结四、实战部分...一、概论 聚类分析&#xff0c;即聚类&#xff08;Clustering&#xff09;&…

js继承的6种方式

// 1 原型链继承function Per() {this.name "key";}Per.prototype new Person(); // 主要var per1 new Per();console.log(per1.age);// instanceof 判断元素是否在其他元素的原型链上// per1继承了Person的属性&#xff0c;返回trueconsole.log(Per1 instanceof …

java常用类:BigInteger类和BigDecimal类

java常用类型: Ineteger等包装类 String类&#xff0c;StringBuffer类和StringBuilder类 Math类及常用方法 System类及常用方法 Arrays类及常用方法 BigInteger类和BigDecimal类及常用方法 日期类Date类,Calender类和LocalDateTime类 文章目录引言BigInteger (大整数)常用方法B…

二分算法学习

&#x1f33c; 扎着马尾的姑娘&#xff0c;笑容温柔很善良自在的少年 - 要不要买菜 - 单曲 - 网易云音乐 前言 本来打算做蓝桥杯2022&#xff23;&#xff0b;&#xff0b;A组省赛F题青蛙过河的,看到标签显示"二分",第一时间竟然想不到二分是什么,所以来学习下 目录…

传闻将与马云合作,涨了7倍的正大企业国际,还能跟风吗?

1月30日周一&#xff0c;港股正大企业国际逆势大涨68.35%&#xff0c;1月31日正大企业国际继续飙升&#xff0c;最高点涨超275%&#xff0c;收盘时涨幅达251.88%&#xff0c;成为2023年第一只翻倍的股票。今日早盘继续近40个点&#xff0c;还在持续发酵中。 消息面上&#xff…

Python+Go实践(电商架构一)

文章目录简介架构分析接口管理peeweeCURDGin获取请求参数protobuf验证表单中间件静态文件优雅退出小结简介 电商系统&#xff1a;后台管理前端商城 架构分析 传统的单体架构&#xff0c;以Django为例&#xff1b;之前写过flask开发微视频网站就是这样的架构 痛点分析及演进 …

Oracle数据库安装配置和卸载

Oracle数据库是一种网络上的数据库, 它在网络上支持多用户, 支持服务器/客户机等部署(或配置) 服务器与客户机是软件概念, 它们与计算机硬件不存在一一对应的关系. 即: 同一台计算机既可以充当服务器又可以充当客户机, 或者, 一台计算机只充当服务器或只充当充当客户机. Orac…

JAVA 老掉牙的面试问题 线程交替打印问题,分析实操一下

前言 新的一年了&#xff0c;首先是祝大家新年新气象&#xff0c;工作顺利&#xff0c;生活美满 。 万物复苏的一年&#xff0c; 大家都蠢蠢欲动&#xff01; 金三银四快来了&#xff0c; 机会多不多&#xff1f; ‘’满大街机会‘’ 好了不啰嗦&#xff0c;最近有比较多的小伙…

开关电源-TL431与光耦组成的电压反馈电路-TL431工作过程分析

开关电源&#xff1a;TL431与光耦组成的电压反馈电路 #开关电源#开关电源最基本的要求是输入电压变化时&#xff0c;输出电压保持恒定&#xff0c;而与此相关的测试如电压调整率、负载调整率等也是衡量开关电源性能的重要指标&#xff0c;实现输出电压恒定的方式是反馈&#x…

【Catalyst 9000上EEM的部署方法和示例,你看明白了吗?】

新的一年 新的征程 新的课程开班 等你来学&#xff01; EEM&#xff08;Embedded Event Manager&#xff09;作为一个自动化的脚本部署在设备上&#xff0c;可以根据指定的trigger来自动完成提前布置的任务&#xff0c;如信息的收集或特定的操作。一个完整的EEM需要包含Na…

Python学习-----起步2(变量与转义符)

目录 前言 Python变量/常量使用规则 基本数据变量类型 整形&#xff08;int&#xff09; 浮点型&#xff08;float&#xff09; 字符串类型&#xff08;str&#xff09; 布尔类型&#xff08;bool&#xff09; 转义符 习题 前言 在我们学习C语言时&#xff0c;我们学了很…

对象之间的拷贝

这里写目录标题Lambda 的 builderidea 自动生成插件 GenerateAllSetterMapStructDozer在开发的时候经常会有业务代码之间有很多的 JavaBean 之间的相互转化&#xff0c;比如 PO/DTO/VO/QueryParam 之间的转换问题&#xff0c;本文总结一下各种转换方法Lambda 的 builder 使用构…

有幸得到Alibaba内部Gradle实战笔记,趁机狂补

虽然一直在接触 Gradle&#xff0c;但对 Gradle 始终都有一些陌生感&#xff0c;表现在日常的开发中就是不敢随便改 build.gradle 文件&#xff0c;一旦 sync 出错&#xff0c;只会复制错误找谷歌&#xff0c;可是解决方案也不一定能够完美解决自己的问题。还有就是不熟悉 Grad…

黑客为什么都有一台笔记本电脑?

用一位程序员的话俩说&#xff1a;虽然我不是黑客&#xff0c;但是我也喜欢弄一些编程&#xff0c;对我而言&#xff0c;电脑就是我的工具&#xff0c;我的系统里面肯定有许多我自己写的程序&#xff0c;在我做任何操作的时候&#xff0c;我肯定使用我熟悉的软件&#xff0c;这…

创建者模式—工厂模式

目录 1.工厂模式 1.1概述 1.2简单工厂模式 1.2.1结构 1.2.2实现 1.2.3优缺点 1.2.4静态工厂 1.3工厂方法模式 1.3.1概念 1.3.2结构 1.3.3实现 1.3.4优缺点 1.4抽象工厂模式 1.4.1概念 1.4.2结构 1.4.3实现 1.4.4优缺点 1.工厂模式 1.1概述 需求&#xff1a;设…

易基因|细菌全基因组甲基化纳米孔测序(ONT):技术推介

大家好&#xff0c;这是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。今天跟大家介绍一下易基因的新产品&#xff1a;细菌全基因组甲基化纳米孔测序&#xff08;ONT&#xff09;。表观修饰不需要改变DNA序列便能实现对性状的改变&#xff0c;表观修饰的改变与基…

什么是事务?什么是索引?什么是视图?

目录 一、事务 二、视图 1 、视图概念 2、为什么要使用视图 3 、性能问题 4 、定义视图 5、查看视图 6、删除视图 三、索引 1、引入索引的问题 2、索引是什么 3、索引为什么选择b树 一、事务 事务是什么&#xff1f; 事务是一个操作序列&#xff0c;这些操作要么都…