Qt常用类(2)QTableWidget、QProgressBar

在这里插入图片描述

1.QTableWidget

1.1简介

QtableWidget是Qt框架中的一个重要组件,用于展示和编辑二维表格数据。它提供了丰富的功能,可以自定义表格的外观和行为,包括表头、行和列的样式、排序、过滤、选择和编辑等。开发者可以通过QtableWidget轻松地创建交互式表格界面,实现数据的展示和管理。无论是简单的数据展示还是复杂的数据操作,QtableWidget都能满足开发需求。

本文第一节介绍QtableWidget各种属性的用法,以及常用的一些信号,最后利用这些特性,制作一个用于下发设备运行参数的表格。该表格可以实现折叠和取消折叠,在源代码中用了事件过滤器实现,也可以用自带的click信号。显示了图标,添加了editline控件和combox控件;设置了简洁的样子,可以在自己工程中将其添加为c++类作为模块的一部分,或者添加为Qt界面师类,在主界面使用“提升为”完成界面类的实例化。(代码链接⬆)

1.2属性方法介绍

隐藏表头,由于表头是QheaderView类,同时在没有表头的情况下,可以用第一行和第一列作为表头,因此在相对简单的场合可以考虑隐藏。

QHeaderView *horizontalHeader = ui->tableWidget->horizontalHeader();
horizontalHeader->setVisible(false);
QHeaderView *verticalHeader = ui->tableWidget->verticalHeader();
verticalHeader->setVisible(false);

表格框线的样式

    ui->tableWidget->setStyleSheet("QTableWidget{ gridline-color:black;border: 1px solid black; }");
    ui->tableWidget->setFrameShape(QFrame::Box);//设置外边框
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//宽度自适应(父对象)
    ui->tableWidget->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);// 设置水平和垂直方向的拉伸因子

⚪创建表格

 ui->tableWidget->setColumnCount(2);
 ui->tableWidget->setRowCount(15);

⚪设置表格字体属性

QFont font;
    font.setFamily("Arial");
    font.setPointSize(10);
    QPalette palette;
    palette.setColor(QPalette::Text, QColor(Qt::black));

⚪设置内容,居中属性

ui->tableWidget->setItem(0, 0, new QTableWidgetItem("属性"));
ui->tableWidget->item(0,1)->setTextAlignment(Qt::AlignCenter);

⚪设置背景色,选中属性

    ui->tableWidget->setItem(11, 0, new QTableWidgetItem(u8"上端位置"));
    ui->tableWidget->setItem(11, 1, new QTableWidgetItem(""));
    ui->tableWidget->item(11,1)->setFlags(Qt::ItemIsEditable|Qt::ItemIsEnabled);

⚪设置combox控件

 comboMode = new QComboBox(ui->tableWidget);
    comboMode->addItem(u8"模式1");
    comboMode->addItem(u8"模式2");
    comboMode->addItem(u8"模式3");
    comboMode->setCurrentIndex(0);
    connect(comboMode, &QComboBox::currentTextChanged, [=](const QString& text){
        if(text == "模式1" || text == "模式2"){
            ui->tableWidget->item(9,1)->setText("");
            ui->tableWidget->item(9,1)->setFlags(Qt::NoItemFlags);
        }
        else{
            ui->tableWidget->item(9,1)->setFlags(Qt::ItemIsEnabled|Qt::ItemIsEditable);
        }
    });

⚪设置lineedit、label的控件作为表格内容

  QWidget* wCell0 = new QWidget(ui->tableWidget);
    QHBoxLayout* subExposeLayout = new QHBoxLayout(wCell0);
    edit1 = new QLineEdit(wCell0);
    QLabel* lab1  = new QLabel(wCell0);
    edit1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//填充整个空间
    wCell0->setStyleSheet("QLineEdit { background:transparent ;border: none; }");
    subExposeLayout->addWidget(edit1, 2);
    subExposeLayout->addWidget(lab1, 1);
    lab1->setText("us");
    subExposeLayout->setMargin(0);
    subExposeLayout->setSpacing(0);
    ui->tableWidget->setCellWidget(7, 1, wCell0);

⚪添加图标

ui->tableWidget->item(1,0)->setIcon(QIcon(":/res/pullDown.jpg"));

1.3常见信号

Cell开头的信号携带的参数是行x列,Item开头的信号携带的参数是item,每一项,各信号的名字也都可顾名思义,在源代码中,使用事件过滤器实现鼠标的单击事件,没有用自带的click信号。生成的界面效果如图:
​​在这里插入图片描述

​​

2.QProgrssBar进度条

QProgressBar是一个常用的进度条控件,用于显示任务或操作的进度。它通常用于提示用户当前任务的完成情况,让用户清楚地了解任务的进度。可以通过设置最大值和当前值来显示进度。它可以显示水平进度条、垂直进度条或者一个不确定的进度条,根据应用程序的需求选择合适的样式。在Qt中,QProgressBar的外观和行为可以通过样式表进行自定义,使其与应用程序的UI风格保持一致。同时,QProgressBar还提供了一些方法和信号,可以帮助开发者更方便地控制和监控进度条的状态。
进度条部件结合定时器将实现进度条的简单应用。单击start按钮,进度条每秒加一,单击end,进度条停止,溢出从10%开始。

2.1.h中声明函数与变量

publicvoid Init();
    void doProcessStart();
    void doProcessEnd();
    void doProcessTimeOut();
    QTimer * myTimer;
    int num;

2.2实现、调用初始化函数Init();

//.cpp中实现
void MainWindow::Init()
{
    num = 0;
    connect(ui->btn_start,&QPushButton::clicked,this,&MainWindow::doProcessStart);
    connect(ui->btn_end,&QPushButton::clicked,this,&MainWindow::doProcessEnd);
    myTimer = new QTimer(this);
    connect(myTimer,&QTimer::timeout,this,&MainWindow::doProcessTimeOut);
}
//构造函数中调用
 MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();
}

2.3实现doProcess函数

void MainWindow::doProcessStart()
{
    myTimer->start(1000);
}
void MainWindow::doProcessEnd()
{
    myTimer->stop();
}
void MainWindow::doProcessTimeOut()
{
    num++;
    if(num==101)
    {
        num = 10;
    }
    ui->progressBar->setValue(num);
}

2.4代码与效果

单击start按钮,开启定时器;单击end按钮,关闭定时器;定时器开启之后,进度条会以1S为间隔加1,当进度条为100%时,从10%开始继续。
在这里插入图片描述

3.传送门

END

🎏文章原创,首发于CSDN论坛。
🎏欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🎏欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FPGArea

原创不易,请多支持

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

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

打赏作者

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

抵扣说明:

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

余额充值