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

这篇具有很好参考价值的文章主要介绍了【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;
}

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

结果

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

其他控件

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

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

结果

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

自定义控件封装

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

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

结果

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

鼠标事件

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

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++

结果

qtablewidget自定义控件,Qt,qt,ui,开发语言,c++文章来源地址https://www.toymoban.com/news/detail-732207.html

到了这里,关于【Qt】6.QTableWidget控件、其他控件、自定义控件封装、鼠标事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt自定义控件 —— 子控件与父控件的鼠标事件问题

    目录 0、引言: 1、问题描述: 2、解决方案: 3、解决后效果: 在 Qt自定义控件 —— 颜色选择组合控件 https://blog.csdn.net/YMGogre/article/details/128955257 一文中我们创建了自定义的组合控件,在该控件中包含了三个子控件 —— QGraphicsView 、 QLineEdit 和 QPushButton 。当我们通过 setIt

    2024年02月09日
    浏览(91)
  • 表格控件QTableWidget

    简介 QTableWidget 是 Qt 中的 表格 组件类。 在窗体上放置一个 QTableWidget 组件后,可以在 Property Editor 里对其进行属性设置,双击这个组件,可以打开一个编辑器,对其 Colum、Row 和 Item 进行编辑。 行/列 第0列 第1列 第0行 ( 0 , 0 ) ( 0 , 1 ) 第1行 ( 1 , 0 ) ( 1 , 1 ) 界

    2024年02月11日
    浏览(35)
  • PyQt QTableWidget 表格控件的使用

    PyQT开发图形界面应用时,可用 QTableWidget 控件,以表格方式直观地显示二维表格形状的数据,如列表,数组、pandas DataFrame等。 如果你想用表格方式直接显示并操作数据库表时,选择 QTableView类更合适。 步骤如下: 生成QTableWidget对象 设置表头以及表格参数 构建 QTableWidgetIte

    2024年02月01日
    浏览(56)
  • Qt::实现qtablewidget分页功能

    头文件: .cpp文件 实现效果:      大佬写得很棒,很简单就实现了qtablewidget的分页功能,但是不知道会不会有什么问题,现在看起来是没问题的,加了个跳转功能,写得比较潦草

    2024年02月15日
    浏览(40)
  • Qt QTableWidget 表格自适应 高度和宽度

    1. 在MainWindow中设置 1.1. 对被嵌入的子窗口进行设置,去除子窗口的一些影响到嵌入的部件。 pTable:指向子窗口堆内存的指针 1.2. 设置子窗口可以跟随主窗口自适应变化宽度。 水平方向:子窗口的自适应缩放。也可以直接在设计师中完成。 2. 在QTableWidget ui表格的 cpp文件中设

    2023年04月21日
    浏览(80)
  • QT-QTablewidget 设置选中某一行

    要在 QTableWidget 中设置选中的行,可以使用 setCurrentItem() 函数来设置当前的 QTableWidgetItem。你可以通过调用 QTableWidget 的 item() 函数获得指定行和列的 QTableWidgetItem,然后通过将其传递给 setCurrentItem() 函数来设置选中的行。 下面是一个示例代码,演示了如何设置 QTableWidget 中的选

    2024年02月09日
    浏览(43)
  • QT实例2(QTableWidget表格中增删数据)

    本案例仅简单介绍QTableWidget部分使用方法,如在表格中插入或删除一行数据以及清空表格数据等。在添加数据时,设置了条件判断如正则表达式,若用户输入的数据不合法,则添加失败并提示用户错误的地方,便于用户修改。 如上图所示,使用QWidget类创建并设置UI界面,其中

    2024年02月01日
    浏览(34)
  • Qt编程基础 | 第六章-窗体 | 6.3、QTableWidget

    QTableWidget是QT中的表格组件类,一般用来展示多行多列的数据,是QT中使用较多的控件之一。QTableWidgetItem用来表示表格中的一个单元格,整个表格都需要用逐个单元格构建起来。 2.1、设置表格的行数与列数 2.2、添加单元格 2.3、表头设置 2.4、设置行表头、列表头是否显示 2.

    2024年02月13日
    浏览(44)
  • Qt的QTableWidget如何在表头增加复选框

    QTableWidget只能对表格中的单元格设置复选框,而且只能进行比较有限的控制,如果需要设置图标,显示居中等等,可能需要自定义Item或可以利用setCellWidget将单元格的控件设置为自定义控件,而表头如果是使用自带的表头则无法通过设置显示出复选框,必须进行自定义表头,

    2024年02月11日
    浏览(44)
  • QT-QTableWidget设置单元项图标和图标大小

    要设置 QIcon 的大小,你可以使用 QPixmap 来加载原始图像,并调用 QPixmap 的 scaled() 函数来缩放图像的尺寸。然后,将缩放后的 QPixmap 设置给 QIcon,最后将 QIcon 设置给 QTableWidgetItem 的图标。 下面是一个示例代码,演示了如何设置 QIcon 的大小: 在示例代码中,我们加载原始图像

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包