qt中tablewidget 浅谈

描述: 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;}");  

以上效果如下

 084727_LB4z_1779562.png

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

效果图

085941_fnUB_1779562.png

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

效果图

091032_BWNZ_1779562.png

 

8 好东西记得多多分享啊!

 

 

 

 

转载于:https://my.oschina.net/u/1779562/blog/271230

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值