qt5--表格控件QTableWidget


需要    #include <QTableWidget>      #include <QTableWidgetItem>     

#include "win.h"
#include <QDebug>
#include <QPushButton>
#include <QList>

Win::Win(QWidget *parent)
    : QWidget(parent)
{
    this->resize(500,400);

    QPushButton* btn=new QPushButton("按鈕",this);
    btn->move(400,350);
    connect(btn,&QPushButton::clicked,this,&Win::A);

    tw=new QTableWidget(this);  //創建空表格控件
    //tw=new QTableWidget(4,3,this);//創建4行3列表格控件
    tw->move(10,10);
    tw->resize(400,300);
    tw->setRowCount(15);//設置行數--不包括標題
    tw->setColumnCount(3);//設置列數
    tw->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性別"<<"物理");//設置水平標題
    //tw->setVerticalHeaderLabels(QStringList()<<"姓名"<<"性別"<<"年齡");//設置垂直標題

    QTableWidgetItem* item0V0=new QTableWidgetItem("張三");
    tw->setItem(0,0,item0V0);  //給指定單元格設置數據
    //參數1 行號
    //參數2 列號
    tw->setItem(1,0,new QTableWidgetItem("李四"));  //給指定單元格設置數據
    tw->setItem(2,0,new QTableWidgetItem("王五"));
    tw->setItem(3,0,new QTableWidgetItem("張三ab"));
    tw->setItem(4,0,new QTableWidgetItem("熊五"));
    tw->setItem(5,0,new QTableWidgetItem("劉六"));
    tw->setItem(6,0,new QTableWidgetItem("邢七"));
    tw->setItem(7,0,new QTableWidgetItem("宋八"));
    tw->setItem(8,0,new QTableWidgetItem("尚九"));
    tw->setItem(9,0,new QTableWidgetItem("施十"));
    tw->setItem(10,0,new QTableWidgetItem("陳十一"));
    tw->setItem(11,0,new QTableWidgetItem("程十二"));
    tw->setItem(12,0,new QTableWidgetItem("洪十三"));
    tw->setItem(13,0,new QTableWidgetItem("齊十四"));
    tw->setItem(14,0,new QTableWidgetItem("謝十五"));

    tw->setItem(0,2,new QTableWidgetItem(QString::number(86)));
    //QString::number(86)---int轉成 QString
    tw->setItem(1,2,new QTableWidgetItem(QString::number(57)));
    tw->setItem(2,2,new QTableWidgetItem(QString::number(76)));
    tw->setItem(3,2,new QTableWidgetItem(QString::number(69)));

    //tw->insertRow(1);//插入一行
    //參數  行索引

    //tw->insertColumn(1);//插入一列
    //參數  列索引

    QList<QTableWidgetItem*> items= tw->findItems("張三Ab",Qt::MatchContains);//找出匹配的項目
    //Qt::MatchExactly    完全匹配才算
    //Qt::MatchContains   只要包含指定文本的就算-- 不區分大小寫
    //返回值:項目列表

    QTableWidgetItem* item;
    item=items.first();//返回項目列表中的第一個項目指針
    int i=item->row();//返回項目的行序號


    i=tw->rowCount();  //返回 表格的行數--不包括標題
    i=tw->columnCount(); // 返回表格的列數


    tw->setColumnWidth(0,50);//設置列寬
    //參數1 列序號
    //參數2 列寬
    tw->setRowHeight(0, 50);     //設置行高,第一個參數序號,第二個參數高度值
    tw->setShowGrid(true); //設置是否顯示表格上的網格線,True為顯示(默認),False不顯示
    item0V0->setTextAlignment(Qt::AlignCenter); //設置項目的文本對齊方式
    //tw->setSpan(1, 0, 2, 2);  //用來合並單元格,前兩個int參數分別為起始行序號和列序號,后兩個分別為要合並的行數和列數

    connect(tw,&QTableWidget::itemClicked,this,&Win::B);  //單擊表格控件時觸發的信號
    //這個信號自動傳遞一個參數:被單擊項目的指針
    // itemDoubleClicked(QTableWidgetItem *item)  雙擊表格控件時觸發的信號

    connect(tw,&QTableWidget::itemSelectionChanged,this,&Win::C);//選擇的項目發生變化時觸發信號
    connect(tw,&QTableWidget::currentItemChanged,this,&Win::D);//當前項目變化時觸發信號
    //這個信號自動傳遞二個參數:當前項目指針    前一項目指針
    connect(tw,&QTableWidget::currentCellChanged,this,&Win::E);//當前單元格變化時觸發信號
    //這個信號自動傳遞四個參數:當前行序號  當前列序號 前一行序號 前一列序號
    connect(tw,&QTableWidget::itemChanged,this,&Win::F);//項目內容發生變化時觸發信號
    //這個信號自動傳遞一個參數:變化后的項目指針
    connect(tw,&QTableWidget::itemPressed,this,&Win::G);//在項目上按下了鼠標時觸發信號
    //這個信號自動傳遞一個參數:按下鼠標的項目指針
    connect(tw,&QTableWidget::cellChanged,this,&Win::H);//單元格內容發生了修改,編輯完畢時觸發信號
    //包括用戶和指令修改
    //這個信號自動傳遞二個參數:單元格的行序號和列序號
    connect(tw,&QTableWidget::cellClicked,this,&Win::I);//單擊單元格時觸發信號
    //這個信號自動傳遞二個參數:單元格的行序號和列序號

    //cellDoubleClicked(int row, int column)   雙擊單元格時觸發信號

    connect(tw,&QTableWidget::itemActivated,this,&Win::L);//  如何觸發信號 ???

    connect(tw,&QTableWidget::itemEntered,this,&Win::M);//表格沒有焦點時鼠標按下某項目時觸發信號
    //這個信號自動傳遞一個參數:項目指針
}

void Win::M(QTableWidgetItem *item){
    qDebug()<<"鼠標進入了項目:"<<item->text();
}
void Win::L(QTableWidgetItem *item){
    qDebug()<<"激活了項目:"<<item->text();
}
void Win::I(int row, int column){
    qDebug()<<"單擊了單元格:"<<row<<column;
}
void Win::H(int row, int column){
    qDebug()<<"單元格內容變化了:"<<row<<column;
}
void Win::G(QTableWidgetItem *item){
    qDebug()<<"按下了鼠標:"<<item->text();
}
void Win::F(QTableWidgetItem *item){
    qDebug()<<" 項目變化了"<<item->text();
}
void Win::E(int currentRow, int currentColumn, int previousRow, int previousColumn){
    qDebug()<<currentRow<< currentColumn<<previousRow<<previousColumn;
}
void Win::D(QTableWidgetItem *current, QTableWidgetItem *previous){
    qDebug()<<current<<previous;
}

void Win::C(){
    qDebug()<<"選擇的項目變化了";

}

void Win::B(QTableWidgetItem *item){
    qDebug()<<item->text();
    //item->text()    返回項目的文本
}
Win::~Win()
{

}


void Win::A(){
    QTableWidgetItem* item=tw->item(1,2); //返回指定單元格的項目指針
    //item->setText("李明"); //給項目設置文本
    //tw->clear(); //清空表格內容--包括標題欄
    //tw->clearContents();//清空表格內容--不清空標題欄
    //tw->removeRow(1); //刪除指定行--下面行自動上移
    //tw->removeColumn(1);//刪除指定列--右邊列自動左移

    //tw->scrollToItem(item,QAbstractItemView::PositionAtCenter); //滾動條滾到指定項目
    //參數1  項目指針
    //參數2:QAbstractItemView::EnsureVisible    確保滾動后項可見
    //QAbstractItemView::PositionAtTop    確保滾動后項在視口的頂部
    //QAbstractItemView::PositionAtBottom   確保滾動后項在視口的底部
    //QAbstractItemView::PositionAtCenter   確保滾動后項在視口的中心

    int i;
    //i=tw->column(item);//返回項目的列序號
    //空項目返回-1

    //i=tw->columnCount();  //返回表格列的總數
    //i=tw->currentRow();  //返回表格當前行序號
    //i=tw->currentColumn();  //返回表格當前列序號

    //item=tw->currentItem();  //返回當前項目的指針

    //tw->editItem(item);  //如果項目是可編輯的,則開始編輯該項目

    //item=tw->horizontalHeaderItem(2);//返回指定列的標題項目指針
    //如果沒有設置標題,返回空指針

    //QList<QTableWidgetItem *> items=tw->selectedItems();//返回所有選中項目的指針
    //(0xdb929559a0, 0xdb92955620, 0xdb92956b20, 0xdb92954f90)

    QPushButton* btn1=new QPushButton("按鈕1");
    //tw->setCellWidget(8,1,btn1); //在指定單元格設置一個空間
    //參數1 參數2 單元格行序號和列序號

    //tw->removeCellWidget(8,1);//刪除指定單元格的控件

    //tw->setCurrentCell(1,2);  //設置當前單元格

    //tw->setCurrentItem(item);  //設置當前項目

    QTableWidgetItem* item1=new QTableWidgetItem("化學");
    //tw->setHorizontalHeaderItem(2,item1);  //設置指定列的水平標題
    //setVerticalHeaderItem(int row, QTableWidgetItem *item)  設置指定行的垂直標題

    //tw->sortItems(2,Qt::DescendingOrder);  //對指定列進行排序
    //參數1 列序號
    //參數2: Qt::AscendingOrder  升序--默認
    //Qt::DescendingOrder   降序

    //item=tw->takeItem(0,2);  //指定單元格移除項目--項目不刪除
    //返回項目指針

    //QTableWidgetItem * QTableWidget::takeVerticalHeaderItem(int row) //移除表格中的垂直標題頭
    //QTableWidgetItem * verticalHeaderItem(int row) //返回表格中的垂直標題頭



    //tw->item(0,2)->setFlags(Qt::ItemIsUserCheckable);//設置指定單元格的狀態
    //Qt::ItemIsEditable   不能編輯--只讀
    //Qt::ItemIsSelectable  不能選中

    //tableWidget->horizontalHeader()->setStyleSheet(“image: url(:/img/a.png);image-position:left; “); //設置表頭的樣式。





    //qDebug()<<item->text();
}

實例下載地址:https://share.weiyun.com/5XJEW44

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM