描述: VS+QT 4.8.4
1 创建表格步骤网上一大堆,在这里这是谈下开发中得一些 技巧
我的表格手动拖上去的,懒得敲代码 ,手动 创建了 7 个列,后面又图
ui->table->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中一行,
ui->table->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁止编辑
2 为7个列设置大小
ui->table->horizontalHeader()->resizeSection(0,120);
ui->table->horizontalHeader()->resizeSection(1,60);
ui->table->horizontalHeader()->resizeSection(2,100);
ui->table->horizontalHeader()->resizeSection(3,100);
ui->table->horizontalHeader()->resizeSection(4,80);
ui->table->horizontalHeader()->resizeSection(5,50);
ui->table->horizontalHeader()->resizeSection(6,100);
3 设置表头每一项的文字对齐方式,这个是局中
for(int i=0;i<7;i++) //设置表头居中
{
ui->table->horizontalHeaderItem(i)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
}
4 设置表头样式 //设置表头字体,颜色,模式
QIcon icon("./logo.ico");
ui->table->horizontalHeaderItem(0)->setIcon(icon);
ui->table->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color:lightblue;color: black;padding-left: 4px;border: 1px solid #6c6c6c;}");
以上效果如下
5 得到一个绝对路径,如何获取 图片的文件名 大小 格式 尺寸 等
eg: QString s=C:/Users/Administrator/Desktop/myPic/images/7.jpg
QString filename; //文件名
QString foldername; //目录
QString suffix;
/* 去除后缀 */
QString str= s.section(".", 0, -2);//去掉 .*
qDebug()<<str; //C:/Users/Administrator/Desktop/myPic/images/7
/* 获取文件名 ,包含后缀 */
filename = str.section("/",-1);
qDebug()<<filename; //7
/* 获取文件格式 */
suffix= filepath.section(".", -1, 1);
qDebug()<<suffix; // jpg
/* 获取文件尺寸 */
QImage image(s);
int w=image.width();
int h=image.height();
QString imagesize=QString::number(w)+QString(" * ")+QString::number(h); //1024*768
/* 获取文件大小 */
QFile f(s);
int filesize=f.size()/1024;
qDebug()<<filesize; // 114
ui->table->setRowCount(line_count+1); //添加一行数据
for(int i=0;i<line_count+1;i++)//设置每行的高度
{
ui->table->setRowHeight(i,20);
}
下面看起来很繁琐 ,但是你想对每一类进行居中只能这样做了,如果可以用一行代码,使得每一行居中显示可以告诉我,感激不尽啊
QTableWidgetItem *item0 =new QTableWidgetItem(filename);
ui->table->setItem(line_count,0,item0);
item0->setCheckState(Qt::PartiallyChecked); //设置复选框
QIcon icon(s); // 设置图标
item0->setIcon(icon);
item0->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *item1 =new QTableWidgetItem(suffix);
ui->table->setItem(line_count,1,item1);
item1->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *item2 =new QTableWidgetItem(imagesize);
ui->table->setItem(line_count,2,item2);
item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *item3 =new QTableWidgetItem(QString::number(filesize));
ui->table->setItem(line_count,3,item3);
item3->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *item4 =new QTableWidgetItem("NO");
ui->table->setItem(line_count,4,item4);
item4->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *item6 =new QTableWidgetItem(s);
ui->table->setItem(line_count,6,item6);
item6->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
/* 设置按钮 */
QPushButton *pb=new QPushButton();
pb->setText("Set");
pb->setMaximumSize(50,20);
ui->table->setCellWidget(line_count,5,pb);
效果图
6 下面再谈谈双击和单击一行的事件吧!
记得定义 DoubleClickFun(QTableWidgetItem*),和SingleClickFun(QTableWidgetItem*) 哦
/* table signal and slots */
connect(ui->table,SIGNAL(itemDoubleClicked(QTableWidgetItem *)),this,SLOT(DoubleClickFun(QTableWidgetItem*)));
connect(ui->table,SIGNAL(itemPressed(QTableWidgetItem*)),this,SLOT(SingleClickFun(QTableWidgetItem*)));
看函数名就知道啥意思了
7 现在要做的是如何双击一行或单击一行,获得该行的信息
1 )获取某项信息 ,如果你想要所有的信息,加个for循环就可以了 ,我这里获取的是path 的文件路径,因为我做的是双击或单击后显示图片
QList<QTableWidgetItem*>items=ui->table->selectedItems();
int count=items.count();
int row=ui->table->row(items.at(5));//获取选中的行
QTableWidgetItem*item=items.at(5);
filepath=item->text();//获取内容
qDebug()<<"text:"<<filepath;
2) 文件路径获取后就好办了
a 弹出一个界面
Dialog * d=new Dialog(this);
d->exec();
b 设置一张图片
QPixmap p(filepath);
ui->picLabel->setPixmap(p);
ui->picLabel->setScaledContents(1);
效果图
8 好东西记得多多分享啊!