

cpp
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";
else
fp = 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();
});
}