当前位置: 首页 > news >正文

Qt:图片切割

void MainWindow::on_action_slice_triggered()
{QDialog *dialog = new QDialog(this);dialog->setWindowTitle("切割");dialog->setFixedSize(200, 150);QVBoxLayout *vbox = new QVBoxLayout;QHBoxLayout *hbox = new QHBoxLayout;QLabel *label = new QLabel("方向");hbox->addWidget(label);QComboBox *comboBox = new QComboBox;QStringList SL_direction;SL_direction << "竖向" << "横向";comboBox->addItems(SL_direction);hbox->addWidget(comboBox);vbox->addLayout(hbox);hbox = new QHBoxLayout;label = new QLabel("份数");hbox->addWidget(label);QLineEdit *lineEdit = new QLineEdit;QString sn = settings.value("Slice", "5").toString();lineEdit->setText(sn);hbox->addWidget(lineEdit);vbox->addLayout(hbox);label = new QLabel;label->setAlignment(Qt::AlignCenter);vbox->addWidget(label);connect(comboBox, &QComboBox::currentTextChanged, [=]{label->setText("");});connect(lineEdit, &QLineEdit::textChanged, [=]{label->setText("");});QPushButton *pushButton_confirm = new QPushButton("确定");QPushButton *pushButton_cancel = new QPushButton("取消");hbox = new QHBoxLayout;hbox->addStretch();hbox->addWidget(pushButton_confirm);hbox->addWidget(pushButton_cancel);hbox->addStretch();vbox->addLayout(hbox);dialog->setLayout(vbox);    dialog->show();connect(pushButton_confirm, &QPushButton::clicked, [=]{bool b;int n = lineEdit->text().toInt(&b, 10);if (b) {for (int i=0; i<n; i++) {QImage image;if (comboBox->currentIndex() == 0) {int dy = imageWidget->image.height() / n;image = imageWidget->image.copy(0, dy * i, imageWidget->image.width(), dy);} else if (comboBox->currentIndex() == 1) {int dx = imageWidget->image.width() / n;image = imageWidget->image.copy(dx * i, 0, dx, imageWidget->image.height());}QString fp = "";if (path == "")fp = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/" + comboBox->currentText() + QString::number(i) + ".png";elsefp = QFileInfo(path).path() + "/" + QFileInfo(filename).baseName() + comboBox->currentText() + QString::number(i) + "." + QFileInfo(filename).suffix();//qDebug() << fp;image.save(fp, nullptr, 100);label->setText("切割:" + comboBox->currentText() + " " + QString::number(i+1) + "/" + QString::number(n));}settings.setValue("Slice", lineEdit->text());} else {QMessageBox::critical(dialog, "错误", "份数不是数字");}});connect(pushButton_cancel, &QPushButton::clicked, [=]{dialog->close();});
}

http://www.xdnf.cn/news/1089181.html

相关文章:

  • numpy数据分析知识总结
  • 使用Node.js搭建Web应用有哪些注意事项?
  • LocalStorage和SessionStorage的区别和应用
  • 零基础 Qt 6 在线安装教程
  • C++11 算法详解:std::copy_if 与 std::copy_n
  • 基于物联网架构的温室环境温湿度传感器节点设计
  • C++ 遍历可变参数的几种方法
  • Android Jetpack Compose状态管理与状态提升
  • Spring Batch终极指南:原理、实战与性能优化
  • 从单体到微服务:Spring Cloud 开篇与微服务设计
  • 【王树森推荐系统】召回12:曝光过滤 Bloom Filter
  • vscode打开stm32CubeIDE的项目的注释问题
  • JK触发器Multisim电路仿真——硬件工程师笔记
  • CSS知识复习5
  • 20 道 Node.js 高频面试题
  • Docker快速部署Hive服务
  • Flutter基础(前端教程②-卡片列表)
  • 原生屏幕旋转算法(AccelSensor)
  • Ansible 介绍及安装
  • 【牛客刷题】小红的v三元组
  • Spring Boot 企业项目技术选型
  • SystemVerilog 断言重复操作符和序列操作符
  • 力扣 239 题:滑动窗口最大值的两种高效解法
  • 【C++】AVL树底层思想 and 大厂面试
  • SPI / I2C / UART 哪个更适合初学者?
  • C++内存泄漏排查
  • Next.js 实战笔记 2.0:深入 App Router 高阶特性与布局解构
  • 嘉立创黄山派下载watch ui demo 教程(sf32)
  • 为什么elementui的<el-table-column label=“名称“ prop=“name“ label不用写成:label
  • 短视频矩阵系统的崛起:批量发布功能与多平台矩阵的未来