文章目录
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中声明函数与变量
public:
void 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论坛。
🎏欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🎏欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。