gpt4 book ai didi

c++ - Qt -> 从 Gui->Thread->Qtimer 设置值

转载 作者:行者123 更新时间:2023-11-28 06:48:19 25 4
gpt4 key购买 nike

我有一个特殊的相机类,应该尽可能多地调用它以获得下一张照片。 gui 本身包含一些 slider ,用于更改相机参数和图像输出的设置。

这是我的类的一个简单结构:

class CameraWorker : public QObject
{
Q_OBJECT

public:
CameraWorker();

signals:
void imageReady(const QImage &);

private slots:
void onCamera();
void setValue(int value);

private:
Camera camera;
};

class CameraThread : public QThread
{
Q_OBJECT

public:
CameraThread();

signals:
void imageReady(const QImage &);
void gotValue(int value);

private slots:
void getImage(const QImage &img);
void setValue(int value);

private:
void run();
};

我的主窗口包含:

connect(ui.value, SIGNAL(valueChanged(int)), cameraThread, SLOT(setValue(int)));

我的相机线程包含:

void CameraThread::run()
{
CameraWorker worker;
QTimer timer;
connect(&timer, SIGNAL(timeout()), &worker, SLOT(onCamera()));
connect(&worker, SIGNAL(imageReady(const QImage &)), this, SLOT(getImage(const QImage &)));
connect(this, SIGNAL(gotValue(int)), &worker, SLOT(setValue(int)));

timer.start(0);
exec();
}

void CameraThread::setValue(int value)
{
emit gotValue(value);
}

我的摄像师包含:

void CameraWorker::setValue(value)
{
camera.setValue(value);
}

所以问题是,我必须调用 Signal -> Slot -> Signal -> Slot -> camera.setValue 来为相机获取一个值,但我有 20 个值。有没有更好的方法来做到这一点?

最佳答案

您可以将这 20 个值放入一个按值复制的对象中。这样您就可以通过单个信号/槽级联快速传递它们。不要忘记注册您的自定义类型,以便在排队连接中使用。

您可能希望完全避免信号/槽开销。您可以使用 QSemaphore 编写标准的生产者/消费者构造(在文档中搜索“Semaphores Example”)。

您还可以向您的线程发送一个自定义事件(包含您的数据),这应该比使用信号/插槽更快。

关于c++ - Qt -> 从 Gui->Thread->Qtimer 设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com