GrabBag/App/BeltTearing/BeltTearingApp/widgets/ImageGridWithTableWidget.cpp
2025-09-14 14:51:38 +08:00

145 lines
4.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ImageGridWithTableWidget.h"
#include "ImageGridWidget.h"
#include <QSplitter>
#include <QHeaderView>
#include <QFileInfo>
#include <QHBoxLayout>
#include <QResizeEvent>
ImageGridWithTableWidget::ImageGridWithTableWidget(QWidget* parent)
: QWidget(parent) {
setupUi();
}
void ImageGridWithTableWidget::setupUi() {
// 创建分割器
QSplitter* splitter = new QSplitter(Qt::Horizontal, this);
// 创建网格控件
m_grid = new ImageGridWidget(this);
// 创建表格控件
m_table = new QTableWidget(this);
m_table->setColumnCount(2);
m_table->setHorizontalHeaderLabels({"序号", "图片名称"});
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_table->setAlternatingRowColors(true);
m_table->setColumnWidth(0, 60 );
m_table->setColumnWidth(1, 120);
// 添加到分割器
splitter->addWidget(m_grid);
splitter->addWidget(m_table);
splitter->setStretchFactor(0, 3);
splitter->setStretchFactor(1, 1);
// 设置布局
QHBoxLayout* layout = new QHBoxLayout(this);
layout->addWidget(splitter);
layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
// 连接信号槽
connect(m_grid, &ImageGridWidget::tileClicked, this, &ImageGridWithTableWidget::onGridTileClicked);
connect(m_table, &QTableWidget::itemSelectionChanged, this, &ImageGridWithTableWidget::onTableSelectionChanged);
}
void ImageGridWithTableWidget::setImages(int index, const QImage& image) {
m_grid->setImages(index, image);
// 更新表格中对应项的图片名称列
if (index >= 0 && index < m_table->rowCount()) {
// 注意这里我们不知道图片的文件名因为传入的是QImage
// 可以考虑在initImages时预先填充表格或者在其他地方维护文件名信息
QTableWidgetItem* nameItem = m_table->item(index, 1);
if (!nameItem) {
nameItem = new QTableWidgetItem("Image " + QString::number(index + 1));
m_table->setItem(index, 1, nameItem);
}
}
}
void ImageGridWithTableWidget::initImages(int count) {
// 初始化网格控件
m_grid->initImages(count);
// 填充表格数据
m_table->setRowCount(count);
for (int i = 0; i < count; ++i) {
// 序号列
QTableWidgetItem* indexItem = new QTableWidgetItem(QString::number(i + 1));
indexItem->setTextAlignment(Qt::AlignCenter);
m_table->setItem(i, 0, indexItem);
// 图片名称列,初始为空或默认值
QTableWidgetItem* nameItem = new QTableWidgetItem("");
m_table->setItem(i, 1, nameItem);
}
}
void ImageGridWithTableWidget::setSelectedIndex(int index) {
m_grid->setSelectedIndex(index);
syncSelectionToTable(index);
}
int ImageGridWithTableWidget::selectedIndex() const {
return m_grid->selectedIndex();
}
void ImageGridWithTableWidget::setExpandedIndex(int index) {
m_grid->setExpandedIndex(index);
}
int ImageGridWithTableWidget::expandedIndex() const {
return m_grid->expandedIndex();
}
int ImageGridWithTableWidget::columnCount() const {
return m_grid->columnCount();
}
int ImageGridWithTableWidget::rowCount() const {
return m_grid->rowCount();
}
QSize ImageGridWithTableWidget::tileBaseSize() const {
return m_grid->tileBaseSize();
}
void ImageGridWithTableWidget::onGridTileClicked(int index) {
syncSelectionToTable(index);
emit tileClicked(index);
}
void ImageGridWithTableWidget::onTableSelectionChanged() {
syncSelectionToGrid();
}
void ImageGridWithTableWidget::syncSelectionToTable(int index) {
if (index == -1) {
m_table->clearSelection();
} else if (index >= 0 && index < m_table->rowCount()) {
m_table->selectRow(index);
}
}
void ImageGridWithTableWidget::syncSelectionToGrid() {
QList<QTableWidgetItem*> selectedItems = m_table->selectedItems();
if (!selectedItems.isEmpty()) {
int row = selectedItems.first()->row();
if (m_grid && m_grid->selectedIndex() != row) {
m_grid->setSelectedIndex(row);
}
}
}
void ImageGridWithTableWidget::resizeEvent(QResizeEvent* event) {
QWidget::resizeEvent(event);
// 当组合控件大小变化时,确保网格能够自适应
// if (m_grid) {
// m_grid->updateTileSizes();
// }
}