QT 界面和控件按某种关系比例增长
来源:互联网 发布:绿盾防泄密软件 编辑:程序博客网 时间:2024/05/01 07:08
今天某个客户超级坑爹居然要求里面显示图片的graphicView成4:3增长,但是现在屏幕都是按照宽屏的,即使比例按照16:9,也不科学。
怎么说都不听,坑爹,好吧,拉长之后会变成这样的
然后主界面要根据graphicView增长而改变,反正,布局不能有空隙。
实在无奈就实现出来了。效果图:
当然还是这样好看啦
原理:
根据变化,由高度,因为都是宽屏,高度是短板,算出长度多少,先变化再缩回来。里面有个地方有陷阱的是,
变化窗口触发QWidget::resizeEvent(QResizeEvent * event),千万不可以在里面修改大小resize ( w, h );
因为会造成嵌套死循环。我试过,用emit发送信号也不行,所以就用了个笨方法,用timer延时,再触发修改大小函数。
下面是代码,标记部分是新加入,不含头文件。
class QResizeTest_Again : public QMainWindow{Q_OBJECTpublic:QResizeTest_Again(QWidget *parent = 0, Qt::WFlags flags = 0);~QResizeTest_Again();void resizeEvent ( QResizeEvent * event ) ;///////////////////////public slots://void my4_3resizeSlots(int w,int h);void my4_3resizeSlots();//////////////////////////////////////////signals:void my4_3resizeSignals(int w,int h);private:Ui::QResizeTest_AgainClass ui;QTimer timer;/////////////////////////////////////////////////int winShouldBeWidth;////////////////////////////////////////int winShouldBeHeight;////////////////////////////////////////};
QResizeTest_Again::QResizeTest_Again(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags){ui.setupUi(this);connect(&timer,SIGNAL(timeout()),this,SLOT(my4_3resizeSlots()));/////////////////////////}QResizeTest_Again::~QResizeTest_Again(){}//////////////////////////////////////////////////////////void QResizeTest_Again::resizeEvent ( QResizeEvent * event ) {//如果窗口最大化,不修改比例,防御性设计if (isMaximized()){return;}QSize oldSize = event->oldSize();QSize newSize = event->size();//计算graphicsView的4:3长,然后加上固定值返回,重设窗口double rate = 4/3;int fixHeight = 144;int fixWidth = 350;int graphicHieght,graphicWidth;graphicHieght = newSize.height() - fixHeight;graphicWidth = (int)((double)graphicHieght * rate);int shouldBeWidth = graphicWidth + fixWidth;qDebug()<<shouldBeWidth << newSize.height();//好了就不用再发送了,避免嵌套if (shouldBeWidth != newSize.width()){//ui.graphicsView->resize(graphicWidth,graphicHieght);winShouldBeHeight = newSize.height();winShouldBeWidth = shouldBeWidth;timer.start(1);}}///////////////////////////////////////////////////////////void QResizeTest_Again::my4_3resizeSlots(){//qDebug()<<"321";resize(winShouldBeWidth,winShouldBeHeight);timer.stop();}
- QT 界面和控件按某种关系比例增长
- QT 中怎样使得控件与 界面等比例变化
- QT 中怎样使得控件与 界面等比例变化
- Qt界面布局和常用控件
- 实验2 比例和关系可视化
- Qt实现界面随原型图比例缩放 空隙补黑边
- Qt 界面使用自定义控件 "提升为"
- Qt 界面使用自定义控件 "提升为"
- QT动态生成界面控件工厂类
- Qt:QML控件类关系图
- Qt保持Widget比例
- 获取某种颜色在图片中所占的比例
- MFC窗口和控件大小等比例变化
- MFC窗口和控件大小等比例变化
- MFC窗口和控件大小等比例变化
- MFC窗口和控件大小等比例缩放
- Qt和Qt creator、Kdevelop的关系
- Qt和Qt creator、Kdevelop的关系
- 借助网盘搭建SVN服务器
- 如何获取下拉框的值
- Android发送GET和POST请求DEMO
- 字符串系列——10010 Where's Waldorf?
- 6、王爽《汇编语言》笔记_实验8
- QT 界面和控件按某种关系比例增长
- poj 2031
- Oracle备份与恢复案例
- linux 批量 含空格文件名 重命名
- js获取时分秒
- Bayer图像处理(转)
- eclipse启动时无法创建java虚拟机
- 拥有线程安全和阻塞功能的vector类SemVector(LINUX平台)
- Log4j 日志级别