[libcamera-devel] [PATCH 1/4] qcam: Use QDialog for selection of cameras
Utkarsh Tiwari
utkarsh02t at gmail.com
Wed Aug 3 19:55:14 CEST 2022
Currently we use QInputDialog convenience dialogs to allow the user to
select a camera. This doesn't allow adding of more information (such as
camera location, model etc).
Create a QDialog with a QFormLayout that shows a QComboBox with camera
Ids. Use a QButtonBox to provide buttons for accepting and cancelling the
action.
Signed-off-by: Utkarsh Tiwari <utkarsh02t at gmail.com>
---
src/qcam/main_window.cpp | 47 ++++++++++++++++++++++++++++++----------
1 file changed, 35 insertions(+), 12 deletions(-)
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 7433d647..7761a6c6 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -16,7 +16,10 @@
#include <QComboBox>
#include <QCoreApplication>
+#include <QDialog>
+#include <QDialogButtonBox>
#include <QFileDialog>
+#include <QFormLayout>
#include <QImage>
#include <QImageWriter>
#include <QInputDialog>
@@ -291,23 +294,43 @@ void MainWindow::switchCamera(int index)
std::string MainWindow::chooseCamera()
{
QStringList cameras;
- bool result;
-
- /* If only one camera is available, use it automatically. */
- if (cm_->cameras().size() == 1)
- return cm_->cameras()[0]->id();
+ std::string result;
/* Present a dialog box to pick a camera. */
+ QDialog *cameraSelectDialog = new QDialog(this);
+
+ /* Setup a QComboBox to display camera Ids. */
for (const std::shared_ptr<Camera> &cam : cm_->cameras())
- cameras.append(QString::fromStdString(cam->id()));
+ cameras.push_back(QString::fromStdString(cam->id()));
+
+ QComboBox *cameraIdComboBox = new QComboBox;
+ cameraIdComboBox->addItems(cameras);
+
+ /* Setup QDialogButtonBox. */
+ QDialogButtonBox *dialogButtonBox = new QDialogButtonBox;
+ dialogButtonBox->addButton(QDialogButtonBox::Cancel);
+ dialogButtonBox->addButton(QDialogButtonBox::Ok);
+
+ connect(dialogButtonBox, &QDialogButtonBox::accepted,
+ this, [&]() {
+ result = cameraIdComboBox->currentText().toStdString();
+ cameraSelectDialog->accept();
+ });
+
+ connect(dialogButtonBox, &QDialogButtonBox::rejected,
+ this, [&]() {
+ result = std::string();
+ cameraSelectDialog->reject();
+ });
+
+ /* Setup the layout for the dialog. */
+ QFormLayout *cameraSelectLayout = new QFormLayout(cameraSelectDialog);
+ cameraSelectLayout->addRow("Camera: ", cameraIdComboBox);
+ cameraSelectLayout->addWidget(dialogButtonBox);
- QString id = QInputDialog::getItem(this, "Select Camera",
- "Camera:", cameras, 0,
- false, &result);
- if (!result)
- return std::string();
+ cameraSelectDialog->exec();
- return id.toStdString();
+ return result;
}
int MainWindow::openCamera()
--
2.25.1
More information about the libcamera-devel
mailing list