Qt 具有灵活而强大的布局机制来处理桌面应用程序窗口的视图.
但它非常灵活,几乎无法理解,当出现问题并需要微调时.如此强大,它可以击败任何人,试图压倒Qt对形式应该如何看待的看法.
那么,任何人都可以解释,或提供文章或Qt定位机制的来源吗?
我试图强迫QLabel,QPushButton并且QTableView,在他们的名字尾随下划线标记,是高出两倍QTextBrowser有verticalStretch = 1以下.如何正确处理小部件的高度?
我在OpenCV的帮助下从ip摄像头捕获多个流.当我尝试从OpenCV窗口(cv::namedWindow(...))显示这些流时,它没有任何问题(我到目前为止已尝试过多达4个流).
当我尝试在Qt小部件中显示这些流时出现问题.由于捕获是在另一个线程中完成的,我必须使用信号槽机制来更新QWidget(在主线程中).
基本上,我从捕获线程发出新捕获的帧,并且GUI线程中的一个插槽捕获它.当我打开4个流时,我无法像以前那样流畅地显示视频.
这是发射器:
void capture::start_process() {
m_enable = true;
cv::Mat frame;
while(m_enable) {
if (!m_video_handle->read(frame)) {
break;
}
cv::cvtColor(frame, frame,CV_BGR2RGB);
qDebug() << "FRAME : " << frame.data;
emit image_ready(QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888));
cv::waitKey(30);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的插槽:
void widget::set_image(QImage image) {
img = image;
qDebug() << "PARAMETER IMAGE: " << image.scanLine(0);
qDebug() << "MEMBER IMAGE: " << img.scanLine(0);
}
Run Code Online (Sandbox Code Playgroud)
问题似乎是连续复制QImages的开销.尽管QImage使用隐式共享,但当我通过qDebug()消息比较图像的数据指针时,我看到了不同的地址.
1-有没有办法将OpenCV窗口直接嵌入到QWidget中?
2-处理显示多个视频的最有效方法是什么?例如,视频管理系统如何同时显示多达32台摄像机?
3-必须走的路是什么?