各位大佬有什么辦法嗎因為我呼叫了setmousecallback好像只能在OPENCV的視窗上用所以怎么能把這個顯示圖片的視窗嵌入到QT的UI界面中或者setmousecallback有辦法直接對Qlabel上顯示的圖片作用
uj5u.com熱心網友回復:
cvGetWindowHandleSetWindowLong
uj5u.com熱心網友回復:
cvGetWindowHandleuj5u.com熱心網友回復:
cvGetWindowHandle獲取的句柄在cvGetWindowName無法獲取正確的視窗名稱,SetWindowLong使用了也沒辦法,然后我借鑒了另外一個方案namedWindow("view", WINDOW_AUTOSIZE);
HWND hWnd = (HWND) cvGetWindowHandle("view");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, (HWND)winId());
::ShowWindow(hParent, SW_HIDE);
但是仍然無法將imshow視窗嵌入到QT。。。不知道哪里操作不對
uj5u.com熱心網友回復:
比較邪門,我用SPY++確認過HWND值,沒有問題,::SetParent(hWnd, (HWND)winId());的執行也是成功的,
回傳的句柄能夠通過::ShowWindow(hParent, SW_HIDE);進行隱藏。
但是imshow的畫面就是無法顯示到QT界面上。。。吐血。。
不清楚到底是什么原因導致了這個問題。。
uj5u.com熱心網友回復:
@趙4老師 請幫忙看看吧uj5u.com熱心網友回復:
HWND Whnd;
Whnd=(HWND)cvGetWindowHandle("view");
if (Whnd) {
HWND parentHwnd;
parentHwnd= (HWND)GetWindowLong(Whnd,GWL_HWNDPARENT);
if (parentHwnd) ShowWindow(parentHwnd,SW_HIDE);//隱藏
SetWindowLong(parentHwnd,GWL_STYLE,/*WS_CLIPCHILDREN|*/WS_CLIPSIBLINGS|WS_CHILDWINDOW);//隱藏標題欄
SetWindowLong(parentHwnd,GWL_EXSTYLE,WS_EX_TOPMOST);//在最前面
if (parentHwnd) ShowWindow(parentHwnd,SW_SHOW);//顯示
}
uj5u.com熱心網友回復:
@趙4老師謝謝您的回復,我使用你的代碼進行了測驗,parentHwnd的值始終是0,然后程式依然沒有達到效果,具體代碼如下:
namedWindow("view", WINDOW_AUTOSIZE);
HWND Whnd;
Whnd=(HWND)cvGetWindowHandle("view");
if (Whnd)
{
HWND parentHwnd;
parentHwnd = (HWND)GetWindowLong(Whnd,GWL_HWNDPARENT);
if(parentHwnd)
{
ShowWindow(parentHwnd,SW_HIDE);//隱藏
}
SetWindowLong(parentHwnd,GWL_STYLE,/*WS_CLIPCHILDREN|*/WS_CLIPSIBLINGS|WS_CHILDWINDOW);//隱藏標題欄
SetWindowLong(parentHwnd,GWL_EXSTYLE,WS_EX_TOPMOST);//在最前面
if(parentHwnd)
{
ShowWindow(parentHwnd,SW_SHOW);//顯示
}
}
uj5u.com熱心網友回復:
namedWindow("view", WINDOW_AUTOSIZE);
HWND Whnd;
Whnd=(HWND)cvGetWindowHandle("view");
if (Whnd)
{
HWND parentHwnd;
parentHwnd = (HWND)GetWindowLong(Whnd,GWL_HWNDPARENT);
if(parentHwnd)
{
ShowWindow(parentHwnd,SW_HIDE);//隱藏
}
SetWindowLong(parentHwnd,GWL_STYLE,/*WS_CLIPCHILDREN|*/WS_CLIPSIBLINGS|WS_CHILDWINDOW);//隱藏標題欄
SetWindowLong(parentHwnd,GWL_EXSTYLE,WS_EX_TOPMOST);//在最前面
if(parentHwnd)
{
ShowWindow(parentHwnd,SW_SHOW);//顯示
}
}
uj5u.com熱心網友回復:
我貼一個完整代碼
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 打開攝像頭
bool ok = mvCapture.open(0);
namedWindow("view", WINDOW_AUTOSIZE);
HWND Whnd;
Whnd=(HWND)cvGetWindowHandle("view");
if (Whnd)
{
HWND parentHwnd;
parentHwnd = (HWND)GetWindowLong(Whnd,GWL_HWNDPARENT);
if(parentHwnd)
{
ShowWindow(parentHwnd,SW_HIDE);//隱藏
}
SetWindowLong(parentHwnd,GWL_STYLE,/*WS_CLIPCHILDREN|*/WS_CLIPSIBLINGS|WS_CHILDWINDOW);//隱藏標題欄
SetWindowLong(parentHwnd,GWL_EXSTYLE,WS_EX_TOPMOST);//在最前面
if(parentHwnd)
{
ShowWindow(parentHwnd,SW_SHOW);//顯示
}
}
QObject::connect(&dataTimer, SIGNAL(timeout()), this, SLOT(OnTimer()));
dataTimer.start(100);
//QWidget* a = QWidget::find((WId)hWnd1);
//ui->gridLayout->addWidget(a);
}
MainWindow::~MainWindow()
{
delete ui;
}
// 顯示定時器
void MainWindow::OnTimer()
{
Mat srcImage;
mvCapture>>srcImage;
imshow("view", srcImage);
}
uj5u.com熱心網友回復:
我的GWL_HWNDPARENT這個引數飄紅,不知道為什么,windows的頭檔案都加了uj5u.com熱心網友回復:
this->resize(600,400);QWidget* qWidget =new QWidget (this) ;
qWidget->resize(300,300);
qWidget->move(0,0);
namedWindow("view", WINDOW_NORMAL);
resizeWindow("view",300,300);
HWND Whnd=static_cast<HWND>( cvGetWindowHandle("view"));
qDebug()<<Whnd;
if (Whnd)
{
HWND hParent = ::GetParent(Whnd);
::SetParent(Whnd,(HWND)qWidget->winId());
::ShowWindow(hParent, SW_HIDE);//隱藏運行程式框
}
uj5u.com熱心網友回復:
請問下樓主 這個問題你解決了沒有啊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/44256.html
標籤:C++ 語言
下一篇:一個C++問題,在線等,求答案
