Qt-QTableWidget

20 篇文章 0 订阅

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值