View Full Version : تشخیص قطع ارتباط cmera در qml
ali_72
دوشنبه 05 بهمن 1394, 12:40 عصر
سلام
اینکه بخوایم از camera های مختلف استفاده کنیم
و اینکه بین cemera های مختلف سوئیچ کنیم
کار راحتیه
من یه مشکل دارم ک هر چی هم تو نت گشتم حتی حتی یک لینک مرتبط هم پیدا نکردم
مشکل من اینه:
وقتی cmera قطع شه باید event یا راهی باشه که من متوجه شم
یا وقتی cmera ای به سیستم اضافه میشه باید تشخیص بدم و اونو به لیست cmera ها اضافه کنم
ممنون میشم فقط یه لینک یا کلمه جستجویی ک منو به حل این مورد نزدیک کنه معرفی کنید
ali_72
سه شنبه 06 بهمن 1394, 08:37 صبح
یک راه استفاده از یک ترد و بررسی مداوم وضعیت camera ها است
اما این روش در برنامه مشابه دات نت باعث مصرف بالای منابع سیستمی شده بود و کارایی برنامه به شدت کاهش پیدا کرده بود
پیشنهادی ندارید؟
pswin.pooya
سه شنبه 06 بهمن 1394, 09:31 صبح
چرا از سیگنالهاش استفاده نمی کنی؟ کلی سیگنال داره.
من یه مساله رو متوجه شدم اونم اینه که اکثر سوالهایی رو که پرسیدی یا توی داکیومنت هستن و یا اینکه راحت می شه با سرچ گوگل پیدا کرد. اگر اینجوری بخوای بکنی توی C++ نمی تونی جلو بری. اینجا خودندن داکیومنت و منابع اینترنتی خیلی خیلی مهم هست. شما با نخوندن داکیومنت نه تنها به جواب نمی رسی بلکه حتی شانس کشف کردن امکانات جالب کیوت رو هم از دست می دی. از طرف دیگه وقتی سوال می پرسی اقلب برنامه نویسهای حرفه ای حوصله و یا وقت جواب دادن به سوالهای ابتدایی رو ندارن (بهتره بگیم پتاسیلش رو ندارن). این روش سوال کردن و ج گرفتن مخصوص تالار برنامه نویسیهای سی شارپ و ... هست که کلا در گیر مسائل اولیه مثلا چجوری گرید رو فیل کنم و اینها هست اما برنامه نویسهای C++ معمولا درگیر مسائل به مراتب پیچیده تر هستن.
خیلی ها از این طریق انتقاد کردن من بدشون میاد. اما شاید بیشتر من فکر می کنم بر می گرده به ایرانی بودن ما شما اگر برید سراغ فروم های خارجی مطمئن باشید حتی برای سوال پرسیدن هم دچار مشکل می شید. و اگر سوالی رو مطرح می کنید معمولا باید دلیلی که جواب پیدا نکردید رو توضیح بدید تا ساپورت کافی رو بگیرید. و اگر موارد ساده ای باشه سوالتون که با 30 دقیقه جستجو یا شایدم کمتر بشه پیدا کرد با غضب اونها رو به رو می شیم. به نظر من کمک کردن خیلی خوبه و باید انجام شه اما فقط برای کسی که قدرش کارش رو می دونه و داره زحمت کافی می کشه.
من الان یه مدت هست که برای یه پروژه ساعتها هست که دارم داکیومنت Qt رو می خونم و مثال برای خودم می نویسم که بعدا یادم نره. شاید باورت نشه مواردی رو توی همین مدت کوتاه پیدا کردم که نه توی آموزشهای آنلاین بود و نه توی کتابهای کیوت. و این موارد اینقدر برای کارهای من ضروری بودن که شاید باورتون نشه. بعضی از اونها از هفته ها کار جلوگیری کردن. و حتی باعث شد کار بجایی برسه که برم ترک داکیومنتها و ویژگیهای جدید هر ویرایش رو کامل چک کنم. (حتی خود فروم کیوت رو به صورت روزانه).
وقتی کیوت به این خوبی داکیومنت شده چرا اون رو نمی خونید. توی داکیومنت نه تنها موارد ظاهری رو رعایت کردن و مثال دادن بلکه حتی زبان انگلیسی اون رو در سطحی نوشتن که همه دنیا بتونن راحت بخونن (شما کافیه برخی از کتابهای منابع اصلی کامپیوتر رو بخونید تا متوجه شید برای هر صفحه اون چند ساعت وقت بزارید)
ali_72
دوشنبه 12 بهمن 1394, 14:40 عصر
چرا از سیگنالهاش استفاده نمی کنی؟ کلی سیگنال داره.
من یه مساله رو متوجه شدم اونم اینه که اکثر سوالهایی رو که پرسیدی یا توی داکیومنت هستن و یا اینکه راحت می شه با سرچ گوگل پیدا کرد. اگر اینجوری بخوای بکنی توی C++ نمی تونی جلو بری. اینجا خودندن داکیومنت و منابع اینترنتی خیلی خیلی مهم هست. شما با نخوندن داکیومنت نه تنها به جواب نمی رسی بلکه حتی شانس کشف کردن امکانات جالب کیوت رو هم از دست می دی. از طرف دیگه وقتی سوال می پرسی اقلب برنامه نویسهای حرفه ای حوصله و یا وقت جواب دادن به سوالهای ابتدایی رو ندارن (بهتره بگیم پتاسیلش رو ندارن). این روش سوال کردن و ج گرفتن مخصوص تالار برنامه نویسیهای سی شارپ و ... هست که کلا در گیر مسائل اولیه مثلا چجوری گرید رو فیل کنم و اینها هست اما برنامه نویسهای C++ معمولا درگیر مسائل به مراتب پیچیده تر هستن.
خیلی ها از این طریق انتقاد کردن من بدشون میاد. اما شاید بیشتر من فکر می کنم بر می گرده به ایرانی بودن ما شما اگر برید سراغ فروم های خارجی مطمئن باشید حتی برای سوال پرسیدن هم دچار مشکل می شید. و اگر سوالی رو مطرح می کنید معمولا باید دلیلی که جواب پیدا نکردید رو توضیح بدید تا ساپورت کافی رو بگیرید. و اگر موارد ساده ای باشه سوالتون که با 30 دقیقه جستجو یا شایدم کمتر بشه پیدا کرد با غضب اونها رو به رو می شیم. به نظر من کمک کردن خیلی خوبه و باید انجام شه اما فقط برای کسی که قدرش کارش رو می دونه و داره زحمت کافی می کشه.
من الان یه مدت هست که برای یه پروژه ساعتها هست که دارم داکیومنت Qt رو می خونم و مثال برای خودم می نویسم که بعدا یادم نره. شاید باورت نشه مواردی رو توی همین مدت کوتاه پیدا کردم که نه توی آموزشهای آنلاین بود و نه توی کتابهای کیوت. و این موارد اینقدر برای کارهای من ضروری بودن که شاید باورتون نشه. بعضی از اونها از هفته ها کار جلوگیری کردن. و حتی باعث شد کار بجایی برسه که برم ترک داکیومنتها و ویژگیهای جدید هر ویرایش رو کامل چک کنم. (حتی خود فروم کیوت رو به صورت روزانه).
وقتی کیوت به این خوبی داکیومنت شده چرا اون رو نمی خونید. توی داکیومنت نه تنها موارد ظاهری رو رعایت کردن و مثال دادن بلکه حتی زبان انگلیسی اون رو در سطحی نوشتن که همه دنیا بتونن راحت بخونن (شما کافیه برخی از کتابهای منابع اصلی کامپیوتر رو بخونید تا متوجه شید برای هر صفحه اون چند ساعت وقت بزارید)
خیلی ممنون از توضیحات شما
من داکیومنت مربوط به این قسمت رو مجدد خوندم
ولی باز هم به نتیجه نرسیدم
این مورد رو تو سرچ گوگل پیدا نکردم
سراغ فروم خارجی هم رفتم :لبخند: جواب ندادند
دو حالته یا سوال من خیلی ضایع و مبتدی هست یا دارم یه جا اشتباه میکنم
من از سیگنال ها استفاده کردم ولی هیچ لاگیموقع قطع دوربین ندیدم
دوستان اگه مبتدی هست این یه بار رو لطف کنید و جواب بدید کجا اشتباه میکنم :لبخند:
import QtQuick 2.3import QtQuick.Controls 1.2
import QtMultimedia 5.5
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Item {
width: parent.width
height: parent.height
Camera {
id: camera
imageProcessing.whiteBalanceMode: CameraImageProcessing.WhiteBalanceFlash
exposure {
exposureCompensation: -1.0
exposureMode: Camera.ExposurePortrait
}
flash.mode: Camera.FlashRedEyeReduction
imageCapture {
onImageCaptured: {
photoPreview.source = preview // Show the preview in an Image
}
onCaptureFailed: {
console.log("Camera disconnect");
}
}
onAvailabilityChanged: {
if(camera.availability!=Camera.Available)
{
console.log("Camera disconnect");
}
}
onCameraStateChanged: {
if(camera.cameraState==Camera.UnloadedStatus){
console.log("Camera disconnect nedaaa");
}
}
onCameraStatusChanged: {
if(camera.cameraStatus!=Camera.ActiveStatus){
console.log("Camera disconnect");
}
if (cameraStatus == Camera.ActiveStatus) {
var fr = camera.supportedViewfinderFrameRateRanges();
fpsList.model = fr;
var res = camera.supportedViewfinderResolutions();
resolutionList.model = res;
}
}
onError: {
camera.unlock();
console.error("error: " + camera.errorString);
}
}
VideoOutput {
id: viewfinder
source: camera
anchors.fill: parent
focus : visible
}
Image {
id: photoPreview
}
Row{
Rectangle {
width: 200
height: 200
id: frame
color: "green"
ListView {
id:fpsList
height: 200
width:200
snapMode:ListView.SnapOneItem
highlightRangeMode :ListView.ApplyRange
highlight: Rectangle { color: "red"; radius: 5 }
delegate: Item {
height: 40
width:200
Text {
text: modelData.minimumFrameRate +" x "+modelData.maximumFrameRate
anchors.fill: parent
anchors.margins: 5
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
color: "white"
font.bold: true
style: Text.Raised
styleColor: "black"
font.pixelSize: 14
}
MouseArea {
anchors.fill: parent
onClicked: {
camera.viewfinder.minimumFrameRate = modelData.minimumFrameRate;
camera.viewfinder.maximumFrameRate = modelData.maximumFrameRate;
fpsList.currentIndex = index;
}
}
Component.onCompleted: {
if ((modelData.minimumFrameRate == camera.viewfinder.minimumFrameRate) && (modelData.maximumFrameRate == camera.viewfinder.maximumFrameRate)) {
fpsList.currentIndex = index;
}
}
}
add: Transition {
NumberAnimation { properties: "x,y"; from: 100; duration: 1000 }
}
addDisplaced: Transition {
NumberAnimation { properties: "x,y"; duration: 1000 }
}
displaced: Transition {
NumberAnimation { properties: "x,y"; duration: 1000 }
}
}
}
Rectangle {
width: 200
height: 200
id: hhh
color: "blue"
ListView {
id:cameraList
model: QtMultimedia.availableCameras
height: 200
width:200
snapMode:ListView.SnapOneItem
highlightRangeMode :ListView.ApplyRange
highlight: Rectangle { color: "red"; radius: 5 }
delegate: Item {
height: 40
width:200
Text {
text: modelData.displayName
anchors.fill: parent
anchors.margins: 5
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
color: "white"
font.bold: true
style: Text.Raised
styleColor: "black"
font.pixelSize: 14
}
MouseArea {
anchors.fill: parent
onClicked: {
cameraList.currentIndex = index
camera.deviceId = modelData.deviceId
//cameraList.selected(modelData.deviceId)
}
}
Component.onCompleted: {
if (modelData.displayName === camera.displayName) {
cameraList.currentIndex = index;
}
}
}
add: Transition {
NumberAnimation { properties: "x,y"; from: 100; duration: 1000 }
}
addDisplaced: Transition {
NumberAnimation { properties: "x,y"; duration: 1000 }
}
displaced: Transition {
NumberAnimation { properties: "x,y"; duration: 1000 }
}
}
}
Rectangle {
height: 200
width:200
color: "yellow"
ListView {
id:resolutionList
height: 200
width:200
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
snapMode:ListView.SnapOneItem
highlightRangeMode :ListView.ApplyRange
delegate: Item {
height: 40
width:200
Text {
color:"green"
text: modelData.width + "x" + modelData.height
MouseArea {
anchors.fill: parent
onClicked: {
camera.stop();
camera.viewfinder.resolution = Qt.size(modelData.width, modelData.height);
camera.start();
resolutionList.currentIndex = index;
}
}
}
Component.onCompleted: {
if ((modelData.height == camera.viewfinder.resolution.height) && (modelData.width == camera.viewfinder.resolution.width)) {
resolutionList.currentIndex = index;
}
}
}
}
}
Button{
text: "stop"
onClicked: {
camera.stop();
}
}
Button{
id:btnStart
text: "start"
onClicked: {
camera.start();
}
}
}
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.