天天看點

Qt QTableWidget的使用方式

//QTableWidget行選中/删除/添加行

//1  均分各列
 tableWidget->horizontalHeader()->setStretchLastSection(true); //就是這個地方
 tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
 
//2 整行選中:job_20160526213327
tableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //設定選擇行為,以行為機關
tableWidget->setSelectionMode ( QAbstractItemView::SingleSelection); //設定選擇模式,選擇單行

//3  删除選中的整行
   int rowIndex = m_pAttrbuteList->currentRow();
   if (rowIndex != -1)
     tableWidget->removeRow(rowIndex);
	 
	/* 為了将資料能夠在界面中顯示的更清楚一些,在這裡應用到了tableWidget控件,現将該控件中删除指定行的代碼介紹如下:
	 QTable裡有一個removeRow(int i)函數用來删除目前行,但是如果我們沒有對于table進行任何的選中,那麼QTable是如何傳回的呢?
	 用Qt Creator裡拖了一個tableWidget,加一個按鈕,點選删除後執行*/
	 int i = ui->tableWidget->currentRow();
	 QMessageBox msg;
	 msg.setText(QString::number(i));
	 msg.exec();
	 ui->tableWidget->removeRow(i);
	 /*在不選擇行的情況下發現每次點選後删除的都是第一行,i的輸出都是0,原因其實很簡單,就是因為table的目前焦點在第一樣的 第一個單元格所導緻的,解決的辦法就是讓table失去焦點,在構造函數裡面添加ui->tableWidget->setFocusPolicy(Qt::NoFocus);
	 然後再試,發現點選删除按鈕如果不選中行的話是不能删除的,傳回的i此時是-1。
	 控件剛開始的時候左邊預設自帶序列号,如果想去掉左邊的行号,加上下面的代碼就可以了。*/
      QHeaderView* headerView = table的名字->verticalHeader();
      headerView->setHidden(true);
	  
//4 添加整行
int rowIndex = m_pAttrbuteList->rowCount();
tableWidget->setRowCount(rowIndex + 1);//總行數增加1
tableWidget->setRowHeight(rowIndex, 24);//設定行的高度

--------------------------------------------------------------------------------

QTableWidget *table = new QTableWidget(this);
table->setColumnCount(5);    //設定列數
table->setRowCount(3);        //設定行數/

/*設定列名*/
QStringList headers;
headers<<"列名1"<<"列名2"<<"列名3";
table->setHorizontalHeaderLabels(headers);

/*給單元格添加内容*/
void addItemContent(int row, int column, QString content)
{
      QTableWidgetItem *item = new QTableWidgetItem (content);
      table->setItem(row, column, item);
}

/*給單元格中增加圖示*/
QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL);  //隻加入圖示,沒有字元串
QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString);   //加入圖示和字元串
table->setItem(row, column, item);

/*插入一行*/
int row = table->rowCount();
table->insertRow(row);

/*插入一列*/
int column = table->columnCount();
table->insertColumn(column);

//使行列頭自适應寬度,最後一列将會填充空白部分
table->horizontalHeader()->setStretchLastSection(true);          

//使行列頭自适應寬度,所有列平均分來填充空白部分            
table->horizontalHeader()->setResizeMode(QHeaderView::Strtch);        

//使行自适應高度,假如行很多的話,行的高度不會一直減小,當達到一定值時會自動生成一個QScrollBar
table->verticalHeader()->setResizeMode(QHeaderView::Strtch);

//設定單擊選擇一行
table->setSelectionBehuavior(QAbstractItemView::SelectRows);

//設定每行内容不可編輯
table->setEditTriggers(QAbstractItemView::NoEditTriggers);

//設定隻能選擇一行,不能選擇多行
table->setSelectionMode(QAbstractItemView::SingleSelection);

/*去掉每行的行号*/
QHeaderView *headerView = table->verticalHeader();
headerView->setHidden(true);

/*設定讓某個單元格或某行選中*/
//選中單元格:
table->setCurrentCell(row, column, QItemSelectionModel::Select);
//選中一行:
table->setCurrentCell(row, QItemSelectionModel::Select);//(注意此處的列沒有值)

//設定某一列為不可編輯
for(int i = 0; i<tabelwidget.rowcount();i++)
{
    item(i, colunm)->setFlags(Qt::NoItemFlags);
}