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

目录

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;
    //}
}

结果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

因心,三人水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值