我對 Qt 非常陌生,所以請耐心等待。
我正在做我的課堂作業,我需要在其中創建一個帶有 3 個滑塊和一個標簽的視窗,我可以在其中加載我的影像。這 3 個滑塊對應于 HSL(色相、飽和度、亮度),這當然會改變我的影像。
這些轉換所需的數學已完成。我對 Qt 有嚴格的問題,因為我以前從未使用過它。
假設我有我正在做所有轉換的功能:
void hsl(const QImage& src, QImage& dst, float delta_h, float delta_s, float delta_l)
然后,我可以將這些轉換應用于我的影像:
void MainWindow::changeHSL(int h, int s, int l) {
hsl(originalImage, processImage, h, s, l);
ui->label->setPixmap(QPixmap::fromImage(processImage));
}
然后,我需要將此功能插入到我的滑塊中。這就是我有問題的地方。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->actionOpen, SIGNAL(triggered(bool)), this, SLOT(openImage(bool)));
connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(changeHSL(int, int, int)));
connect(ui->horizontalSlider_2, SIGNAL(valueChanged(int)), this, SLOT(changeHSL(int, int, int)));
connect(ui->horizontalSlider_3, SIGNAL(valueChanged(int)), this, SLOT(changeHSL(int, int, int)));
}
以這種方式插入這個函式是不正確的,我有不兼容的發送方/接收方引數的錯誤。也禁止將函式更改為具有一個引數,我需要它具有三個引數,就像我撰寫它的方式一樣。我在課堂上問我的老師我應該如何解決這個問題,但他說在每個滑塊中我需要以某種方式從其他滑塊傳遞值。不幸的是,我沒有使用 Qt 的經驗,我根本不知道如何去做。
如果您因為“課堂作業”而害怕幫助我,請不要擔心——這只是影像處理背后的數學問題。Qt 只是我老師選擇的工具,因為我的大多數同事都有過使用它的經驗。不幸的是我沒有,所以我正試圖快速趕上。感謝所有回復。
uj5u.com熱心網友回復:
你不能像那樣連接信號和插槽。嘗試使用我的解決方案:
去掉 的引數,將, ,MainWindow::changeHSL(int h, int s, int l)替換為 h, s, l 滑塊的值(分別是, , ),如下所示:hslui->horizontalSliderui->horizontalSlider_2ui->horizontalSlider_3
void MainWindow::changeHSL() {
int h = ui->horizontalSlider->value();
int s = ui->horizontalSlider_2->value();
int l = ui->horizontalSlider_3->value();
hsl(originalImage, processImage, h, s, l);
ui->label->setPixmap(QPixmap::fromImage(processImage));
}
重寫連接:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->actionOpen, SIGNAL(triggered(bool)), this, SLOT(openImage(bool)));
connect(ui->horizontalSlider, &QSlider::valueChanged, this, &MainWindow::changeHSL);
connect(ui->horizontalSlider_2, &QSlider::valueChanged, this, &MainWindow::changeHSL);
connect(ui->horizontalSlider_3, &QSlider::valueChanged, this, &MainWindow::changeHSL);
}
很難解釋為什么你的代碼沒有出錯,因為我的英語不好。但無論如何,我希望我的代碼對你有所幫助;)
uj5u.com熱心網友回復:
因為是功課,提示一下:不需要信號傳遞的值,可以用 QAbstractSlider::value() 讀取每個滑塊的當前狀態:https ://doc.qt.io/qt- 6/qabstractslider.html#value-prop。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/517393.html
標籤:C qt
