#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
QMap<QPair<int, int>, QString> originalValuesMap;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// ui->checkBox->setTristate(true);
// ui->checkBox_2->setTristate(true);
// ui->checkBox_3->setTristate(true);
//Qt 4
// connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentIndexChanged(int)));
// connect(ui->comboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(currentIndexChanged(QString)));
//Qt 5
connect(ui->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](int index){
QMessageBox::information(this, "index", QString::number(index));
});
connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](const QString &text){
QMessageBox::information(this, "text", text);
});
// // 绑定双击单元格修改事件
// connect(ui->tableWidget,&QTableWidget::itemChanged,[=](QTableWidgetItem *item){
// if(!item)
// return;
// int row = item->row();
// int col = item->column();
// qDebug()<<row<<col;
// QString originalValue = originalValuesMap[qMakePair(row, col)];
// QString newValue = item->text();
// qDebug()<<originalValue<<newValue;
// if(originalValue!=newValue)
// {
// // 根据行和列更新数据库中的值
// // 请根据你的数据库连接和表结构进行实际实现
// // 示例:假设表名为 YourTable,列名为 Column1 和 Column2
// // QSqlQuery query;
// // query.prepare("UPDATE YourTable SET Column" + QString::number(col + 1) + " = :value WHERE ID = :id");
// // query.bindValue(":value", newValue);
// // query.bindValue(":id", row + 1); // Assuming ID is a unique identifier for each row
// // query.exec();
// }
// });
// 绑定双击事件到槽函数
connect(ui->tableWidget,&QTableWidget::doubleClicked,[=]{
//没有选中行
if(ui->tableWidget->currentRow()<0)
return;
//选中行第1列 id
int nID = ui->tableWidget->item(ui->tableWidget->currentRow(),0)->text().toInt();
//选中行第2列 name
QString strName = ui->tableWidget->item(ui->tableWidget->currentRow(),1)->text();
//选中行第3列 pwd
QString strPwd = ui->tableWidget->item(ui->tableWidget->currentRow(),2)->text();
qDebug()<<nID<<strName<<strPwd;
QMessageBox::information(this,"提示","这是"+QString::number(nID)+" "+strName+" "+strPwd);
});
//初始化表格样式
//横表头颜色
ui->tableWidget->setStyleSheet("QHeaderView::section:horizontal{border-bottom:1px solid rgb(255, 255, 255);background-color: rgb(60, 120, 180);color: rgb(255, 255, 255);}");
//调整每一列的宽度,使其适应该列中最宽的内容。确保表格内容以最佳方式显示。
ui->tableWidget->resizeColumnsToContents();
//隐藏行表头=false
ui->tableWidget->verticalHeader()->setVisible(true);
//隐藏列表头=false
ui->tableWidget->horizontalHeader()->setVisible(true);
//无法通过点击表头来进行排序
ui->tableWidget->horizontalHeader()->setSectionsClickable(false);
//列宽设置
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
//QHeaderView::Stretch:根据窗口大小将每列等比填满,并随窗口变化变化
//QHeaderView::ResizeToContents:根据内容自适应
//不能通过双击单元格或其他方式直接编辑表格中的内容
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
//选中方式 为 整行选中
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableWidget->setRowCount(6); //行数 6行
ui->tableWidget->setColumnCount(4); //列数 4列
ui->tableWidget->setHorizontalHeaderLabels({"列表头ID","列表头Name","列表头Pwd","按钮"});
//隐藏第一列 第一列一般都是用于删除和修改用的id
// ui->tableWidget->setColumnHidden(0,true);
//列表头高度
// ui->tableWidget->horizontalHeader()->setMinimumHeight(50);
//设置第一列宽度=100 注意与上边的 列宽设置 有冲突,列宽设置会覆盖此项设置
// ui->tableWidget->setColumnWidth(0,200);
//设置第一行高度
// ui->tableWidget->setRowHeight(0,50);
//初始化表格数据
for (int i = 0; i < 6; ++i) {
//给第一列ID赋值
ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString("%1").arg(i)));
//给第二列Name赋值
ui->tableWidget->setItem(i, 1, new QTableWidgetItem("name"+QString::number(i)));
//给第三列Pwd赋值
ui->tableWidget->setItem(i, 2, new QTableWidgetItem("123"+QString::number(i)));
//第四列动态创建按钮
QPushButton *btn = new QPushButton();
btn->setText("按钮"+QString::number(i));
connect(btn,&QPushButton::clicked,[=]{
//选中行第1列 id
int nID = ui->tableWidget->item(i,0)->text().toInt();
//选中行第2列 name
QString strName = ui->tableWidget->item(i,1)->text();
//选中行第3列 pwd
QString strPwd = ui->tableWidget->item(i,2)->text();
QMessageBox::information(this,"提示","这是"+btn->text()+" "+strName+" "+strPwd);
});
//按钮样式 可以通过代码实现,也可以通过样式实现
// btn->setMinimumWidth(80);
btn->setStyleSheet("QPushButton{border:none;background-color: rgb(60, 120, 180);color:rgb(255, 255, 255);border-radius:5px;width:80px;height:40px;}QPushButton:hover{background-color: rgb(255, 170, 0);}");
ui->tableWidget->setCellWidget(i,3,btn);
}
// for (int row = 0; row < ui->tableWidget->rowCount(); ++row) {
// for (int col = 0; col < ui->tableWidget->columnCount()-1; ++col) {
// // Store the original value in the map
// originalValuesMap[qMakePair(row, col)] = ui->tableWidget->item(row,col)->text();
// }
// }
}
void MainWindow::on_pushButton_clicked()
{
//没有选中行
if(ui->tableWidget->currentRow()<0)
return;
int i = ui->tableWidget->currentRow();
//选中行第1列 id
int nID = ui->tableWidget->item(i,0)->text().toInt();
//选中行第2列 name
QString strName = ui->tableWidget->item(i,1)->text();
//选中行第3列 pwd
QString strPwd = ui->tableWidget->item(i,2)->text();
qDebug()<<nID<<strName<<strPwd;
}
void MainWindow::currentIndexChanged(int index)
{
QMessageBox::information(this,"index",QString::number(index));
}
void MainWindow::currentIndexChanged(QString text)
{
QMessageBox::information(this,"text",text);
}
MainWindow::~MainWindow()
{
delete ui;
}