想用 QT 做一个界面加到已有的多线程程序中显示图像,首先用 Qt Creator 做了一个界面,加了个 QGraphicsView graphicsView 在上面
在已有的多线程程序中生成一个线程做为 GUI 线程:
QApplication a(argc, argv);
Window = new MainWindow; // Window 是全局变量
Window->show()
a->exec();
另外一个已有的线程:
QImage image = .... // 生成图像
这时候怎么告诉 GUI 线程来读这个图像呢?我试了几个 signal/slot 的方法都不行,可能我新手对 signal/slot 理解的不对,我把这些方法列在下面,大侠能帮我看看吗?多谢了!
方法一:
在 MainWindow 中加
private:
QImage image;
QPixmap pixmap;
QGraphicsScene graphicsScene;
public slots:
void SetImage(QImage AImage) { emit OnImageChanged(AImage); }
signals:
void OnImageChanged(QImage AImage);
private slots:
void ShowImage(QImage AImage) {
image = AImage;
pixmap.fromImage(image);
pixmap = pixmap.scaledToHeidht(480);
graphicsScene.addPixmap(pixmap);
ui->graphicsView->setScene(graphicsScene);
}
public:
void Init() { connect(this, SIGNAL(OnImageChanged(QImage)), this, SLOT(ShowImage(QImage)));
在 GUI 线程中调用 Window->Init();
在另一个线程中调用 Window->SetImage(image);
方法二:
在 MainWindow 中加入
public:
QImage image;
private:
QPixmap pixmap;
QGraphicsScene graphicsScene;
public slots:
void ShowImage(QObject* = NULL) {
pixmap.fromImage(image);
pixmap = pixmap.scaledToHeidht(480);
graphicsScene.addPixmap(pixmap);
ui->graphicsView->setScene(graphicsScene);
}
在另一个线程中
Window->image = image;
QObject* temp = new QObject();
QObject::connect(temp, SIGNAL(destroyed(QObject*)), Window, SLOT(ShowImage(QObject*)));
delete temp;
以上两个方法都不行。
一个线程生成图像,然后给 GUI 线程一个消息进行刷新,到底该怎么实现这个功能呢?signal/slot? event?
大侠们来救我啊