widget.cpp:222:26: warning: 'grabWidget' is deprecated: Use QWidget::grab() instead qpixmap.h:121:5: note: 'grabWidget' has been explicitly marked deprecated here qglobal.h:294:33: note: expanded from macro 'QT_DEPRECATED_X' qcompilerdetection.h:676:55: note: expanded from macro 'Q_DECL_DEPRECATED_X'
时间: 2024-04-20 12:27:40 浏览: 445
抱歉,`QPixmap::grabWidget` 函数已经被标记为过时。相反,你可以使用 `QWidget::grab` 函数来进行截图。下面是更新后的代码示例:
```cpp
#include <QtWidgets>
QPixmap grabWidgetWithStylesheet(QWidget* widget)
{
return widget->grab();
}
```
你可以使用这个函数来截取带有样式表的 `QWidget` 对象。例如,如果你想截取一个按钮并应用样式表,可以这样做:
```cpp
QPushButton button;
button.setStyleSheet("background-color: red; color: white;");
button.setText("Test Button");
QPixmap pixmap = grabWidgetWithStylesheet(&button);
pixmap.save("screenshot.png");
```
这将截取带有样式表的按钮并保存为一个名为 "screenshot.png" 的图像文件。
请注意,由于 `QPixmap::grabWidget` 函数已被标记为过时,因此会显示警告。你可以忽略这个警告,或者使用更新的 `QWidget::grab` 函数来避免警告。再次对之前的错误表示抱歉,并感谢你的理解。
相关问题
writ = new cv::VideoWriter("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25, cv::Size(cam->get(CV_CAP_PROP_FRAME_WIDTH), cam->get(CV_CAP_PROP_FRAME_HEIGHT)), true);将获取的视频输出到void Widget::on_choose_btn_clicked() { //获取视频的完整路径 // QString str="D:\Qt\Qt5.12.12\QT\QT_project\output.avi"; QString path = "D:\Qt\Qt5.12.12\QT\QT_project\output.avi"; //加载资源文件 this->player->setMedia(QMediaContent(QUrl(path))); //设置画面的输出 player->setVideoOutput(video_widget); // 将视频画面输出到pictrue_lab QPixmap pixmap = QPixmap::grabWidget(video_widget); ui->pictrue_lab->setPixmap(pixmap); }
这段代码中,首先创建了一个名为writ的cv::VideoWriter对象,用于将视频写入到output.avi文件中。fourcc('M', 'J', 'P', 'G')表示使用MJPG编码格式,25表示帧率为25fps,cv::Size(cam->get(CV_CAP_PROP_FRAME_WIDTH), cam->get(CV_CAP_PROP_FRAME_HEIGHT))表示视频帧大小与摄像头的帧大小相同,true表示输出视频是彩色的。
在on_choose_btn_clicked()函数中,首先获取视频的完整路径,然后加载资源文件并将其设置为QMediaContent。接着将视频画面输出到video_widget上,并将该画面转换为QPixmap对象,最后将该QPixmap对象显示在pictrue_lab上。
QLabel* circle = new QLabel(stackWidget->currentWidget()); QLabel* line = new QLabel(this); line->setObjectName(QString("AntimationLine")); line->resize(0, 2); line->show(); #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) circle->setPixmap(QPixmap::grabWidget(stackWidget->widget(preindex), stackWidget->widget(preindex)->geometry())); #else circle->setPixmap(stackWidget->widget(preindex)->grab()); #endif
这段代码是使用 Qt 框架中的 QLabel 和 QPixmap 类来实现截屏并显示在界面上。
首先,创建一个 QLabel 对象 `circle`,它的父对象是 `stackWidget->currentWidget()`,即当前显示的窗口。接下来,创建一个 QLabel 对象 `line`,并设置它的对象名为 "AntimationLine",然后设置其大小为 (0, 2),最后显示出来。
在截屏部分,代码使用了条件编译来兼容不同版本的 Qt。如果 Qt 版本小于 5.0.0,则调用 `QPixmap::grabWidget` 方法来截取指定窗口 `stackWidget->widget(preindex)` 的图像,并将其设置为 `circle` 的图片。如果 Qt 版本大于等于 5.0.0,则使用 `grab()` 方法直接截取 `stackWidget->widget(preindex)` 的图像,并设置为 `circle` 的图片。
这段代码的作用是截取指定窗口的图像,并将截取的图像显示在界面上的 QLabel 控件中。
阅读全文