C++ Qt 摄像头图片设置类代码详解
// 构造函数,传入一个QCameraImageCapture对象和QWidget对象作为父窗口 ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent) : QDialog(parent), ui(new Ui::ImageSettingsUi), imagecapture(imageCapture) { ui->setupUi(this);
// 设置下拉框中的图片编解码器
ui->imageCodecBox->addItem(tr('Default image format'), QVariant(QString()));
foreach(const QString &codecName, imagecapture->supportedImageCodecs()) {
QString description = imagecapture->imageCodecDescription(codecName);
ui->imageCodecBox->addItem(codecName + ': ' + description, QVariant(codecName));
}
// 设置下拉框中的图片质量滑块范围
ui->imageQualitySlider->setRange(0, int(QMultimedia::VeryHighQuality));
// 设置下拉框中的图片分辨率
ui->imageResolutionBox->addItem(tr('Default Resolution'));
QList<QSize> supportedResolutions = imagecapture->supportedResolutions();
foreach(const QSize &resolution, supportedResolutions) {
ui->imageResolutionBox->addItem(QString('%1x%2').arg(resolution.width()).arg(resolution.height()),
QVariant(resolution));
}
}
// 析构函数 ImageSettings::~ImageSettings() { delete ui; }
// 重载changeEvent函数,处理语言切换事件 void ImageSettings::changeEvent(QEvent *e) { QDialog::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } }
// 获取图片编码设置 QImageEncoderSettings ImageSettings::imageSettings() const { QImageEncoderSettings settings = imagecapture->encodingSettings(); settings.setCodec(boxValue(ui->imageCodecBox).toString()); settings.setQuality(QMultimedia::EncodingQuality(ui->imageQualitySlider->value())); settings.setResolution(boxValue(ui->imageResolutionBox).toSize());
return settings;
}
// 设置图片编码设置
void ImageSettings::setImageSettings(const QImageEncoderSettings &imageSettings)
{
selectComboBoxItem(ui->imageCodecBox, QVariant(imageSettings.codec()));
selectComboBoxItem(ui->imageResolutionBox, QVariant(imageSettings.resolution()));
ui->imageQualitySlider->setValue(imageSettings.quality());
}
// 获取下拉框选项 QVariant ImageSettings::boxValue(const QComboBox *box) const { int idx = box->currentIndex(); if (idx == -1) return QVariant();
return box->itemData(idx);
}
// 设置下拉框选项
void ImageSettings::selectComboBoxItem(QComboBox *box, const QVariant &value)
{
for (int i = 0; i < box->count(); ++i) {
if (box->itemData(i) == value) {
box->setCurrentIndex(i);
break;
}
}
}
原文地址: https://www.cveoy.top/t/topic/oRd5 著作权归作者所有。请勿转载和采集!