拍照version
This commit is contained in:
@@ -98,7 +98,7 @@ SkyLink 是一个多平台实时视频传输系统的通信协议,设计用于
|
|||||||
↓
|
↓
|
||||||
3. 检查魔数是否为 0xAA55
|
3. 检查魔数是否为 0xAA55
|
||||||
✗ 否 → 丢弃该包
|
✗ 否 → 丢弃该包
|
||||||
✓ 是 → 继续
|
是 → 继续
|
||||||
↓
|
↓
|
||||||
4. 根据 frame_id 找到对应的帧缓冲区
|
4. 根据 frame_id 找到对应的帧缓冲区
|
||||||
如果不存在 → 创建新的缓冲区
|
如果不存在 → 创建新的缓冲区
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ data class DecodedFrame(
|
|||||||
val lat: Double,
|
val lat: Double,
|
||||||
val lon: Double,
|
val lon: Double,
|
||||||
val alt: Double,
|
val alt: Double,
|
||||||
|
val photoNumber: Int = 0, // 照片编号(从reserve字段提取)
|
||||||
val receivedTime: Long = System.currentTimeMillis()
|
val receivedTime: Long = System.currentTimeMillis()
|
||||||
) {
|
) {
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
@@ -207,6 +208,7 @@ data class FrameBuffer(
|
|||||||
val lat: Double = 0.0,
|
val lat: Double = 0.0,
|
||||||
val lon: Double = 0.0,
|
val lon: Double = 0.0,
|
||||||
val alt: Double = 0.0,
|
val alt: Double = 0.0,
|
||||||
|
val photoNumber: Int = 0, // 照片编号(从reserve字段提取)
|
||||||
val receiveTimestamp: Long = System.currentTimeMillis()
|
val receiveTimestamp: Long = System.currentTimeMillis()
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ class UdpReceiver(
|
|||||||
Log.i(TAG, "UDP 接收缓冲区大小已设置为: ${socket!!.receiveBufferSize}")
|
Log.i(TAG, "UDP 接收缓冲区大小已设置为: ${socket!!.receiveBufferSize}")
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.i(TAG, "✓ UDP 接收器启动,监听端口 $listenPort")
|
Log.i(TAG, " UDP 接收器启动,监听端口 $listenPort")
|
||||||
|
|
||||||
startReceiving()
|
startReceiving()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@@ -185,7 +185,8 @@ class UdpReceiver(
|
|||||||
timestamp = header.timestamp,
|
timestamp = header.timestamp,
|
||||||
lat = header.lat,
|
lat = header.lat,
|
||||||
lon = header.lon,
|
lon = header.lon,
|
||||||
alt = header.alt
|
alt = header.alt,
|
||||||
|
photoNumber = header.reserve // 从reserve字段提取照片编号
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +229,8 @@ class UdpReceiver(
|
|||||||
timestamp = frame.timestamp,
|
timestamp = frame.timestamp,
|
||||||
lat = frame.lat,
|
lat = frame.lat,
|
||||||
lon = frame.lon,
|
lon = frame.lon,
|
||||||
alt = frame.alt
|
alt = frame.alt,
|
||||||
|
photoNumber = frame.photoNumber // 传递照片编号
|
||||||
)
|
)
|
||||||
|
|
||||||
totalFrames++
|
totalFrames++
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
package com.skylink.app.ui
|
package com.skylink.app.ui
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Paint
|
||||||
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -19,6 +22,9 @@ import android.widget.Button
|
|||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import android.widget.EditText
|
||||||
|
import android.widget.ArrayAdapter
|
||||||
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.skylink.app.R
|
import com.skylink.app.R
|
||||||
@@ -31,6 +37,10 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import okhttp3.*
|
||||||
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
|
import org.json.JSONObject
|
||||||
|
|
||||||
class HomeFragment : Fragment(), UdpReceiverListener {
|
class HomeFragment : Fragment(), UdpReceiverListener {
|
||||||
|
|
||||||
@@ -48,6 +58,16 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
private var statusTextView: TextView? = null
|
private var statusTextView: TextView? = null
|
||||||
private var saveButton: Button? = null
|
private var saveButton: Button? = null
|
||||||
private var recordButton: Button? = null
|
private var recordButton: Button? = null
|
||||||
|
private var triggerCaptureButton: Button? = null
|
||||||
|
private var triggerCaptureOriginalButton: Button? = null
|
||||||
|
private var triggerCaptureThumbnailButton: Button? = null
|
||||||
|
|
||||||
|
// HTTP客户端(用于调用ROS2服务)
|
||||||
|
private val httpClient = OkHttpClient()
|
||||||
|
|
||||||
|
// ROS2节点配置
|
||||||
|
private var ros2NodeIp = "192.168.1.100" // 默认IP,需要配置
|
||||||
|
private var ros2HttpPort = 8080
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
// 业务逻辑
|
// 业务逻辑
|
||||||
@@ -56,6 +76,7 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
private var udpReceiver: UdpReceiver? = null
|
private var udpReceiver: UdpReceiver? = null
|
||||||
private var currentFrame: DecodedFrame? = null
|
private var currentFrame: DecodedFrame? = null
|
||||||
private var isRecording = false
|
private var isRecording = false
|
||||||
|
private var totalPhotosReceived = 0 // 接收到的总照片数
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
// 生命周期方法
|
// 生命周期方法
|
||||||
@@ -92,6 +113,9 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
statusTextView = view.findViewById(R.id.status_text)
|
statusTextView = view.findViewById(R.id.status_text)
|
||||||
saveButton = view.findViewById(R.id.save_button)
|
saveButton = view.findViewById(R.id.save_button)
|
||||||
recordButton = view.findViewById(R.id.record_button)
|
recordButton = view.findViewById(R.id.record_button)
|
||||||
|
triggerCaptureButton = view.findViewById(R.id.trigger_capture_button)
|
||||||
|
triggerCaptureOriginalButton = view.findViewById(R.id.trigger_capture_original_button)
|
||||||
|
triggerCaptureThumbnailButton = view.findViewById(R.id.trigger_capture_thumbnail_button)
|
||||||
|
|
||||||
// 设置按钮点击监听
|
// 设置按钮点击监听
|
||||||
saveButton?.setOnClickListener {
|
saveButton?.setOnClickListener {
|
||||||
@@ -101,6 +125,18 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
recordButton?.setOnClickListener {
|
recordButton?.setOnClickListener {
|
||||||
onRecordToggled()
|
onRecordToggled()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
triggerCaptureButton?.setOnClickListener {
|
||||||
|
showTriggerCaptureDialog()
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerCaptureOriginalButton?.setOnClickListener {
|
||||||
|
triggerCapture(0) // 原图模式
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerCaptureThumbnailButton?.setOnClickListener {
|
||||||
|
triggerCapture(1) // 缩略图模式
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
@@ -126,6 +162,11 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
|
|
||||||
override fun onFrameDecoded(frame: DecodedFrame) {
|
override fun onFrameDecoded(frame: DecodedFrame) {
|
||||||
currentFrame = frame
|
currentFrame = frame
|
||||||
|
|
||||||
|
// 更新照片计数
|
||||||
|
if (frame.photoNumber > 0) {
|
||||||
|
totalPhotosReceived++
|
||||||
|
}
|
||||||
|
|
||||||
// 移到后台线程执行解码,避免阻塞 UI 线程,进而影响 UDP 接收协程(如果是单核或高负载)
|
// 移到后台线程执行解码,避免阻塞 UI 线程,进而影响 UDP 接收协程(如果是单核或高负载)
|
||||||
lifecycleScope.launch(Dispatchers.Default) {
|
lifecycleScope.launch(Dispatchers.Default) {
|
||||||
@@ -133,7 +174,13 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
if (bitmap != null) {
|
if (bitmap != null) {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
view?.let {
|
view?.let {
|
||||||
videoImageView?.setImageBitmap(bitmap)
|
// 在图像上叠加显示照片编号
|
||||||
|
val bitmapWithText = if (frame.photoNumber > 0) {
|
||||||
|
addPhotoNumberToBitmap(bitmap, frame.photoNumber)
|
||||||
|
} else {
|
||||||
|
bitmap
|
||||||
|
}
|
||||||
|
videoImageView?.setImageBitmap(bitmapWithText)
|
||||||
updateGpsInfo(frame)
|
updateGpsInfo(frame)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,10 +189,12 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onStatsUpdated(fps: Int, kbps: Int, packetLoss: Double) {
|
override fun onStatsUpdated(fps: Int, kbps: Int, packetLoss: Double) {
|
||||||
statsTextView?.text = String.format(
|
val statsText = StringBuilder()
|
||||||
"FPS: %d\nSpeed: %d KB/s\nPacket Loss: %.1f%%",
|
statsText.append(String.format("FPS: %d\nSpeed: %d KB/s\nPacket Loss: %.1f%%", fps, kbps, packetLoss))
|
||||||
fps, kbps, packetLoss
|
if (totalPhotosReceived > 0) {
|
||||||
)
|
statsText.append(String.format("\nTotal Photos: %d", totalPhotosReceived))
|
||||||
|
}
|
||||||
|
statsTextView?.text = statsText.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(message: String, exception: Exception?) {
|
override fun onError(message: String, exception: Exception?) {
|
||||||
@@ -201,4 +250,217 @@ class HomeFragment : Fragment(), UdpReceiverListener {
|
|||||||
val formatter = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
|
val formatter = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
|
||||||
return formatter.format(Date(millis))
|
return formatter.format(Date(millis))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在图像上叠加显示照片编号
|
||||||
|
*/
|
||||||
|
private fun addPhotoNumberToBitmap(bitmap: Bitmap, photoNumber: Int): Bitmap {
|
||||||
|
val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
|
||||||
|
val canvas = Canvas(mutableBitmap)
|
||||||
|
|
||||||
|
val text = "Photo #$photoNumber"
|
||||||
|
val paint = Paint().apply {
|
||||||
|
color = Color.WHITE
|
||||||
|
textSize = 48f
|
||||||
|
isAntiAlias = true
|
||||||
|
style = Paint.Style.FILL
|
||||||
|
}
|
||||||
|
|
||||||
|
val textPaint = Paint(paint)
|
||||||
|
val textBounds = android.graphics.Rect()
|
||||||
|
textPaint.getTextBounds(text, 0, text.length, textBounds)
|
||||||
|
|
||||||
|
// 绘制半透明背景
|
||||||
|
val bgPaint = Paint().apply {
|
||||||
|
color = Color.argb(180, 0, 0, 0)
|
||||||
|
style = Paint.Style.FILL
|
||||||
|
}
|
||||||
|
val padding = 10
|
||||||
|
canvas.drawRect(
|
||||||
|
10f, 10f,
|
||||||
|
(textBounds.width() + padding * 2).toFloat(),
|
||||||
|
(textBounds.height() + padding * 2).toFloat(),
|
||||||
|
bgPaint
|
||||||
|
)
|
||||||
|
|
||||||
|
// 绘制文字
|
||||||
|
canvas.drawText(text, (10 + padding).toFloat(), (10 + padding + textBounds.height()).toFloat(), textPaint)
|
||||||
|
|
||||||
|
return mutableBitmap
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示触发拍照参数输入对话框
|
||||||
|
*/
|
||||||
|
private fun showTriggerCaptureDialog() {
|
||||||
|
val view = layoutInflater.inflate(R.layout.dialog_trigger_capture, null)
|
||||||
|
val durationEdit = view.findViewById<EditText>(R.id.duration_edit)
|
||||||
|
val countEdit = view.findViewById<EditText>(R.id.count_edit)
|
||||||
|
val intervalEdit = view.findViewById<EditText>(R.id.interval_edit)
|
||||||
|
val modeSpinner = view.findViewById<android.widget.Spinner>(R.id.mode_spinner)
|
||||||
|
|
||||||
|
// 设置Spinner适配器
|
||||||
|
val modes = arrayOf("原图", "缩略图")
|
||||||
|
val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, modes)
|
||||||
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
|
modeSpinner.adapter = adapter
|
||||||
|
|
||||||
|
// 设置默认值
|
||||||
|
durationEdit.setText("5.0")
|
||||||
|
countEdit.setText("10")
|
||||||
|
intervalEdit.setText("0.5")
|
||||||
|
|
||||||
|
AlertDialog.Builder(requireContext())
|
||||||
|
.setTitle("触发拍照")
|
||||||
|
.setView(view)
|
||||||
|
.setPositiveButton("确定") { _, _ ->
|
||||||
|
val duration = durationEdit.text.toString().toDoubleOrNull() ?: 5.0
|
||||||
|
val count = countEdit.text.toString().toIntOrNull() ?: 10
|
||||||
|
val interval = intervalEdit.text.toString().toDoubleOrNull() ?: 0.5
|
||||||
|
val mode = modeSpinner.selectedItemPosition // 0=原图, 1=缩略图
|
||||||
|
|
||||||
|
triggerCaptureWithParams(duration, count, interval, mode)
|
||||||
|
}
|
||||||
|
.setNegativeButton("取消", null)
|
||||||
|
.setNeutralButton("设置") { _, _ ->
|
||||||
|
// 显示IP和端口配置对话框
|
||||||
|
showConfigDialog()
|
||||||
|
}
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示配置对话框(IP和端口)
|
||||||
|
*/
|
||||||
|
private fun showConfigDialog() {
|
||||||
|
val view = layoutInflater.inflate(android.R.layout.simple_list_item_2, null)
|
||||||
|
val ipEdit = EditText(requireContext())
|
||||||
|
ipEdit.hint = "ROS2节点IP地址"
|
||||||
|
ipEdit.setText(ros2NodeIp)
|
||||||
|
|
||||||
|
val portEdit = EditText(requireContext())
|
||||||
|
portEdit.hint = "HTTP端口"
|
||||||
|
portEdit.inputType = android.text.InputType.TYPE_CLASS_NUMBER
|
||||||
|
portEdit.setText(ros2HttpPort.toString())
|
||||||
|
|
||||||
|
val layout = android.widget.LinearLayout(requireContext()).apply {
|
||||||
|
orientation = android.widget.LinearLayout.VERTICAL
|
||||||
|
setPadding(50, 40, 50, 10)
|
||||||
|
addView(ipEdit)
|
||||||
|
addView(portEdit)
|
||||||
|
}
|
||||||
|
|
||||||
|
AlertDialog.Builder(requireContext())
|
||||||
|
.setTitle("ROS2节点配置")
|
||||||
|
.setView(layout)
|
||||||
|
.setPositiveButton("确定") { _, _ ->
|
||||||
|
ros2NodeIp = ipEdit.text.toString().ifEmpty { "192.168.1.100" }
|
||||||
|
ros2HttpPort = portEdit.text.toString().toIntOrNull() ?: 8080
|
||||||
|
Toast.makeText(context, "配置已保存: $ros2NodeIp:$ros2HttpPort", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
.setNegativeButton("取消", null)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 快速触发拍照(使用默认参数)
|
||||||
|
*/
|
||||||
|
private fun triggerCapture(mode: Int) {
|
||||||
|
triggerCaptureWithParams(5.0, 10, 0.5, mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用参数触发拍照
|
||||||
|
*/
|
||||||
|
private fun triggerCaptureWithParams(duration: Double, count: Int, interval: Double, mode: Int) {
|
||||||
|
val modeStr = if (mode == 0) "原图" else "缩略图"
|
||||||
|
|
||||||
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
// 构建JSON请求
|
||||||
|
val json = JSONObject().apply {
|
||||||
|
put("duration", duration)
|
||||||
|
put("count", count)
|
||||||
|
put("interval", interval)
|
||||||
|
put("transmission_mode", mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
val requestBody = json.toString().toRequestBody("application/json".toMediaType())
|
||||||
|
val url = "http://$ros2NodeIp:$ros2HttpPort/api/v1/trigger_capture"
|
||||||
|
|
||||||
|
val request = Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.post(requestBody)
|
||||||
|
.addHeader("User-Agent", "SkyLink-Android/1.0")
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val response = httpClient.newCall(request).execute()
|
||||||
|
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.isSuccessful) {
|
||||||
|
val responseBody = response.body?.string()
|
||||||
|
if (responseBody != null) {
|
||||||
|
try {
|
||||||
|
val responseJson = JSONObject(responseBody)
|
||||||
|
val success = responseJson.optBoolean("success", false)
|
||||||
|
val message = responseJson.optString("message", "")
|
||||||
|
val totalPhotos = responseJson.optInt("total_photos", 0)
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
Toast.makeText(context,
|
||||||
|
"拍照任务已启动!\n$message\n总照片数: $totalPhotos",
|
||||||
|
Toast.LENGTH_LONG).show()
|
||||||
|
updateStatus("拍照任务已启动 ($modeStr)")
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context,
|
||||||
|
"请求失败: $message",
|
||||||
|
Toast.LENGTH_LONG).show()
|
||||||
|
updateStatus("请求失败: $message")
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Toast.makeText(context,
|
||||||
|
"响应解析失败: ${e.message}",
|
||||||
|
Toast.LENGTH_SHORT).show()
|
||||||
|
updateStatus("响应解析失败")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context, "服务器返回空响应", Toast.LENGTH_SHORT).show()
|
||||||
|
updateStatus("服务器返回空响应")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val errorMsg = when (response.code) {
|
||||||
|
400 -> "请求参数错误"
|
||||||
|
404 -> "API端点不存在"
|
||||||
|
500 -> "服务器内部错误"
|
||||||
|
else -> "HTTP错误: ${response.code}"
|
||||||
|
}
|
||||||
|
Toast.makeText(context, errorMsg, Toast.LENGTH_LONG).show()
|
||||||
|
updateStatus(errorMsg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e: java.net.SocketTimeoutException) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(context,
|
||||||
|
"请求超时,请检查网络连接和ROS2节点IP地址 ($ros2NodeIp:$ros2HttpPort)",
|
||||||
|
Toast.LENGTH_LONG).show()
|
||||||
|
updateStatus("请求超时")
|
||||||
|
}
|
||||||
|
} catch (e: java.net.ConnectException) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(context,
|
||||||
|
"无法连接到ROS2节点 ($ros2NodeIp:$ros2HttpPort)\n请确认HTTP服务器正在运行",
|
||||||
|
Toast.LENGTH_LONG).show()
|
||||||
|
updateStatus("连接失败")
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(context,
|
||||||
|
"调用失败: ${e.message}",
|
||||||
|
Toast.LENGTH_LONG).show()
|
||||||
|
updateStatus("调用失败: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ object BitmapUtils {
|
|||||||
|
|
||||||
// 实际解码
|
// 实际解码
|
||||||
val bitmap = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.size, options)
|
val bitmap = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.size, options)
|
||||||
// Log.i(TAG, "✓ Bitmap 解码成功: ${bitmap?.width}x${bitmap?.height}") // 移除高频日志
|
// Log.i(TAG, " Bitmap 解码成功: ${bitmap?.width}x${bitmap?.height}") // 移除高频日志
|
||||||
bitmap
|
bitmap
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Bitmap 解码失败", e)
|
Log.e(TAG, "Bitmap 解码失败", e)
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="总时间 (秒, 0=默认):"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:layout_marginBottom="4dp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/duration_edit"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="numberDecimal"
|
||||||
|
android:hint="5.0"
|
||||||
|
android:layout_marginBottom="16dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="拍照数量 (0=默认):"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:layout_marginBottom="4dp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/count_edit"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="number"
|
||||||
|
android:hint="10"
|
||||||
|
android:layout_marginBottom="16dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="时间间隔 (秒, 0=自动):"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:layout_marginBottom="4dp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/interval_edit"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="numberDecimal"
|
||||||
|
android:hint="0.5"
|
||||||
|
android:layout_marginBottom="16dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="传输模式:"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:layout_marginBottom="4dp" />
|
||||||
|
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/mode_spinner"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:entries="@array/transmission_modes" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
@@ -68,8 +68,44 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
|
android:layout_marginEnd="4dp"
|
||||||
android:text="⏺ 开始录制" />
|
android:text="⏺ 开始录制" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/trigger_capture_button"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
|
android:text="📷 触发拍照" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- 第二行按钮 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:baselineAligned="false">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/trigger_capture_original_button"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_marginEnd="4dp"
|
||||||
|
android:text="📷 原图拍照" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/trigger_capture_thumbnail_button"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
|
android:text="📷 缩略图拍照" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
7
skylink_android_app/app/src/main/res/values/arrays.xml
Normal file
7
skylink_android_app/app/src/main/res/values/arrays.xml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string-array name="transmission_modes">
|
||||||
|
<item>原图</item>
|
||||||
|
<item>缩略图</item>
|
||||||
|
</string-array>
|
||||||
|
</resources>
|
||||||
Binary file not shown.
@@ -1,27 +1,40 @@
|
|||||||
# ninja log v6
|
# ninja log v6
|
||||||
1 237 1768965744018577716 skylink_station_autogen/timestamp 67b8a88a4f836678
|
|
||||||
1 237 1768965744018577716 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
|
||||||
1 237 1768965744018577716 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
|
||||||
1 237 1768965744018577716 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
|
|
||||||
237 246 1768965744032578704 skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
|
|
||||||
237 246 1768965744032578704 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
|
|
||||||
247 259 1768965744034578845 CMakeFiles/skylink_station.dir/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp.o b144aef3415b71b2
|
|
||||||
247 1139 1768965744034578845 CMakeFiles/skylink_station.dir/src/main.cpp.o 7a56a74093adf479
|
|
||||||
247 2179 1768965744034578845 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 6c56ad0b07b7bab9
|
|
||||||
247 1231 1768965744034578845 CMakeFiles/skylink_station.dir/src/DataLogger.cpp.o 3aaa238c7e188637
|
|
||||||
2 233 1768965948743624643 skylink_station_autogen/timestamp 67b8a88a4f836678
|
|
||||||
2 233 1768965948743624643 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
|
||||||
2 233 1768965948743624643 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
|
|
||||||
2 233 1768965948743624643 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
|
||||||
235 246 1768965948751625104 CMakeFiles/skylink_station.dir/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp.o af974169bd9ed7a4
|
|
||||||
234 1112 1768965948750625047 CMakeFiles/skylink_station.dir/src/DataLogger.cpp.o b87ed818438f6507
|
234 1112 1768965948750625047 CMakeFiles/skylink_station.dir/src/DataLogger.cpp.o b87ed818438f6507
|
||||||
2 234 1768966062311868601 skylink_station_autogen/timestamp 67b8a88a4f836678
|
|
||||||
2 234 1768966062311868601 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
|
||||||
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
|
|
||||||
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
|
||||||
235 1024 1768966062321869125 CMakeFiles/skylink_station.dir/src/DeviceInfoReceiver.cpp.o a36de3bc6879b4b2
|
|
||||||
234 1120 1768966062320869073 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
|
|
||||||
234 2045 1768966062320869073 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
|
|
||||||
234 2159 1768966062320869073 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 161e05dd02078224
|
234 2159 1768966062320869073 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 161e05dd02078224
|
||||||
234 2219 1768966062320869073 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
|
234 1120 1768966062320869073 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
|
||||||
2219 2440 1768966064305973131 skylink_station 1a20341c5a20a204
|
2219 2440 1768966064305973131 skylink_station 1a20341c5a20a204
|
||||||
|
234 2045 1768966062320869073 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
|
||||||
|
2 234 1768966062311868601 skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
237 246 1768965744032578704 skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
|
||||||
|
235 1024 1768966062321869125 CMakeFiles/skylink_station.dir/src/DeviceInfoReceiver.cpp.o a36de3bc6879b4b2
|
||||||
|
234 2219 1768966062320869073 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
|
||||||
|
237 246 1768965744032578704 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
|
||||||
|
2 234 1768966062311868601 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
235 246 1768965948751625104 CMakeFiles/skylink_station.dir/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp.o af974169bd9ed7a4
|
||||||
|
2 233 1770021668864715294 skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
2 233 1770021668864715294 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
2 233 1770021668864715294 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
2 233 1770021668864715294 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
234 1013 1770021668872715450 CMakeFiles/skylink_station.dir/src/DeviceInfoReceiver.cpp.o a36de3bc6879b4b2
|
||||||
|
233 1127 1770021668871715431 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
|
||||||
|
233 2068 1770021668871715431 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
|
||||||
|
233 2156 1770021668871715431 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 161e05dd02078224
|
||||||
|
233 2264 1770021668871715431 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
|
||||||
|
2264 2520 1770021670902755003 skylink_station 1a20341c5a20a204
|
||||||
|
2 139 1770022201333131084 skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
2 139 1770022201333131084 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
2 139 1770022201333131084 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
2 139 1770022201333131084 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
139 1010 1770022201341131292 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
|
||||||
|
139 1948 1770022201341131292 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
|
||||||
|
140 2054 1770022201341131292 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 161e05dd02078224
|
||||||
|
140 2461 1770022201341131292 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
|
||||||
|
2461 2682 1770022203662191772 skylink_station 1a20341c5a20a204
|
||||||
|
1 22 1770022435693402494 skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
1 22 1770022435693402494 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
1 22 1770022435693402494 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
|
||||||
|
1 22 1770022435693402494 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
|
||||||
|
22 2151 1770022435714403069 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
|
||||||
|
2151 2376 1770022437843461352 skylink_station 1a20341c5a20a204
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,15 +1,14 @@
|
|||||||
# Generated by CMake. Changes will be overwritten.
|
# Generated by CMake. Changes will be overwritten.
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/DataLogger.h
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/main.cpp
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/DataLogger.cpp
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/GroundReceiver.cpp
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfo.h
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.h
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.cpp
|
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.h
|
|
||||||
mmc:Q_OBJECT
|
mmc:Q_OBJECT
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.h
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/moc_predefs.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/moc_predefs.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QTimer
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h
|
||||||
@@ -21,6 +20,7 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic_cxx11.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic_cxx11.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbasicatomic.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbasicatomic.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbasictimer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbindingstorage.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbindingstorage.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearray.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearray.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearrayalgorithms.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearrayalgorithms.h
|
||||||
@@ -55,11 +55,13 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiodevicebase.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiodevicebase.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterable.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterable.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterator.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterator.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qline.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlist.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlist.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlocale.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlocale.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlogging.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlogging.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmalloc.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmalloc.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmap.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmap.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmargins.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmath.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmath.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetacontainer.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetacontainer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetatype.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetatype.h
|
||||||
@@ -72,7 +74,9 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qobjectdefs_impl.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qobjectdefs_impl.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qoverload.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qoverload.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qpair.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qpair.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qpoint.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qprocessordetection.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qprocessordetection.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qrect.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qrefcount.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qrefcount.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopedpointer.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopedpointer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopeguard.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopeguard.h
|
||||||
@@ -81,6 +85,7 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qshareddata_impl.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qshareddata_impl.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer_impl.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer_impl.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsize.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstring.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstring.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringalgorithms.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringalgorithms.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringbuilder.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringbuilder.h
|
||||||
@@ -102,6 +107,7 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtdeprecationmarkers.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtdeprecationmarkers.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtenvironmentvariables.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtenvironmentvariables.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtextstream.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtextstream.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtimer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtmetamacros.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtmetamacros.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtnoop.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtnoop.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtpreprocessorsupport.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtpreprocessorsupport.h
|
||||||
@@ -112,21 +118,66 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtversionchecks.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtversionchecks.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypeinfo.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypeinfo.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypes.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypes.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qurl.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qutf8stringview.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qutf8stringview.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvariant.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvariant.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvarlengtharray.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvarlengtharray.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qversiontagging.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qversiontagging.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qxptype_traits.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qxptype_traits.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/QImage
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qaction.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qbitmap.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qbrush.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qcolor.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qcursor.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qfont.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qfontinfo.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qfontmetrics.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qicon.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qimage.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qkeysequence.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpaintdevice.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpalette.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpicture.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpixelformat.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpixmap.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpolygon.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qregion.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qrgb.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qrgba64.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtextdocument.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtgui-config.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtguiexports.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtguiglobal.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtransform.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qwindowdefs.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QTcpSocket
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtcpsocket.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkglobal.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkglobal.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qudpsocket.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qudpsocket.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/QLabel
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/QMainWindow
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/QPushButton
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qabstractbutton.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qframe.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qlabel.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qmainwindow.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qpushbutton.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qsizepolicy.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtabwidget.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtwidgets-config.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtwidgetsexports.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtwidgetsglobal.h
|
||||||
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qwidget.h
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/protocol/protocol.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/protocol/protocol.h
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfo.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfo.h
|
||||||
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.h
|
||||||
mdp:/usr/include/alloca.h
|
mdp:/usr/include/alloca.h
|
||||||
mdp:/usr/include/asm-generic/errno-base.h
|
mdp:/usr/include/asm-generic/errno-base.h
|
||||||
mdp:/usr/include/asm-generic/errno.h
|
mdp:/usr/include/asm-generic/errno.h
|
||||||
@@ -382,6 +433,7 @@
|
|||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h
|
||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdbool.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdbool.h
|
||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h
|
||||||
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.cpp
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/GroundReceiver.h
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/GroundReceiver.h
|
||||||
mmc:Q_OBJECT
|
mmc:Q_OBJECT
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/GroundReceiver.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/GroundReceiver.h
|
||||||
@@ -938,15 +990,13 @@
|
|||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdbool.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdbool.h
|
||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h
|
||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/xmmintrin.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/xmmintrin.h
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.cpp
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.h
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.h
|
|
||||||
mmc:Q_OBJECT
|
mmc:Q_OBJECT
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.h
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/moc_predefs.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/moc_predefs.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QTimer
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h
|
||||||
@@ -958,7 +1008,6 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic_cxx11.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qatomic_cxx11.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbasicatomic.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbasicatomic.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbasictimer.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbindingstorage.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbindingstorage.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearray.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearray.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearrayalgorithms.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qbytearrayalgorithms.h
|
||||||
@@ -993,13 +1042,11 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiodevicebase.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiodevicebase.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterable.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterable.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterator.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qiterator.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qline.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlist.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlist.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlocale.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlocale.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlogging.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qlogging.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmalloc.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmalloc.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmap.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmap.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmargins.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmath.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmath.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetacontainer.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetacontainer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetatype.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qmetatype.h
|
||||||
@@ -1012,9 +1059,7 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qobjectdefs_impl.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qobjectdefs_impl.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qoverload.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qoverload.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qpair.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qpair.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qpoint.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qprocessordetection.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qprocessordetection.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qrect.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qrefcount.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qrefcount.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopedpointer.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopedpointer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopeguard.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qscopeguard.h
|
||||||
@@ -1023,7 +1068,6 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qshareddata_impl.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qshareddata_impl.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer_impl.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsharedpointer_impl.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qsize.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstring.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstring.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringalgorithms.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringalgorithms.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringbuilder.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qstringbuilder.h
|
||||||
@@ -1045,7 +1089,6 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtdeprecationmarkers.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtdeprecationmarkers.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtenvironmentvariables.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtenvironmentvariables.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtextstream.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtextstream.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtimer.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtmetamacros.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtmetamacros.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtnoop.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtnoop.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtpreprocessorsupport.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtpreprocessorsupport.h
|
||||||
@@ -1056,66 +1099,21 @@
|
|||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtversionchecks.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtversionchecks.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypeinfo.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypeinfo.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypes.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qtypes.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qurl.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qutf8stringview.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qutf8stringview.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvariant.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvariant.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvarlengtharray.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qvarlengtharray.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qversiontagging.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qversiontagging.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qxptype_traits.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qxptype_traits.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/QImage
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qaction.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qbitmap.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qbrush.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qcolor.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qcursor.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qfont.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qfontinfo.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qfontmetrics.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qicon.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qimage.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qkeysequence.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpaintdevice.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpalette.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpicture.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpixelformat.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpixmap.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qpolygon.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qregion.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qrgb.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qrgba64.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtextdocument.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtgui-config.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtguiexports.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtguiglobal.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtransform.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qwindowdefs.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QTcpSocket
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtcpsocket.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkglobal.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkglobal.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qudpsocket.h
|
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qudpsocket.h
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/QLabel
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/QMainWindow
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/QPushButton
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qabstractbutton.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qframe.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qlabel.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qmainwindow.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qpushbutton.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qsizepolicy.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtabwidget.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtwidgets-config.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtwidgetsexports.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qtwidgetsglobal.h
|
|
||||||
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtWidgets/qwidget.h
|
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/protocol/protocol.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/protocol/protocol.h
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfo.h
|
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfo.h
|
||||||
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.h
|
|
||||||
mdp:/usr/include/alloca.h
|
mdp:/usr/include/alloca.h
|
||||||
mdp:/usr/include/asm-generic/errno-base.h
|
mdp:/usr/include/asm-generic/errno-base.h
|
||||||
mdp:/usr/include/asm-generic/errno.h
|
mdp:/usr/include/asm-generic/errno.h
|
||||||
@@ -1371,5 +1369,7 @@
|
|||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h
|
||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdbool.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stdbool.h
|
||||||
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h
|
mdp:/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/GroundReceiver.cpp
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfoReceiver.cpp
|
||||||
/home/flower/code/camera/flyLink/skylink_qt_station/src/main.cpp
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/DeviceInfo.h
|
||||||
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/DataLogger.cpp
|
||||||
|
/home/flower/code/camera/flyLink/skylink_qt_station/src/DataLogger.h
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
Start testing: Jan 21 11:24 CST
|
Start testing: Feb 02 16:41 CST
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
End testing: Jan 21 11:24 CST
|
End testing: Feb 02 16:41 CST
|
||||||
|
|||||||
Binary file not shown.
@@ -45,6 +45,8 @@ static constexpr auto qt_meta_stringdata_CLASSGroundReceiverENDCLASS = QtMocHelp
|
|||||||
"lat",
|
"lat",
|
||||||
"lon",
|
"lon",
|
||||||
"alt",
|
"alt",
|
||||||
|
"uint32_t",
|
||||||
|
"photo_number",
|
||||||
"statsUpdated",
|
"statsUpdated",
|
||||||
"fps",
|
"fps",
|
||||||
"kbs",
|
"kbs",
|
||||||
@@ -56,7 +58,7 @@ static constexpr auto qt_meta_stringdata_CLASSGroundReceiverENDCLASS = QtMocHelp
|
|||||||
);
|
);
|
||||||
#else // !QT_MOC_HAS_STRING_DATA
|
#else // !QT_MOC_HAS_STRING_DATA
|
||||||
struct qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t {
|
struct qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t {
|
||||||
uint offsetsAndSizes[30];
|
uint offsetsAndSizes[34];
|
||||||
char stringdata0[15];
|
char stringdata0[15];
|
||||||
char stringdata1[13];
|
char stringdata1[13];
|
||||||
char stringdata2[1];
|
char stringdata2[1];
|
||||||
@@ -64,14 +66,16 @@ struct qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t {
|
|||||||
char stringdata4[4];
|
char stringdata4[4];
|
||||||
char stringdata5[4];
|
char stringdata5[4];
|
||||||
char stringdata6[4];
|
char stringdata6[4];
|
||||||
char stringdata7[13];
|
char stringdata7[9];
|
||||||
char stringdata8[4];
|
char stringdata8[13];
|
||||||
char stringdata9[4];
|
char stringdata9[13];
|
||||||
char stringdata10[6];
|
char stringdata10[4];
|
||||||
char stringdata11[10];
|
char stringdata11[4];
|
||||||
char stringdata12[18];
|
char stringdata12[6];
|
||||||
char stringdata13[13];
|
char stringdata13[10];
|
||||||
char stringdata14[19];
|
char stringdata14[18];
|
||||||
|
char stringdata15[13];
|
||||||
|
char stringdata16[19];
|
||||||
};
|
};
|
||||||
#define QT_MOC_LITERAL(ofs, len) \
|
#define QT_MOC_LITERAL(ofs, len) \
|
||||||
uint(sizeof(qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t::offsetsAndSizes) + ofs), len
|
uint(sizeof(qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t::offsetsAndSizes) + ofs), len
|
||||||
@@ -84,14 +88,16 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t qt_met
|
|||||||
QT_MOC_LITERAL(33, 3), // "lat"
|
QT_MOC_LITERAL(33, 3), // "lat"
|
||||||
QT_MOC_LITERAL(37, 3), // "lon"
|
QT_MOC_LITERAL(37, 3), // "lon"
|
||||||
QT_MOC_LITERAL(41, 3), // "alt"
|
QT_MOC_LITERAL(41, 3), // "alt"
|
||||||
QT_MOC_LITERAL(45, 12), // "statsUpdated"
|
QT_MOC_LITERAL(45, 8), // "uint32_t"
|
||||||
QT_MOC_LITERAL(58, 3), // "fps"
|
QT_MOC_LITERAL(54, 12), // "photo_number"
|
||||||
QT_MOC_LITERAL(62, 3), // "kbs"
|
QT_MOC_LITERAL(67, 12), // "statsUpdated"
|
||||||
QT_MOC_LITERAL(66, 5), // "error"
|
QT_MOC_LITERAL(80, 3), // "fps"
|
||||||
QT_MOC_LITERAL(72, 9), // "error_msg"
|
QT_MOC_LITERAL(84, 3), // "kbs"
|
||||||
QT_MOC_LITERAL(82, 17), // "on_udp_read_ready"
|
QT_MOC_LITERAL(88, 5), // "error"
|
||||||
QT_MOC_LITERAL(100, 12), // "on_udp_error"
|
QT_MOC_LITERAL(94, 9), // "error_msg"
|
||||||
QT_MOC_LITERAL(113, 18) // "on_cleanup_timeout"
|
QT_MOC_LITERAL(104, 17), // "on_udp_read_ready"
|
||||||
|
QT_MOC_LITERAL(122, 12), // "on_udp_error"
|
||||||
|
QT_MOC_LITERAL(135, 18) // "on_cleanup_timeout"
|
||||||
},
|
},
|
||||||
"GroundReceiver",
|
"GroundReceiver",
|
||||||
"frameDecoded",
|
"frameDecoded",
|
||||||
@@ -100,6 +106,8 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t qt_met
|
|||||||
"lat",
|
"lat",
|
||||||
"lon",
|
"lon",
|
||||||
"alt",
|
"alt",
|
||||||
|
"uint32_t",
|
||||||
|
"photo_number",
|
||||||
"statsUpdated",
|
"statsUpdated",
|
||||||
"fps",
|
"fps",
|
||||||
"kbs",
|
"kbs",
|
||||||
@@ -127,19 +135,19 @@ Q_CONSTINIT static const uint qt_meta_data_CLASSGroundReceiverENDCLASS[] = {
|
|||||||
3, // signalCount
|
3, // signalCount
|
||||||
|
|
||||||
// signals: name, argc, parameters, tag, flags, initial metatype offsets
|
// signals: name, argc, parameters, tag, flags, initial metatype offsets
|
||||||
1, 4, 50, 2, 0x06, 1 /* Public */,
|
1, 5, 50, 2, 0x06, 1 /* Public */,
|
||||||
7, 2, 59, 2, 0x06, 6 /* Public */,
|
9, 2, 61, 2, 0x06, 7 /* Public */,
|
||||||
10, 1, 64, 2, 0x06, 9 /* Public */,
|
12, 1, 66, 2, 0x06, 10 /* Public */,
|
||||||
|
|
||||||
// slots: name, argc, parameters, tag, flags, initial metatype offsets
|
// slots: name, argc, parameters, tag, flags, initial metatype offsets
|
||||||
12, 0, 67, 2, 0x08, 11 /* Private */,
|
14, 0, 69, 2, 0x08, 12 /* Private */,
|
||||||
13, 0, 68, 2, 0x08, 12 /* Private */,
|
15, 0, 70, 2, 0x08, 13 /* Private */,
|
||||||
14, 0, 69, 2, 0x08, 13 /* Private */,
|
16, 0, 71, 2, 0x08, 14 /* Private */,
|
||||||
|
|
||||||
// signals: parameters
|
// signals: parameters
|
||||||
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 3, 4, 5, 6,
|
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 0x80000000 | 7, 3, 4, 5, 6, 8,
|
||||||
QMetaType::Void, QMetaType::Int, QMetaType::Int, 8, 9,
|
QMetaType::Void, QMetaType::Int, QMetaType::Int, 10, 11,
|
||||||
QMetaType::Void, QMetaType::QString, 11,
|
QMetaType::Void, QMetaType::QString, 13,
|
||||||
|
|
||||||
// slots: parameters
|
// slots: parameters
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
@@ -164,6 +172,7 @@ Q_CONSTINIT const QMetaObject GroundReceiver::staticMetaObject = { {
|
|||||||
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
||||||
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
||||||
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
||||||
|
QtPrivate::TypeAndForceComplete<uint32_t, std::false_type>,
|
||||||
// method 'statsUpdated'
|
// method 'statsUpdated'
|
||||||
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
||||||
QtPrivate::TypeAndForceComplete<int, std::false_type>,
|
QtPrivate::TypeAndForceComplete<int, std::false_type>,
|
||||||
@@ -187,7 +196,7 @@ void GroundReceiver::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _
|
|||||||
auto *_t = static_cast<GroundReceiver *>(_o);
|
auto *_t = static_cast<GroundReceiver *>(_o);
|
||||||
(void)_t;
|
(void)_t;
|
||||||
switch (_id) {
|
switch (_id) {
|
||||||
case 0: _t->frameDecoded((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4]))); break;
|
case 0: _t->frameDecoded((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4])),(*reinterpret_cast< std::add_pointer_t<uint32_t>>(_a[5]))); break;
|
||||||
case 1: _t->statsUpdated((*reinterpret_cast< std::add_pointer_t<int>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
|
case 1: _t->statsUpdated((*reinterpret_cast< std::add_pointer_t<int>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
|
||||||
case 2: _t->error((*reinterpret_cast< std::add_pointer_t<QString>>(_a[1]))); break;
|
case 2: _t->error((*reinterpret_cast< std::add_pointer_t<QString>>(_a[1]))); break;
|
||||||
case 3: _t->on_udp_read_ready(); break;
|
case 3: _t->on_udp_read_ready(); break;
|
||||||
@@ -198,7 +207,7 @@ void GroundReceiver::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _
|
|||||||
} else if (_c == QMetaObject::IndexOfMethod) {
|
} else if (_c == QMetaObject::IndexOfMethod) {
|
||||||
int *result = reinterpret_cast<int *>(_a[0]);
|
int *result = reinterpret_cast<int *>(_a[0]);
|
||||||
{
|
{
|
||||||
using _t = void (GroundReceiver::*)(const QImage & , double , double , double );
|
using _t = void (GroundReceiver::*)(const QImage & , double , double , double , uint32_t );
|
||||||
if (_t _q_method = &GroundReceiver::frameDecoded; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
|
if (_t _q_method = &GroundReceiver::frameDecoded; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
|
||||||
*result = 0;
|
*result = 0;
|
||||||
return;
|
return;
|
||||||
@@ -252,9 +261,9 @@ int GroundReceiver::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SIGNAL 0
|
// SIGNAL 0
|
||||||
void GroundReceiver::frameDecoded(const QImage & _t1, double _t2, double _t3, double _t4)
|
void GroundReceiver::frameDecoded(const QImage & _t1, double _t2, double _t3, double _t4, uint32_t _t5)
|
||||||
{
|
{
|
||||||
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t3))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t4))) };
|
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t3))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t4))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t5))) };
|
||||||
QMetaObject::activate(this, &staticMetaObject, 0, _a);
|
QMetaObject::activate(this, &staticMetaObject, 0, _a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ static constexpr auto qt_meta_stringdata_CLASSMainWindowENDCLASS = QtMocHelpers:
|
|||||||
"lat",
|
"lat",
|
||||||
"lon",
|
"lon",
|
||||||
"alt",
|
"alt",
|
||||||
|
"uint32_t",
|
||||||
|
"photo_number",
|
||||||
"on_stats_updated",
|
"on_stats_updated",
|
||||||
"fps",
|
"fps",
|
||||||
"kbs",
|
"kbs",
|
||||||
@@ -53,13 +55,14 @@ static constexpr auto qt_meta_stringdata_CLASSMainWindowENDCLASS = QtMocHelpers:
|
|||||||
"on_record_toggled",
|
"on_record_toggled",
|
||||||
"checked",
|
"checked",
|
||||||
"on_settings_clicked",
|
"on_settings_clicked",
|
||||||
|
"on_trigger_capture_clicked",
|
||||||
"on_device_info_received",
|
"on_device_info_received",
|
||||||
"DeviceInfo",
|
"DeviceInfo",
|
||||||
"info"
|
"info"
|
||||||
);
|
);
|
||||||
#else // !QT_MOC_HAS_STRING_DATA
|
#else // !QT_MOC_HAS_STRING_DATA
|
||||||
struct qt_meta_stringdata_CLASSMainWindowENDCLASS_t {
|
struct qt_meta_stringdata_CLASSMainWindowENDCLASS_t {
|
||||||
uint offsetsAndSizes[34];
|
uint offsetsAndSizes[40];
|
||||||
char stringdata0[11];
|
char stringdata0[11];
|
||||||
char stringdata1[18];
|
char stringdata1[18];
|
||||||
char stringdata2[1];
|
char stringdata2[1];
|
||||||
@@ -67,16 +70,19 @@ struct qt_meta_stringdata_CLASSMainWindowENDCLASS_t {
|
|||||||
char stringdata4[4];
|
char stringdata4[4];
|
||||||
char stringdata5[4];
|
char stringdata5[4];
|
||||||
char stringdata6[4];
|
char stringdata6[4];
|
||||||
char stringdata7[17];
|
char stringdata7[9];
|
||||||
char stringdata8[4];
|
char stringdata8[13];
|
||||||
char stringdata9[4];
|
char stringdata9[17];
|
||||||
char stringdata10[22];
|
char stringdata10[4];
|
||||||
char stringdata11[18];
|
char stringdata11[4];
|
||||||
char stringdata12[8];
|
char stringdata12[22];
|
||||||
char stringdata13[20];
|
char stringdata13[18];
|
||||||
char stringdata14[24];
|
char stringdata14[8];
|
||||||
char stringdata15[11];
|
char stringdata15[20];
|
||||||
char stringdata16[5];
|
char stringdata16[27];
|
||||||
|
char stringdata17[24];
|
||||||
|
char stringdata18[11];
|
||||||
|
char stringdata19[5];
|
||||||
};
|
};
|
||||||
#define QT_MOC_LITERAL(ofs, len) \
|
#define QT_MOC_LITERAL(ofs, len) \
|
||||||
uint(sizeof(qt_meta_stringdata_CLASSMainWindowENDCLASS_t::offsetsAndSizes) + ofs), len
|
uint(sizeof(qt_meta_stringdata_CLASSMainWindowENDCLASS_t::offsetsAndSizes) + ofs), len
|
||||||
@@ -89,16 +95,19 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSMainWindowENDCLASS_t qt_meta_st
|
|||||||
QT_MOC_LITERAL(34, 3), // "lat"
|
QT_MOC_LITERAL(34, 3), // "lat"
|
||||||
QT_MOC_LITERAL(38, 3), // "lon"
|
QT_MOC_LITERAL(38, 3), // "lon"
|
||||||
QT_MOC_LITERAL(42, 3), // "alt"
|
QT_MOC_LITERAL(42, 3), // "alt"
|
||||||
QT_MOC_LITERAL(46, 16), // "on_stats_updated"
|
QT_MOC_LITERAL(46, 8), // "uint32_t"
|
||||||
QT_MOC_LITERAL(63, 3), // "fps"
|
QT_MOC_LITERAL(55, 12), // "photo_number"
|
||||||
QT_MOC_LITERAL(67, 3), // "kbs"
|
QT_MOC_LITERAL(68, 16), // "on_stats_updated"
|
||||||
QT_MOC_LITERAL(71, 21), // "on_save_frame_clicked"
|
QT_MOC_LITERAL(85, 3), // "fps"
|
||||||
QT_MOC_LITERAL(93, 17), // "on_record_toggled"
|
QT_MOC_LITERAL(89, 3), // "kbs"
|
||||||
QT_MOC_LITERAL(111, 7), // "checked"
|
QT_MOC_LITERAL(93, 21), // "on_save_frame_clicked"
|
||||||
QT_MOC_LITERAL(119, 19), // "on_settings_clicked"
|
QT_MOC_LITERAL(115, 17), // "on_record_toggled"
|
||||||
QT_MOC_LITERAL(139, 23), // "on_device_info_received"
|
QT_MOC_LITERAL(133, 7), // "checked"
|
||||||
QT_MOC_LITERAL(163, 10), // "DeviceInfo"
|
QT_MOC_LITERAL(141, 19), // "on_settings_clicked"
|
||||||
QT_MOC_LITERAL(174, 4) // "info"
|
QT_MOC_LITERAL(161, 26), // "on_trigger_capture_clicked"
|
||||||
|
QT_MOC_LITERAL(188, 23), // "on_device_info_received"
|
||||||
|
QT_MOC_LITERAL(212, 10), // "DeviceInfo"
|
||||||
|
QT_MOC_LITERAL(223, 4) // "info"
|
||||||
},
|
},
|
||||||
"MainWindow",
|
"MainWindow",
|
||||||
"on_frame_received",
|
"on_frame_received",
|
||||||
@@ -107,6 +116,8 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSMainWindowENDCLASS_t qt_meta_st
|
|||||||
"lat",
|
"lat",
|
||||||
"lon",
|
"lon",
|
||||||
"alt",
|
"alt",
|
||||||
|
"uint32_t",
|
||||||
|
"photo_number",
|
||||||
"on_stats_updated",
|
"on_stats_updated",
|
||||||
"fps",
|
"fps",
|
||||||
"kbs",
|
"kbs",
|
||||||
@@ -114,6 +125,7 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSMainWindowENDCLASS_t qt_meta_st
|
|||||||
"on_record_toggled",
|
"on_record_toggled",
|
||||||
"checked",
|
"checked",
|
||||||
"on_settings_clicked",
|
"on_settings_clicked",
|
||||||
|
"on_trigger_capture_clicked",
|
||||||
"on_device_info_received",
|
"on_device_info_received",
|
||||||
"DeviceInfo",
|
"DeviceInfo",
|
||||||
"info"
|
"info"
|
||||||
@@ -128,7 +140,7 @@ Q_CONSTINIT static const uint qt_meta_data_CLASSMainWindowENDCLASS[] = {
|
|||||||
11, // revision
|
11, // revision
|
||||||
0, // classname
|
0, // classname
|
||||||
0, 0, // classinfo
|
0, 0, // classinfo
|
||||||
6, 14, // methods
|
7, 14, // methods
|
||||||
0, 0, // properties
|
0, 0, // properties
|
||||||
0, 0, // enums/sets
|
0, 0, // enums/sets
|
||||||
0, 0, // constructors
|
0, 0, // constructors
|
||||||
@@ -136,20 +148,22 @@ Q_CONSTINIT static const uint qt_meta_data_CLASSMainWindowENDCLASS[] = {
|
|||||||
0, // signalCount
|
0, // signalCount
|
||||||
|
|
||||||
// slots: name, argc, parameters, tag, flags, initial metatype offsets
|
// slots: name, argc, parameters, tag, flags, initial metatype offsets
|
||||||
1, 4, 50, 2, 0x08, 1 /* Private */,
|
1, 5, 56, 2, 0x08, 1 /* Private */,
|
||||||
7, 2, 59, 2, 0x08, 6 /* Private */,
|
9, 2, 67, 2, 0x08, 7 /* Private */,
|
||||||
10, 0, 64, 2, 0x08, 9 /* Private */,
|
12, 0, 72, 2, 0x08, 10 /* Private */,
|
||||||
11, 1, 65, 2, 0x08, 10 /* Private */,
|
13, 1, 73, 2, 0x08, 11 /* Private */,
|
||||||
13, 0, 68, 2, 0x08, 12 /* Private */,
|
15, 0, 76, 2, 0x08, 13 /* Private */,
|
||||||
14, 1, 69, 2, 0x08, 13 /* Private */,
|
16, 0, 77, 2, 0x08, 14 /* Private */,
|
||||||
|
17, 1, 78, 2, 0x08, 15 /* Private */,
|
||||||
|
|
||||||
// slots: parameters
|
// slots: parameters
|
||||||
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 3, 4, 5, 6,
|
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 0x80000000 | 7, 3, 4, 5, 6, 8,
|
||||||
QMetaType::Void, QMetaType::Int, QMetaType::Int, 8, 9,
|
QMetaType::Void, QMetaType::Int, QMetaType::Int, 10, 11,
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
QMetaType::Void, QMetaType::Bool, 12,
|
QMetaType::Void, QMetaType::Bool, 14,
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
QMetaType::Void, 0x80000000 | 15, 16,
|
QMetaType::Void,
|
||||||
|
QMetaType::Void, 0x80000000 | 18, 19,
|
||||||
|
|
||||||
0 // eod
|
0 // eod
|
||||||
};
|
};
|
||||||
@@ -169,6 +183,7 @@ Q_CONSTINIT const QMetaObject MainWindow::staticMetaObject = { {
|
|||||||
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
||||||
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
||||||
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
QtPrivate::TypeAndForceComplete<double, std::false_type>,
|
||||||
|
QtPrivate::TypeAndForceComplete<uint32_t, std::false_type>,
|
||||||
// method 'on_stats_updated'
|
// method 'on_stats_updated'
|
||||||
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
||||||
QtPrivate::TypeAndForceComplete<int, std::false_type>,
|
QtPrivate::TypeAndForceComplete<int, std::false_type>,
|
||||||
@@ -180,6 +195,8 @@ Q_CONSTINIT const QMetaObject MainWindow::staticMetaObject = { {
|
|||||||
QtPrivate::TypeAndForceComplete<bool, std::false_type>,
|
QtPrivate::TypeAndForceComplete<bool, std::false_type>,
|
||||||
// method 'on_settings_clicked'
|
// method 'on_settings_clicked'
|
||||||
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
||||||
|
// method 'on_trigger_capture_clicked'
|
||||||
|
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
||||||
// method 'on_device_info_received'
|
// method 'on_device_info_received'
|
||||||
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
QtPrivate::TypeAndForceComplete<void, std::false_type>,
|
||||||
QtPrivate::TypeAndForceComplete<const DeviceInfo &, std::false_type>
|
QtPrivate::TypeAndForceComplete<const DeviceInfo &, std::false_type>
|
||||||
@@ -193,12 +210,13 @@ void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
|
|||||||
auto *_t = static_cast<MainWindow *>(_o);
|
auto *_t = static_cast<MainWindow *>(_o);
|
||||||
(void)_t;
|
(void)_t;
|
||||||
switch (_id) {
|
switch (_id) {
|
||||||
case 0: _t->on_frame_received((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4]))); break;
|
case 0: _t->on_frame_received((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4])),(*reinterpret_cast< std::add_pointer_t<uint32_t>>(_a[5]))); break;
|
||||||
case 1: _t->on_stats_updated((*reinterpret_cast< std::add_pointer_t<int>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
|
case 1: _t->on_stats_updated((*reinterpret_cast< std::add_pointer_t<int>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
|
||||||
case 2: _t->on_save_frame_clicked(); break;
|
case 2: _t->on_save_frame_clicked(); break;
|
||||||
case 3: _t->on_record_toggled((*reinterpret_cast< std::add_pointer_t<bool>>(_a[1]))); break;
|
case 3: _t->on_record_toggled((*reinterpret_cast< std::add_pointer_t<bool>>(_a[1]))); break;
|
||||||
case 4: _t->on_settings_clicked(); break;
|
case 4: _t->on_settings_clicked(); break;
|
||||||
case 5: _t->on_device_info_received((*reinterpret_cast< std::add_pointer_t<DeviceInfo>>(_a[1]))); break;
|
case 5: _t->on_trigger_capture_clicked(); break;
|
||||||
|
case 6: _t->on_device_info_received((*reinterpret_cast< std::add_pointer_t<DeviceInfo>>(_a[1]))); break;
|
||||||
default: ;
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,13 +241,13 @@ int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
|||||||
if (_id < 0)
|
if (_id < 0)
|
||||||
return _id;
|
return _id;
|
||||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||||
if (_id < 6)
|
if (_id < 7)
|
||||||
qt_static_metacall(this, _c, _id, _a);
|
qt_static_metacall(this, _c, _id, _a);
|
||||||
_id -= 6;
|
_id -= 7;
|
||||||
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||||
if (_id < 6)
|
if (_id < 7)
|
||||||
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
|
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
|
||||||
_id -= 6;
|
_id -= 7;
|
||||||
}
|
}
|
||||||
return _id;
|
return _id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ void GroundReceiver::start() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "✓ UDP 接收器已启动,监听端口: " << listen_port_ << std::endl;
|
std::cout << " UDP 接收器已启动,监听端口: " << listen_port_ << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroundReceiver::stop() {
|
void GroundReceiver::stop() {
|
||||||
@@ -147,6 +147,7 @@ void GroundReceiver::process_packet(const uint8_t* data, size_t len) {
|
|||||||
fb.lon = header->lon;
|
fb.lon = header->lon;
|
||||||
fb.alt = header->alt;
|
fb.alt = header->alt;
|
||||||
fb.receive_time_ms = QDateTime::currentMSecsSinceEpoch();
|
fb.receive_time_ms = QDateTime::currentMSecsSinceEpoch();
|
||||||
|
fb.photo_number = header->reserve; // 从reserve字段提取照片编号
|
||||||
|
|
||||||
it = frame_buffers_.insert({header->frame_id, fb}).first;
|
it = frame_buffers_.insert({header->frame_id, fb}).first;
|
||||||
}
|
}
|
||||||
@@ -343,10 +344,10 @@ void GroundReceiver::handle_complete_frame(const FrameBuffer& frame) {
|
|||||||
last_complete_frame_id_ = frame.frame_id;
|
last_complete_frame_id_ = frame.frame_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发出信号
|
// 发出信号(包含照片编号)
|
||||||
qDebug() << "帧" << frame.frame_id << "解码成功,图像大小:" << image.width() << "x" << image.height()
|
qDebug() << "帧" << frame.frame_id << "解码成功,图像大小:" << image.width() << "x" << image.height()
|
||||||
<< "格式:" << image.format() << "准备发出frameDecoded信号";
|
<< "格式:" << image.format() << "照片编号:" << frame.photo_number << "准备发出frameDecoded信号";
|
||||||
emit frameDecoded(image, frame.lat, frame.lon, frame.alt);
|
emit frameDecoded(image, frame.lat, frame.lon, frame.alt, frame.photo_number);
|
||||||
qDebug() << "frameDecoded信号已发出";
|
qDebug() << "frameDecoded信号已发出";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ struct FrameBuffer {
|
|||||||
double timestamp;
|
double timestamp;
|
||||||
double lat, lon, alt;
|
double lat, lon, alt;
|
||||||
uint64_t receive_time_ms;
|
uint64_t receive_time_ms;
|
||||||
|
uint32_t photo_number = 0; // 照片编号(从reserve字段提取)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 检查是否所有分片都已接收
|
* @brief 检查是否所有分片都已接收
|
||||||
@@ -139,8 +140,9 @@ signals:
|
|||||||
* @param lat 纬度
|
* @param lat 纬度
|
||||||
* @param lon 经度
|
* @param lon 经度
|
||||||
* @param alt 海拔
|
* @param alt 海拔
|
||||||
|
* @param photo_number 照片编号
|
||||||
*/
|
*/
|
||||||
void frameDecoded(const QImage& img, double lat, double lon, double alt);
|
void frameDecoded(const QImage& img, double lat, double lon, double alt, uint32_t photo_number);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 统计信息更新信号
|
* @brief 统计信息更新信号
|
||||||
|
|||||||
@@ -23,6 +23,21 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
#include <QFormLayout>
|
||||||
|
#include <QDoubleSpinBox>
|
||||||
|
#include <QSpinBox>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QProcess>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkRequest>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QJsonObject>
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonParseError>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
@@ -60,9 +75,14 @@ MainWindow::MainWindow(QWidget* parent)
|
|||||||
// 创建记录器
|
// 创建记录器
|
||||||
logger_ = std::make_shared<DataLogger>("./skylink_data");
|
logger_ = std::make_shared<DataLogger>("./skylink_data");
|
||||||
|
|
||||||
|
// 创建网络管理器
|
||||||
|
network_manager_ = new QNetworkAccessManager(this);
|
||||||
|
connect(network_manager_, &QNetworkAccessManager::finished,
|
||||||
|
this, &MainWindow::onHttpReply);
|
||||||
|
|
||||||
// 连接信号
|
// 连接信号
|
||||||
bool connected1 = connect(receiver_.get(), &GroundReceiver::frameDecoded,
|
bool connected1 = connect(receiver_.get(), qOverload<const QImage&, double, double, double, uint32_t>(&GroundReceiver::frameDecoded),
|
||||||
this, &MainWindow::on_frame_received);
|
this, &MainWindow::on_frame_received);
|
||||||
bool connected2 = connect(receiver_.get(), &GroundReceiver::statsUpdated,
|
bool connected2 = connect(receiver_.get(), &GroundReceiver::statsUpdated,
|
||||||
this, &MainWindow::on_stats_updated);
|
this, &MainWindow::on_stats_updated);
|
||||||
|
|
||||||
@@ -155,12 +175,14 @@ void MainWindow::init_ui() {
|
|||||||
|
|
||||||
save_frame_btn_ = new QPushButton("📸 保存帧", this);
|
save_frame_btn_ = new QPushButton("📸 保存帧", this);
|
||||||
record_btn_ = new QPushButton("⏺ 开始录制", this);
|
record_btn_ = new QPushButton("⏺ 开始录制", this);
|
||||||
|
trigger_capture_btn_ = new QPushButton("📷 触发拍照", this);
|
||||||
settings_btn_ = new QPushButton("⚙ 设置", this);
|
settings_btn_ = new QPushButton("⚙ 设置", this);
|
||||||
|
|
||||||
record_btn_->setCheckable(true);
|
record_btn_->setCheckable(true);
|
||||||
|
|
||||||
btn_layout->addWidget(save_frame_btn_);
|
btn_layout->addWidget(save_frame_btn_);
|
||||||
btn_layout->addWidget(record_btn_);
|
btn_layout->addWidget(record_btn_);
|
||||||
|
btn_layout->addWidget(trigger_capture_btn_);
|
||||||
btn_layout->addWidget(settings_btn_);
|
btn_layout->addWidget(settings_btn_);
|
||||||
btn_layout->addStretch();
|
btn_layout->addStretch();
|
||||||
|
|
||||||
@@ -177,6 +199,9 @@ void MainWindow::init_connections() {
|
|||||||
|
|
||||||
connect(settings_btn_, &QPushButton::clicked,
|
connect(settings_btn_, &QPushButton::clicked,
|
||||||
this, &MainWindow::on_settings_clicked);
|
this, &MainWindow::on_settings_clicked);
|
||||||
|
|
||||||
|
connect(trigger_capture_btn_, &QPushButton::clicked,
|
||||||
|
this, &MainWindow::on_trigger_capture_clicked);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::create_menus() {
|
void MainWindow::create_menus() {
|
||||||
@@ -199,7 +224,7 @@ void MainWindow::create_menus() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_frame_received(const QImage& img, double lat, double lon, double alt) {
|
void MainWindow::on_frame_received(const QImage& img, double lat, double lon, double alt, uint32_t photo_number) {
|
||||||
// 调试信息
|
// 调试信息
|
||||||
static int frame_count = 0;
|
static int frame_count = 0;
|
||||||
frame_count++;
|
frame_count++;
|
||||||
@@ -211,12 +236,17 @@ void MainWindow::on_frame_received(const QImage& img, double lat, double lon, do
|
|||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "收到图像,帧" << frame_count << "大小:" << img.width() << "x" << img.height()
|
qDebug() << "收到图像,帧" << frame_count << "大小:" << img.width() << "x" << img.height()
|
||||||
<< "格式:" << img.format();
|
<< "格式:" << img.format() << "照片编号:" << photo_number;
|
||||||
|
|
||||||
current_image_ = img;
|
current_image_ = img;
|
||||||
current_lat_ = lat;
|
current_lat_ = lat;
|
||||||
current_lon_ = lon;
|
current_lon_ = lon;
|
||||||
current_alt_ = alt;
|
current_alt_ = alt;
|
||||||
|
current_photo_number_ = photo_number;
|
||||||
|
|
||||||
|
if (photo_number > 0) {
|
||||||
|
total_photos_received_++;
|
||||||
|
}
|
||||||
|
|
||||||
// 显示图像
|
// 显示图像
|
||||||
QPixmap pixmap = QPixmap::fromImage(img);
|
QPixmap pixmap = QPixmap::fromImage(img);
|
||||||
@@ -240,14 +270,29 @@ void MainWindow::on_frame_received(const QImage& img, double lat, double lon, do
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在图像上叠加显示照片编号
|
||||||
|
if (photo_number > 0) {
|
||||||
|
QPainter painter(&scaled_pixmap);
|
||||||
|
painter.setPen(QPen(Qt::white, 2));
|
||||||
|
painter.setFont(QFont("Arial", 16, QFont::Bold));
|
||||||
|
QString photo_text = QString("Photo #%1").arg(photo_number);
|
||||||
|
QRect textRect = painter.fontMetrics().boundingRect(photo_text);
|
||||||
|
painter.fillRect(10, 10, textRect.width() + 10, textRect.height() + 5, QColor(0, 0, 0, 180));
|
||||||
|
painter.drawText(15, 10 + textRect.height(), photo_text);
|
||||||
|
}
|
||||||
|
|
||||||
video_label_->setPixmap(scaled_pixmap);
|
video_label_->setPixmap(scaled_pixmap);
|
||||||
video_label_->setText(""); // 清除文本,显示图片
|
video_label_->setText(""); // 清除文本,显示图片
|
||||||
|
|
||||||
// 更新状态栏
|
// 更新状态栏
|
||||||
statusBar()->showMessage(QString("已接收 %1 帧 | 图像: %2x%3")
|
QString status_text = QString("已接收 %1 帧 | 图像: %2x%3")
|
||||||
.arg(frame_count)
|
.arg(frame_count)
|
||||||
.arg(img.width())
|
.arg(img.width())
|
||||||
.arg(img.height()), 1000);
|
.arg(img.height());
|
||||||
|
if (photo_number > 0) {
|
||||||
|
status_text += QString(" | 照片编号: %1").arg(photo_number);
|
||||||
|
}
|
||||||
|
statusBar()->showMessage(status_text, 1000);
|
||||||
|
|
||||||
// 更新 GPS 标签
|
// 更新 GPS 标签
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
@@ -268,6 +313,9 @@ void MainWindow::on_stats_updated(int fps, int kbs) {
|
|||||||
oss << "FPS: " << fps << "\n";
|
oss << "FPS: " << fps << "\n";
|
||||||
oss << "速率: " << kbs << " KB/s\n";
|
oss << "速率: " << kbs << " KB/s\n";
|
||||||
oss << "丢包率: " << "计算中..." << "%";
|
oss << "丢包率: " << "计算中..." << "%";
|
||||||
|
if (total_photos_received_ > 0) {
|
||||||
|
oss << "\n总照片数: " << total_photos_received_;
|
||||||
|
}
|
||||||
stats_label_->setText(QString::fromStdString(oss.str()));
|
stats_label_->setText(QString::fromStdString(oss.str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,6 +358,169 @@ void MainWindow::on_settings_clicked() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_trigger_capture_clicked() {
|
||||||
|
// 创建参数输入对话框
|
||||||
|
QDialog dialog(this);
|
||||||
|
dialog.setWindowTitle("触发拍照");
|
||||||
|
dialog.setModal(true);
|
||||||
|
|
||||||
|
QFormLayout* form = new QFormLayout(&dialog);
|
||||||
|
|
||||||
|
// 总时间
|
||||||
|
QDoubleSpinBox* duration_spin = new QDoubleSpinBox(&dialog);
|
||||||
|
duration_spin->setRange(0.0, 3600.0);
|
||||||
|
duration_spin->setValue(5.0);
|
||||||
|
duration_spin->setSuffix(" 秒");
|
||||||
|
duration_spin->setDecimals(1);
|
||||||
|
form->addRow("总时间 (0=默认):", duration_spin);
|
||||||
|
|
||||||
|
// 拍照数量
|
||||||
|
QSpinBox* count_spin = new QSpinBox(&dialog);
|
||||||
|
count_spin->setRange(0, 1000);
|
||||||
|
count_spin->setValue(10);
|
||||||
|
count_spin->setSuffix(" 张");
|
||||||
|
form->addRow("拍照数量 (0=默认):", count_spin);
|
||||||
|
|
||||||
|
// 时间间隔
|
||||||
|
QDoubleSpinBox* interval_spin = new QDoubleSpinBox(&dialog);
|
||||||
|
interval_spin->setRange(0.0, 60.0);
|
||||||
|
interval_spin->setValue(0.5);
|
||||||
|
interval_spin->setSuffix(" 秒");
|
||||||
|
interval_spin->setDecimals(2);
|
||||||
|
form->addRow("时间间隔 (0=自动):", interval_spin);
|
||||||
|
|
||||||
|
// 传输模式
|
||||||
|
QComboBox* mode_combo = new QComboBox(&dialog);
|
||||||
|
mode_combo->addItem("原图", 0);
|
||||||
|
mode_combo->addItem("缩略图", 1);
|
||||||
|
form->addRow("传输模式:", mode_combo);
|
||||||
|
|
||||||
|
// ROS2节点IP地址
|
||||||
|
QLineEdit* ip_edit = new QLineEdit(&dialog);
|
||||||
|
ip_edit->setText(ros2_node_ip_);
|
||||||
|
form->addRow("ROS2节点IP地址:", ip_edit);
|
||||||
|
|
||||||
|
// HTTP端口
|
||||||
|
QSpinBox* port_spin = new QSpinBox(&dialog);
|
||||||
|
port_spin->setRange(1, 65535);
|
||||||
|
port_spin->setValue(ros2_http_port_);
|
||||||
|
form->addRow("HTTP端口:", port_spin);
|
||||||
|
|
||||||
|
QDialogButtonBox* buttonBox = new QDialogButtonBox(
|
||||||
|
QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
|
||||||
|
Qt::Horizontal, &dialog);
|
||||||
|
form->addRow(buttonBox);
|
||||||
|
|
||||||
|
connect(buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
|
||||||
|
connect(buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
|
||||||
|
|
||||||
|
if (dialog.exec() == QDialog::Accepted) {
|
||||||
|
double duration = duration_spin->value();
|
||||||
|
int count = count_spin->value();
|
||||||
|
double interval = interval_spin->value();
|
||||||
|
int mode = mode_combo->currentData().toInt();
|
||||||
|
|
||||||
|
// 保存IP和端口配置
|
||||||
|
ros2_node_ip_ = ip_edit->text();
|
||||||
|
ros2_http_port_ = port_spin->value();
|
||||||
|
|
||||||
|
// 通过HTTP调用
|
||||||
|
triggerCaptureViaHttp(duration, count, interval, mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::triggerCaptureViaHttp(double duration, int count, double interval, int mode) {
|
||||||
|
// 构建JSON请求
|
||||||
|
QJsonObject json;
|
||||||
|
json["duration"] = duration;
|
||||||
|
json["count"] = count;
|
||||||
|
json["interval"] = interval;
|
||||||
|
json["transmission_mode"] = mode;
|
||||||
|
|
||||||
|
QJsonDocument doc(json);
|
||||||
|
QByteArray json_data = doc.toJson();
|
||||||
|
|
||||||
|
// 构建URL
|
||||||
|
QString url_str = QString("http://%1:%2/api/v1/trigger_capture")
|
||||||
|
.arg(ros2_node_ip_)
|
||||||
|
.arg(ros2_http_port_);
|
||||||
|
QUrl url(url_str);
|
||||||
|
|
||||||
|
// 创建请求
|
||||||
|
QNetworkRequest request(url);
|
||||||
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
|
request.setRawHeader("User-Agent", "SkyLink-Qt-Station/1.0");
|
||||||
|
|
||||||
|
// 发送POST请求
|
||||||
|
QNetworkReply* reply = network_manager_->post(request, json_data);
|
||||||
|
|
||||||
|
// 设置超时(5秒)
|
||||||
|
QTimer::singleShot(5000, reply, &QNetworkReply::abort);
|
||||||
|
|
||||||
|
statusBar()->showMessage(QString("正在发送拍照请求到 %1:%2...").arg(ros2_node_ip_).arg(ros2_http_port_), 2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onHttpReply(QNetworkReply* reply) {
|
||||||
|
if (!reply) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查错误
|
||||||
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
|
QString error_msg;
|
||||||
|
if (reply->error() == QNetworkReply::TimeoutError) {
|
||||||
|
error_msg = "请求超时,请检查网络连接和ROS2节点IP地址";
|
||||||
|
} else if (reply->error() == QNetworkReply::ConnectionRefusedError) {
|
||||||
|
error_msg = QString("连接被拒绝,请确认ROS2节点HTTP服务器正在运行 (http://%1:%2)")
|
||||||
|
.arg(ros2_node_ip_).arg(ros2_http_port_);
|
||||||
|
} else {
|
||||||
|
error_msg = QString("网络错误: %1").arg(reply->errorString());
|
||||||
|
}
|
||||||
|
|
||||||
|
QMessageBox::warning(this, "HTTP请求失败", error_msg);
|
||||||
|
statusBar()->showMessage("HTTP请求失败", 3000);
|
||||||
|
reply->deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取响应
|
||||||
|
QByteArray response_data = reply->readAll();
|
||||||
|
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||||
|
|
||||||
|
// 解析JSON响应
|
||||||
|
QJsonParseError parse_error;
|
||||||
|
QJsonDocument doc = QJsonDocument::fromJson(response_data, &parse_error);
|
||||||
|
|
||||||
|
if (parse_error.error != QJsonParseError::NoError) {
|
||||||
|
QMessageBox::warning(this, "响应解析错误",
|
||||||
|
QString("无法解析服务器响应:\n%1").arg(QString::fromUtf8(response_data)));
|
||||||
|
statusBar()->showMessage("响应解析失败", 3000);
|
||||||
|
reply->deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonObject json = doc.object();
|
||||||
|
bool success = json["success"].toBool();
|
||||||
|
QString message = json["message"].toString();
|
||||||
|
int total_photos = json["total_photos"].toInt();
|
||||||
|
|
||||||
|
if (status_code == 200 && success) {
|
||||||
|
QMessageBox::information(this, "成功",
|
||||||
|
QString("拍照任务已启动!\n\n%1\n\n总照片数: %2")
|
||||||
|
.arg(message)
|
||||||
|
.arg(total_photos));
|
||||||
|
statusBar()->showMessage(QString("拍照任务已启动 - %1").arg(message), 3000);
|
||||||
|
} else {
|
||||||
|
QMessageBox::warning(this, "请求失败",
|
||||||
|
QString("服务器返回错误:\n%1\n\n状态码: %2")
|
||||||
|
.arg(message)
|
||||||
|
.arg(status_code));
|
||||||
|
statusBar()->showMessage(QString("请求失败: %1").arg(message), 3000);
|
||||||
|
}
|
||||||
|
|
||||||
|
reply->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::on_device_info_received(const DeviceInfo& info) {
|
void MainWindow::on_device_info_received(const DeviceInfo& info) {
|
||||||
QString text = QString("分辨率: %1 x %2\n帧率: %3\n格式: %4\n设备: %5 (%6)\n当前FPS: %7\n总帧: %8")
|
QString text = QString("分辨率: %1 x %2\n帧率: %3\n格式: %4\n设备: %5 (%6)\n当前FPS: %7\n总帧: %8")
|
||||||
.arg(info.width)
|
.arg(info.width)
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
#include <QUdpSocket>
|
#include <QUdpSocket>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkReply>
|
||||||
#include "DeviceInfo.h"
|
#include "DeviceInfo.h"
|
||||||
#include "DeviceInfoReceiver.h"
|
#include "DeviceInfoReceiver.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -47,7 +49,7 @@ private slots:
|
|||||||
/**
|
/**
|
||||||
* @brief 处理接收到的完整帧
|
* @brief 处理接收到的完整帧
|
||||||
*/
|
*/
|
||||||
void on_frame_received(const QImage& img, double lat, double lon, double alt);
|
void on_frame_received(const QImage& img, double lat, double lon, double alt, uint32_t photo_number);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 处理统计信息更新
|
* @brief 处理统计信息更新
|
||||||
@@ -68,6 +70,11 @@ private slots:
|
|||||||
* @brief 设置按钮点击
|
* @brief 设置按钮点击
|
||||||
*/
|
*/
|
||||||
void on_settings_clicked();
|
void on_settings_clicked();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 触发拍照按钮点击
|
||||||
|
*/
|
||||||
|
void on_trigger_capture_clicked();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 收到设备信息
|
* @brief 收到设备信息
|
||||||
@@ -87,6 +94,7 @@ private:
|
|||||||
QPushButton* save_frame_btn_; ///< 保存帧按钮
|
QPushButton* save_frame_btn_; ///< 保存帧按钮
|
||||||
QPushButton* record_btn_; ///< 录制按钮
|
QPushButton* record_btn_; ///< 录制按钮
|
||||||
QPushButton* settings_btn_; ///< 设置按钮
|
QPushButton* settings_btn_; ///< 设置按钮
|
||||||
|
QPushButton* trigger_capture_btn_; ///< 触发拍照按钮
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
// 业务逻辑对象
|
// 业务逻辑对象
|
||||||
@@ -95,6 +103,7 @@ private:
|
|||||||
std::shared_ptr<GroundReceiver> receiver_; ///< UDP 接收器
|
std::shared_ptr<GroundReceiver> receiver_; ///< UDP 接收器
|
||||||
std::shared_ptr<DeviceInfoReceiver> device_info_receiver_; ///< 设备信息接收器
|
std::shared_ptr<DeviceInfoReceiver> device_info_receiver_; ///< 设备信息接收器
|
||||||
std::shared_ptr<DataLogger> logger_; ///< 数据记录器
|
std::shared_ptr<DataLogger> logger_; ///< 数据记录器
|
||||||
|
QNetworkAccessManager* network_manager_; ///< HTTP 网络管理器
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
// 状态变量
|
// 状态变量
|
||||||
@@ -105,6 +114,10 @@ private:
|
|||||||
double current_lon_ = 0.0; ///< 当前经度
|
double current_lon_ = 0.0; ///< 当前经度
|
||||||
double current_alt_ = 0.0; ///< 当前海拔
|
double current_alt_ = 0.0; ///< 当前海拔
|
||||||
bool is_recording_ = false; ///< 是否正在录制
|
bool is_recording_ = false; ///< 是否正在录制
|
||||||
|
uint32_t total_photos_received_ = 0; ///< 接收到的总照片数
|
||||||
|
uint32_t current_photo_number_ = 0; ///< 当前照片编号
|
||||||
|
QString ros2_node_ip_ = "localhost"; ///< ROS2 节点 IP 地址
|
||||||
|
int ros2_http_port_ = 8080; ///< ROS2 HTTP API 端口
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
// 初始化函数
|
// 初始化函数
|
||||||
@@ -124,4 +137,19 @@ private:
|
|||||||
* @brief 创建菜单栏
|
* @brief 创建菜单栏
|
||||||
*/
|
*/
|
||||||
void create_menus();
|
void create_menus();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 通过 HTTP 触发拍照
|
||||||
|
* @param duration 总时间(秒)
|
||||||
|
* @param count 拍照数量
|
||||||
|
* @param interval 时间间隔(秒)
|
||||||
|
* @param mode 传输模式(0=原图,1=缩略图)
|
||||||
|
*/
|
||||||
|
void triggerCaptureViaHttp(double duration, int count, double interval, int mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief HTTP 请求响应处理
|
||||||
|
* @param reply 网络响应
|
||||||
|
*/
|
||||||
|
void onHttpReply(QNetworkReply* reply);
|
||||||
};
|
};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user