QTableWidget簡單應用之文件瀏覽器


 實現下面這個簡單的文件瀏覽功能,常用的QTableWidget設置都用到了。 
這里寫圖片描述

基本設置

    ui->tableWidget->setColumnCount(5); //設置表格列數 ui->tableWidget->horizontalHeader()->setStretchLastSection(true); //設置表格是否充滿,即行位不留空 ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//設置鼠標選擇行為:一個單元格/一行/一列 ui->tableWidget->horizontalHeader()->setFixedHeight(35); //設置表頭高度 /*設置表頭單元格內容*/ QStringList header; header<<tr("File Name")<<tr("Size")<<tr("Double Click to Decode") << "Double Click to Close"<< tr("Decode Process"); ui->tableWidget->setHorizontalHeaderLabels(header); /*設置表頭字體加粗*/ QFont font = ui->tableWidget->horizontalHeader()->font(); font.setBold(true); ui->tableWidget->horizontalHeader()->setFont(font); ui->tableWidget->setFrameShape(QFrame::NoFrame); //設置無邊框 ui->tableWidget->verticalHeader()->hide(); //設置垂直的頭部隱藏,不隱藏默認會顯示列表數字 ui->tableWidget->horizontalHeader()->resizeSection(0,150); //設置第0列的寬度為150px ui->tableWidget->setItemDelegate(new NoFocusDelegate()); //設置鼠標行時,不顯示單元格虛框,NoFocusDelegate類實現如附錄 ui->tableWidget->setMouseTracking(true); //設置鼠標捕捉,不設置,如鼠標進入等動作檢測不到 ui->tableWidget->setStyleSheet("selection-");//設置行選中時背景顏色 ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:greenyellow;}");//表頭背景顏色 /*信號槽,單元格雙擊*/ connect(ui->tableWidget, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(sdlog2Decode(int,int))); /*信號槽,鼠標進入單元格*/ connect(ui->tableWidget,SIGNAL(itemEntered(QTableWidgetItem*)), this,SLOT(itemEnteredHover(QTableWidgetItem *))); /*添加構件到單元格,如按鈕,進度條等*/ QProgressBar *pgbar = new QProgressBar(ui->tableWidget); pgbar->setTextVisible(false); ui->tableWidget->setCellWidget(row,column,pgbar); //替換當前widget /*設置單元格背景顏色*/ QTableWidgetItem *itemtemp = ui->tableWidget->item(row, col); itemtemp->setBackgroundColor(QColor(255,255,255,255)); ui->tableWidget->removeCellWidget(row,col); //移除單元格中的構件 ui->tableWidget->removeRow(row); //移除表格某一行 int col = ui->tableWidget->columnCount(); //獲取表格列數 int row = ui->tableWidget->rowCount(); //獲取行數 /*插入第row行,以兩列為例*/ ui->tableWidget->insertRow(row); QTableWidgetItem *Item1 = new QTableWidgetItem("hello1"); Item1->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter); Item1->setFlags(Item1->flags() ^ Qt::ItemIsEditable); QTableWidgetItem *Item2 = new QTableWidgetItem("hello2"); //設置單元格內容 Item2->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter); //設置單元格內容對其方式 Item2->setFlags(Item2->flags() ^ Qt::ItemIsEditable); //設置單元格是否可編輯 ui->tableWidget->setItem(row, 0, Item1); ui->tableWidget->setItem(row, 1, Item2); /*設置各種文件icon*/ QFileInfo info; QFile file(currentDir.absoluteFilePath(filesname)); info = QFileInfo(filesname); qint64 size = info.size(); QFileIconProvider icon_provider; QIcon icon = icon_provider.icon(info); QTableWidgetItem *fileNameItem = new QTableWidgetItem(info.filePath()); fileNameItem->setIcon(icon); fileNameItem->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter); fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);

附錄程序

NoFocusDelegate.h
#ifndef NoFocusDelegate_H #define NoFocusDelegate_H #include <QPainter> #include <QStyledItemDelegate> class NoFocusDelegate :public QStyledItemDelegate { public: NoFocusDelegate(); ~NoFocusDelegate(); protected: void paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const; }; #endif // SETHIGHLIGHTSECTIONS_H
NoFocusDelegate.cpp
#include "NoFocusDelegate.h" NoFocusDelegate::NoFocusDelegate() { } NoFocusDelegate::~NoFocusDelegate() { } void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const { QStyleOptionViewItem itemOption(option); if (itemOption.state & QStyle::State_HasFocus) { itemOption.state = itemOption.state ^ QStyle::State_HasFocus; } QStyledItemDelegate::paint(painter, itemOption, index); } 

http://blog.csdn.net/freeape/article/details/47404265

 


免責聲明!

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



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