Qt:QTableWidget中各个单元格之间的空格

时间:2016-02-09 09:17:41

标签: c++ qt qt5

(在Windows 8.1上使用Qt 5.5.1)

我有一个表格,显示用户选择的图像

我知道他们还有许多其他方法可以在GUI上显示多个图像,但我是Qt 的新手,所以我不明白如何使用QGraphicsView并找到了以下是最简单的方法。

但这会形成一个表格,图像不会分开。我想要一些空间b / w他们。查看下一个图像如何从第一个结束的位置开始。

如何在离开一些空间后开始下一张图片?

我也需要这些复选框(它们默认使用QTableWidget),因为在添加图像后,我希望用户也可以选择它们以便进一步处理。

enter image description here

的main.cpp

QFileDialog dialog(this);
dialog.setNameFilter(tr("Images (*.jpg)"));
dialog.setFileMode(QFileDialog::ExistingFiles);
QStringList all_filenames = dialog.selectedFiles();
int maxCol    = 3;                         
int maxRows   = all_filenames.size() / maxCol;
ui->tableWidget->setColumnCount(maxCol);
ui->tableWidget->setRowCount(maxRows);
int remainder = all_filenames.size() % maxCol;
if (remainder != 0)
{
   maxRows +=1;
}
ui->tableWidget->horizontalHeader()->setDefaultSectionSize(200);
ui->tableWidget->verticalHeader()->setDefaultSectionSize(200);
if(all_filenames.isEmpty() == 0)
{
 for( int i = 0; i < all_filenames.size() ; ++i)
  {
      QPixmap map(all_filenames.at(i));
      map = map.scaled(200,200,Qt::IgnoreAspectRatio,Q::FastTransformation);
      QBrush brush(map);
      QTableWidgetItem* item = new QTableWidgetItem();
      item->setCheckState(Qt::CheckState());
      item->setBackground(brush);
      ui->tableWidget->setItem(j,k,item);
      k++;
      if ( k == maxCol )
      {
          j++;
          k = 0;
      }


  }
}

修改

cmargindelegate.cpp

#ifndef CMARGINDELEGATE_H
#define CMARGINDELEGATE_H
#include <QItemDelegate>

class CMarginDelegate : public QItemDelegate
{
public:
    explicit CMarginDelegate(int margin, QObject* parent);
    ~CMarginDelegate();
private:
    int m_margin;

public slots:
    void paint(QPainter *painter, const QStyleOptionViewItem &option,const QModelIndex &index);
};
 #endif // CMARGINDELEGATE_H

cmargindelegate.cpp

#include "cmargindelegate.h"
#include <QItemDelegate>

CMarginDelegate::CMarginDelegate(int margin, QObject*parent):QItemDelegate(parent),m_margin(margin)
 {}

CMarginDelegate ::~CMarginDelegate()
{}

void CMarginDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index)
{
QStyleOptionViewItem itemOption(option);

// Make the 'drawing rectangle' smaller.
itemOption.rect.adjust(m_margin, m_margin, -m_margin, -m_margin);

QItemDelegate::paint(painter, itemOption, index);
}

1 个答案:

答案 0 :(得分:0)

实现自定义委托以绘制表格单元格。你可以从这个开始:

ui->tableWidget->setItemDelegate(new CMarginDelegate(5, ui->tableWidget));

这是如何使用它:

setDate