Qt之QDesktopWidget

1、新建QTgui,基类选择QWidget,取消创建界面,添加资源

2、widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSlider>
#include <QPixmap>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    QWidget *canvas;
    QSlider *slider;
    QPixmap pixmap;

    void paintEvent(QPaintEvent *);

public slots:
    void setZoom(int);

private:
    qreal zoom;
    qreal pixels;
    qreal px_width;
    qreal px_height;
    qreal mm_width;
    qreal mm_height;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QHBoxLayout>
#include <QDesktopWidget>
#include <QPainter>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->resize(621, 375);

    QHBoxLayout *layout = new QHBoxLayout;

    canvas = new QWidget;
    slider = new QSlider;
    slider->setMinimum(0);
    slider->setMaximum(100);
    slider->setValue(50);

    layout->addWidget(canvas);
    layout->addWidget(slider);

    setLayout(layout);

    if(!pixmap.load(":/resources/fish.png"))
    {
        qDebug() << "Fatal error: Unable to load image";
        exit(-1);
    }

    connect(slider, SIGNAL(valueChanged(int)),
            SLOT(setZoom(int)));
}

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)

    QPainter painter(this);
    painter.scale(zoom, zoom);
    painter.drawPixmap(0, 0, pixmap);
    painter.end();

}

void Widget::setZoom(int new_zoom)
{
     zoom = (qreal)(50+new_zoom) / 50;
     pixels = pixmap.width() * zoom;

//     QDesktopWidget desk;
//     px_width = desk.width() / pixels;
//     px_height = desk.height() / pixels;
//     mm_width = px_width * 17.9;
//     mm_height = px_height * 17.9;

     qDebug() << "Zoom: " << zoom;
//     qDebug() << "desk.widthMM:" << desk.widthMM();
//     qDebug() << "px_width: " << px_width;
//     qDebug() << "px_height: " << px_height;
//     qDebug() << "mm_width: " << mm_width;
//     qDebug() << "mm_height: " << mm_height;

     repaint();
    repaint();
}

Widget::~Widget()
{

}

---

转载于:https://my.oschina.net/u/3919756/blog/2054378

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值