qt 对话框扩展 缩放
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt 对话框扩展 缩放相关的知识,希望对你有一定的参考价值。
Qt对话框扩展的,即点击单选按钮扩展详细内容区域的部分,然后可以拉伸,如果点击另一个按钮则隐藏详细内容部分,可是这个时候,窗口大小还是这么大的,想让他恢复到没有显示详细内容时候的窗口大小1
有没有大小帮帮忙,不设置layout->setSizeConstraint(QLayout::SetFixedSize);
目前大家用的都是layout->setSizeConstraint(QLayout::SetFixedSize); ,这样限制了对话框的大小,虽然扩展没有什么不合适,但是不能满足拉伸的需求
其实只要在布局时候,
设置上对应控件的最小size就可以,setminsize
你在设置上缩放策略,
就可以按照比例拉伸缩放。
我后来想想可能是因为布局后没有设置size,布局默认给设置了一个合适的显示的size,
那么你缩小时候,最小也不能小于初始化了,所以给你的感觉是没有缩小本回答被提问者采纳 参考技术B 自己计算呀
点击隐藏时
(1)先记住当前大小:SizeOld,
(2)隐藏
(3)然后Resize当前对话框为(SizeOld - 隐藏布局的宽或者高)
显示时候在Resize的时候加上去追问
还未曾想你道谢,谢谢你!
同为女同事开发哦,,,,
Qt 5.10 QGraphicsView 无法将 QGraphicsScene 缩放到全屏
【中文标题】Qt 5.10 QGraphicsView 无法将 QGraphicsScene 缩放到全屏【英文标题】:Qt 5.10 QGraphicsView cannot scale QGraphicsScene to fullscreen 【发布时间】:2018-10-03 00:30:27 【问题描述】:我正在 Ubuntu 16.04 上尝试使用 Qt 5.10 QMultimedia 播放 Gstreamer 录制的视频。该应用程序的主要内容如下所示。调用 showMaximized() 后,我似乎无法将视频缩放到完整的 Qt 屏幕。
屏幕中间显示的小视频如下图(我希望它缩放到整个窗口):
代码:
#include "mainwindow.h"
#include <QVideoWidget>
#include <QGraphicsView>
#include <QtMultimedia>
#include <QGraphicsVideoItem>
#include <unistd.h>
#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
QGraphicsView * graphicsView = new QGraphicsView;
QGraphicsScene * scene = new QGraphicsScene;
QGraphicsVideoItem *item = new QGraphicsVideoItem;
//graphicsView->setGeometry(0,0,640,480); // One size shows up... attempt #1
graphicsView->setGeometry(0,0,640*2,480*2); // This does nothing to video size?
graphicsView->setScene(scene);
graphicsView->scene()->addItem(item);
graphicsView->setRenderHints( QPainter::Antialiasing );
scene->setSceneRect(scene->itemsBoundingRect());
graphicsView->setSceneRect(scene->sceneRect());
// Media Player
player = new QMediaPlayer;
player->setVideoOutput(item);
player->setMedia(QUrl::fromLocalFile("/tmp/test.mkv"));
player->play();
qDebug() << "Started Playing";
// Show full screen
//graphicsView->showFullScreen();
graphicsView->showMaximized();
【问题讨论】:
【参考方案1】:在QGraphicsView
中处理了2种坐标,第一种是像素的物理坐标,另一种是与items一起处理的,即QGraphicsView
作为widget的坐标系与场景的坐标系不同。为了方便大家理解,我举个例子:假设你有一个摄像头,你正在录制一个电影,现实世界有一个坐标系,但是摄像头有另一个坐标系不匹配但是有一定的坐标系将它们联系起来的转换,例如一个演员接近相机,他的身体高度没有改变,但是如果它改变了从相机看的高度。在前面的例子中,相机是QGraphicView
,世界是QGraphicScene
,演员和元素是物品。所以即使我买了一台分辨率更高的相机,演员也不会长大,这就是你所做的。可以做的一件事是调整相机的焦点,让只有演员才能看到,这与使用fitInView()
相同,但是当场景大小发生变化时,你应该这样做,以便它自行调整,所以我们必须使用QGraphicScene
的sceneRectChanged
信号:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
QGraphicsView * graphicsView = new QGraphicsView;
setCentralWidget(graphicsView);
QGraphicsScene * scene = new QGraphicsScene(graphicsView);
QGraphicsVideoItem *item = new QGraphicsVideoItem;
// Media Player
player = new QMediaPlayer;
player->setVideoOutput(item);
player->setMedia(QUrl::fromLocalFile("/tmp/test.mp4"));
player->play();
graphicsView->setScene(scene);
graphicsView->scene()->addItem(item);
graphicsView->setRenderHints( QPainter::Antialiasing );
connect(scene, &QGraphicsScene::sceneRectChanged,
[graphicsView, item](const QRectF &)
graphicsView->fitInView(item);;
);
showMaximized();
【讨论】:
以上是关于qt 对话框扩展 缩放的主要内容,如果未能解决你的问题,请参考以下文章