【QT】QTableWidget在表格单元格内添加多个控件,并调整好控件的布局

向表格中单元格内添加控件:

1. 最简单的方式

// 创建按钮
QPushButton *btn_edit = new QPushButton("编辑");

// 编辑按钮样式 
btn_edit->setFixedSize(QSize(120,40));
btn_edit->setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;border-radius: 15px;}"
                            "QPushButton:pressed{background-color:rgb(51,129,172)}");

// 向单元格内添加按钮
ui->table_userAdmin->setCellWidget(rowIndex,6,btn_edit );

在这里插入图片描述
很明显,控件已加入进去,样式设置也生效,但是布局没有控制,视觉效果非常不好。

2.添加布局再添加控件:

// 创建按钮
QPushButton *btn_edit = new QPushButton("编辑");

// 编辑按钮样式 
btn_edit->setFixedSize(QSize(120,40));
btn_edit->setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;border-radius: 15px;}"
                            "QPushButton:pressed{background-color:rgb(51,129,172)}");

QHBoxLayout *vLayout = new QHBoxLayout();//水平布局
QWidget *Widget_btn = new QWidget;	// 新建Widget
vLayout->addWidget(btn_edit);	//布局中添加了控件
Widget_btn->setLayout(vLayout);	//Widget中添加布局
ui->table_userAdmin->setCellWidget(rowIndex,6,Widget_btn);//表格中添加Widget

在这里插入图片描述
很明显。添加布局后更加美观齐整了

3.在一个单元格内添加多个控件
依旧是在布局中设置的:

// 创建按钮
QPushButton *btn_edit = new QPushButton("编辑");
QPushButton *btn_exit = new QPushButton("删除");

// 编辑按钮样式 
btn_edit->setFixedSize(QSize(120,40));
btn_edit->setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;border-radius: 15px;}"
                "QPushButton:pressed{background-color:rgb(51,129,172)}");
btn_exit->setFixedSize(QSize(120,40));
btn_exit->setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;border-radius: 15px;}"
                "QPushButton:pressed{background-color:rgb(51,129,172)}");
connect(btn_edit,SIGNAL(clicked()),this,SLOT(page_userSystem_userAdmin_create_editWidget()));
connect(btn_exit,SIGNAL(clicked()),this,SLOT(page_userSystem_userAdmin_delete_user()));

//水平布局
QHBoxLayout *vLayout = new QHBoxLayout();
// 新建Widget
QWidget *Widget_btn = new QWidget;
// 布局中添加了控件
vLayout->addWidget(btn_edit);
// 布局中添加了水平间隔
vLayout->addSpacing(10);
// 布局中添加了控件
vLayout->addWidget(btn_exit);
// Widget中添加布局
Widget_btn->setLayout(vLayout);
Widget_btn->setStyleSheet("QWidget{ border: 0px }");
//表格中添加Widget
ui->table_userAdmin->setCellWidget(rowIndex,6,Widget_btn);

在这里插入图片描述

4. 触发按钮槽函数如何获取按钮所在行的行号:

QT: QTableWidget 表格中按钮槽函数 获取表格该按钮所在的行号信息

5.补充,如何操作两个按钮

例如:点击编辑,按钮名称更换为已编辑;点击删除,按钮名称更换为已删除
可以先想办法保存下按钮的指针,方便后面操作

vector<QPushButton *> vec_buttonPointer;
// 设置按钮信号槽
connect(btn_edit,SIGNAL(clicked()),this,SLOT(change_edit_name());
connect(btn_exit,SIGNAL(clicked()),this,SLOT(change_exit_name()));
vec_buttonPointer.push_back(btn_edit)
vec_buttonPointer.push_back(btn_exit)

实现槽函数:

void change_edit_name()
{
	vec_buttonPointer[0]->setText("已编辑")
}

void change_edit_name()
{
	vec_buttonPointer[1]->setText("已删除")
}
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值