ui_tablewidgettest.h
/********************************************************************************
** Form generated from reading UI file 'qtablewidgettest.ui'
**
** Created by: Qt User Interface Compiler version 5.14.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_QTABLEWIDGETTEST_H
#define UI_QTABLEWIDGETTEST_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_QTableWidgetTestClass
{
public:
QTableWidget *tableWidget;
QPushButton *pushButton;
void setupUi(QWidget *QTableWidgetTestClass)
{
if (QTableWidgetTestClass->objectName().isEmpty())
QTableWidgetTestClass->setObjectName(QString::fromUtf8("QTableWidgetTestClass"));
QTableWidgetTestClass->resize(1433, 616);
tableWidget = new QTableWidget(QTableWidgetTestClass);
if (tableWidget->columnCount() < 2)
tableWidget->setColumnCount(2);
QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
tableWidget->setHorizontalHeaderItem(0, __qtablewidgetitem);
QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem();
tableWidget->setHorizontalHeaderItem(1, __qtablewidgetitem1);
if (tableWidget->rowCount() < 2)
tableWidget->setRowCount(2);
QTableWidgetItem *__qtablewidgetitem2 = new QTableWidgetItem();
tableWidget->setVerticalHeaderItem(0, __qtablewidgetitem2);
QTableWidgetItem *__qtablewidgetitem3 = new QTableWidgetItem();
tableWidget->setVerticalHeaderItem(1, __qtablewidgetitem3);
tableWidget->setObjectName(QString::fromUtf8("tableWidget"));
tableWidget->setGeometry(QRect(90, 80, 700, 261));
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(tableWidget->sizePolicy().hasHeightForWidth());
tableWidget->setSizePolicy(sizePolicy);
tableWidget->setStyleSheet(QString::fromUtf8("\n"
"QHeaderView::section{\n"
" background-color: qlineargradient(spread:reflect, x1:1, y1:0.483, x2:1, y2:1, stop:0.149254 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));\n"
" color:white;\n"
" border:1px solid rgba(122,122,122,255);\n"
"}\n"
"QHeaderView::section:checked{ /*\351\274\240\346\240\207\351\200\211\344\270\255*/\n"
" background-color:rgb(255, 255, 0,230);\n"
"}\n"
"QHeaderView::section:hover{ /*\351\274\240\346\240\207\346\202\254\345\201\234*/\n"
" background-color:rgba(85, 255, 0,230);\n"
"}\n"
"QTableWidget{\n"
" background-color:rgb(27, 122, 239);\n"
" \n"
" \n"
" alternate-background-color: rgb(0, 0, 255);\n"
" \n"
" color:white;\n"
"}\n"
"\n"
"\n"
"\n"
"\n"
""));
tableWidget->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
tableWidget->setAlternatingRowColors(true);
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
tableWidget->setSortingEnabled(true);
tableWidget->horizontalHeader()->setCascadingSectionResizes(true);
tableWidget->horizontalHeader()->setMinimumSectionSize(50);
tableWidget->horizontalHeader()->setDefaultSectionSize(100);
tableWidget->horizontalHeader()->setStretchLastSection(false);
tableWidget->verticalHeader()->setCascadingSectionResizes(true);
tableWidget->verticalHeader()->setMinimumSectionSize(30);
tableWidget->verticalHeader()->setDefaultSectionSize(50);
tableWidget->verticalHeader()->setProperty("showSortIndicator", QVariant(true));
tableWidget->verticalHeader()->setStretchLastSection(false);
pushButton = new QPushButton(QTableWidgetTestClass);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(100, 400, 93, 28));
retranslateUi(QTableWidgetTestClass);
QObject::connect(pushButton, SIGNAL(clicked()), QTableWidgetTestClass, SLOT(Del()));
QObject::connect(tableWidget, SIGNAL(cellEntered(int,int)), QTableWidgetTestClass, SLOT(CellEntered(int,int)));
QObject::connect(tableWidget, SIGNAL(itemEntered(QTableWidgetItem*)), QTableWidgetTestClass, SLOT(ItemEntered(QTableWidgetItem*)));
QObject::connect(tableWidget, SIGNAL(cellClicked(int,int)), QTableWidgetTestClass, SLOT(Click(int,int)));
QObject::connect(tableWidget, SIGNAL(cellDoubleClicked(int,int)), QTableWidgetTestClass, SLOT(DoubleClick(int,int)));
QObject::connect(tableWidget, SIGNAL(cellChanged(int,int)), QTableWidgetTestClass, SLOT(ChangeText(int,int)));
QMetaObject::connectSlotsByName(QTableWidgetTestClass);
} // setupUi
void retranslateUi(QWidget *QTableWidgetTestClass)
{
QTableWidgetTestClass->setWindowTitle(QCoreApplication::translate("QTableWidgetTestClass", "QTableWidgetTest", nullptr));
QTableWidgetItem *___qtablewidgetitem = tableWidget->horizontalHeaderItem(0);
___qtablewidgetitem->setText(QCoreApplication::translate("QTableWidgetTestClass", "\345\210\2271", nullptr));
QTableWidgetItem *___qtablewidgetitem1 = tableWidget->horizontalHeaderItem(1);
___qtablewidgetitem1->setText(QCoreApplication::translate("QTableWidgetTestClass", "\345\210\2272", nullptr));
QTableWidgetItem *___qtablewidgetitem2 = tableWidget->verticalHeaderItem(0);
___qtablewidgetitem2->setText(QCoreApplication::translate("QTableWidgetTestClass", "\350\241\2141dfdfdfsdfsdfsdf", nullptr));
QTableWidgetItem *___qtablewidgetitem3 = tableWidget->verticalHeaderItem(1);
___qtablewidgetitem3->setText(QCoreApplication::translate("QTableWidgetTestClass", "\350\241\2142", nullptr));
pushButton->setText(QCoreApplication::translate("QTableWidgetTestClass", "Del", nullptr));
} // retranslateUi
};
namespace Ui {
class QTableWidgetTestClass: public Ui_QTableWidgetTestClass {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_QTABLEWIDGETTEST_H
qtablewidgettest.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_qtablewidgettest.h"
#include "HeaderSize.h"
class QTableWidgetTest : public QWidget
{
Q_OBJECT
public:
QTableWidgetTest(QWidget *parent = Q_NULLPTR);
int getVerticalSize(int eachColumnSize);
int getHorizeSize(int eachRowHight);
void resizeQtable(int ColumnSize,int RowHight);
public slots:
void Del();
void ItemEntered(QTableWidgetItem* item);
void CellEntered(int row,int column);
void Click(int, int); //单击
void DoubleClick(int, int); //双击
void ChangeText(int, int); //修改文本内容
void SectionClicked(int); //顶部标题点击
private:
Ui::QTableWidgetTestClass ui;
};
qtablewidgettest.cpp
#include "qtablewidgettest.h"
#include <QDebug>
#include <QSize>
#include <QLabel>
#include <set>
#include <QMessageBox>
class MyHead :public QTableWidgetItem
{
public:
MyHead(QString txt) :QTableWidgetItem(txt)
{
}
~MyHead()
{
qDebug() << this->text() << "removed!";
}
};
QTableWidgetTest::QTableWidgetTest(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
//清空所有标题和内容
ui.tableWidget->setColumnCount(0);
ui.tableWidget->setRowCount(0);
//插入水平标题
ui.tableWidget->setColumnCount(5);
ui.tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Head1"));
ui.tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem);
ui.tableWidget->horizontalHeaderItem(1)->setText("Head2");
ui.tableWidget->setHorizontalHeaderItem(2, new MyHead("H3"));
//插入标题,会清零之前的对象
ui.tableWidget->setHorizontalHeaderItem(2, new MyHead("Head3"));
ui.tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Head4"));
ui.tableWidget->setHorizontalHeaderItem(4, new QTableWidgetItem("Head5"));
//设置垂直标题
ui.tableWidget->setRowCount(3);
QStringList list = {"col1","col2","col3"};
//list,push_back("col1");
ui.tableWidget->setVerticalHeaderLabels(list);
/*ui.tableWidget->resize(eachwidth * colcount+ HeaderSize().HorizonSize(ui.tableWidget).size, rowcount* horizeWidth+ HeaderSize().VerticalSize(ui.tableWidget).size);
qDebug() << HeaderSize().HorizonSize(ui.tableWidget).size;
qDebug() << HeaderSize().VerticalSize(ui.tableWidget).size;*/
//插入数据
ui.tableWidget->setItem(0,0,new QTableWidgetItem("col 0,0"));
ui.tableWidget->setItem(0, 1, new QTableWidgetItem("col 0,1"));
ui.tableWidget->setItem(0, 2, new QTableWidgetItem("col 0,2"));
ui.tableWidget->setItem(1, 0, new QTableWidgetItem("col 1,0"));
ui.tableWidget->setItem(2, 0, new QTableWidgetItem("col 2,0"));
//结尾添加一行
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row,0,new QTableWidgetItem("new row 4"));
//开始添加一行
ui.tableWidget->insertRow(0);
ui.tableWidget->setItem(0,0,new QTableWidgetItem("new row 0"));
//插入QIcon图片
ui.tableWidget->setItem(0,1,new QTableWidgetItem("new row 1"));
ui.tableWidget->item(0, 1)->setIcon(QIcon("qt.PNG"));
//设置行高
ui.tableWidget->setIconSize(QSize(ui.tableWidget->rowHeight(0), ui.tableWidget->rowHeight(0)));
//插入widget图片
QLabel* img = new QLabel();
QPixmap pix("qt.PNG");
//缩放到和表格单元的宽高一致
pix = pix.scaled(ui.tableWidget->columnWidth(0),ui.tableWidget->rowHeight(row));
img->setPixmap(pix);
ui.tableWidget->setCellWidget(row,0,img);
resizeQtable(200, 50);
//设置鼠标跟踪
ui.tableWidget->setMouseTracking(true);
//标题栏点击信号
connect(ui.tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(SectionClicked(int)));
}
int QTableWidgetTest::getVerticalSize(int eachColumnSize)
{
//设置标题列的宽度
int colcount = ui.tableWidget->columnCount(); //获取列标题数目
// int width = ui.tableWidget->width(); //获取tableWidget宽度
//int eachColumnSize = 200; //设置每个宽度为200
// int width1 = ui.tableWidget->verta
// qDebug() << width1;
for (int i = 0; i < colcount; i++)
{
ui.tableWidget->setColumnWidth(i, eachColumnSize);
}
return colcount * eachColumnSize;
}
int QTableWidgetTest::getHorizeSize(int eachRowHight)
{
/*int verticalWidth = ui.tableWidget->verticalHeader()->defaultSectionSize();*/
int rowcount = ui.tableWidget->rowCount(); //获取行标题数目
for (int i = 0; i < rowcount; i++)
{
ui.tableWidget->setRowHeight(i, eachRowHight);
}
return eachRowHight * rowcount;
}
void QTableWidgetTest::resizeQtable(int eachColumnSize, int eachRowHight)
{
int ColumnSize = getVerticalSize(eachColumnSize) + HeaderSize(ui.tableWidget).vsize;
int RowHight = getHorizeSize(eachRowHight) + HeaderSize(ui.tableWidget).hsize;
ui.tableWidget->resize(ColumnSize, RowHight);
qDebug() << HeaderSize(ui.tableWidget).vsize;
qDebug() << HeaderSize(ui.tableWidget).hsize;
}
void QTableWidgetTest::Del()
{
//空行无法选择
QList<QTableWidgetItem*> items = ui.tableWidget->selectedItems();
qDebug() << "=====================================";
for (int i = 0; i < items.size(); i++)
{
qDebug() << items[i]->row() << ":" << items[i]->column() << "text=" << items[i]->text();
}
//选择模式器
QItemSelectionModel* smodel = ui.tableWidget->selectionModel();
//获取所有的选择索引
QModelIndexList slist = smodel->selectedIndexes();
//获取所有被选中的符号
std::set<int> rows;
for (int i = 0; i < slist.size(); i++)
{
//重复的插入失败
rows.insert(slist[i].row());
}
//给用户提示
QString msg = QStringLiteral("您确认删除:");
for (std::set<int>::iterator itr = rows.begin(); itr != rows.end(); itr++)
{
QTableWidgetItem* item = ui.tableWidget->item(*itr,0);
msg += "[";
msg += QString::number(*itr+1);
msg += ":";
if (item)
msg += item->text();
msg += "]";
}
int re = QMessageBox::information(this,"",msg,QStringLiteral("确认"),QStringLiteral("取消"));
if (re != 0) //点击取消按钮
{
return;
}
for (;;)
{
//获取所有选择索引
QModelIndexList s = smodel->selectedIndexes();
if (s.size() <= 0)break;
//每次只删除一行
ui.tableWidget->removeRow(s[0].row());
}
}
void QTableWidgetTest::ItemEntered(QTableWidgetItem* item)
{
QString msg = "ItemEntered = ";
if (item)
{
msg += QString::number(item->row());
msg += ",";
msg += QString::number(item->column());
msg += " ";
msg += item->text();
}
qDebug() << msg;
}
void QTableWidgetTest::CellEntered(int row, int column)
{
QString msg = "CellEntered = ";
QTableWidgetItem* item = ui.tableWidget->item(row, column);
if (item)
{
msg += QString::number(item->row());
msg += ",";
msg += QString::number(item->column());
msg += " ";
msg += item->text();
}
qDebug() << msg;
}
void QTableWidgetTest::Click(int row, int column)
{
QString msg = "Click = ";
QTableWidgetItem* item = ui.tableWidget->item(row, column);
if (item)
{
msg += QString::number(item->row());
msg += ",";
msg += QString::number(item->column());
msg += " ";
msg += item->text();
}
qDebug() << msg;
}
void QTableWidgetTest::DoubleClick(int row, int column)
{
QString msg = "DoubleClick = ";
QTableWidgetItem* item = ui.tableWidget->item(row, column);
if (item)
{
msg += QString::number(item->row());
msg += ",";
msg += QString::number(item->column());
msg += " ";
msg += item->text();
}
qDebug() << msg;
}
void QTableWidgetTest::ChangeText(int row, int column)
{
QString msg = "ChangeText = ";
QTableWidgetItem* item = ui.tableWidget->item(row, column);
if (item)
{
msg += QString::number(item->row());
msg += ",";
msg += QString::number(item->column());
msg += " ";
msg += item->text();
}
qDebug() << msg;
}
void QTableWidgetTest::SectionClicked(int col)
{
//获取标题文本
QTableWidgetItem* h = ui.tableWidget->horizontalHeaderItem(col);
qDebug() << "SectionClicked " << col;
if (h)
{
qDebug() << h->text();
}
}
HeaderSize.h
#pragma once
#include <QTableWidget>
class HeaderSize
{
public:
HeaderSize(QTableWidget* table);
HeaderSize& HorizonSize(QTableWidget* table);
HeaderSize& VerticalSize(QTableWidget* table);
int getPointSize();
int getWordSize();
friend class QTableWidgetTest;
int getvsize();
int gethsize();
private:
int pointsize;
int wordsize;
int size;
int vpointsize;
int vwordsize;
int vsize;
int hpointsize;
int hwordsize;
int hsize;
};
HeaderSize.cpp
#include "HeaderSize.h"
HeaderSize::HeaderSize(QTableWidget* table)
:
vpointsize(table->horizontalHeaderItem(1)->font().pointSize()),
vwordsize(table->horizontalHeaderItem(1)->text().size()),
vsize(vpointsize* vwordsize),
hpointsize(table->verticalHeaderItem(1)->font().pointSize()),
hwordsize(table->verticalHeaderItem(1)->text().size()),
hsize(hpointsize* hwordsize)
{
/* vpointsize = table->horizontalHeaderItem(1)->font().pointSize();
vwordsize = table->horizontalHeaderItem(1)->text().size();
vsize = vpointsize * vwordsize;
hpointsize = table->verticalHeaderItem(1)->font().pointSize();
hwordsize = table->verticalHeaderItem(1)->text().size();
hsize = hpointsize * hwordsize;*/
}
int HeaderSize::getvsize()
{
return vpointsize * vwordsize;
}
int HeaderSize::gethsize()
{
return hpointsize * hwordsize;
}
HeaderSize& HeaderSize::HorizonSize(QTableWidget* table)
{
pointsize = table->horizontalHeaderItem(1)->font().pointSize();
wordsize = table->horizontalHeaderItem(1)->text().size();
size = pointsize * wordsize;
return *this;
}
HeaderSize& HeaderSize::VerticalSize(QTableWidget* table)
{
pointsize = table->verticalHeaderItem(1)->font().pointSize();
wordsize = table->verticalHeaderItem(1)->text().size();
size = pointsize * wordsize;
return *this;
}
int HeaderSize::getPointSize()
{
return pointsize;
}
int HeaderSize::getWordSize()
{
return wordsize;
}