2011-12-21 23 views
16

I'km क्यूटी में काम कर रहे, मैं मदद की जरूरत है स्क्रीन (मॉनीटर) के शारीरिक आकार प्राप्त करने के लिए,क्यूटी में शारीरिक स्क्रीन आकार पाने के

क्यूटी में एक मिल सकता है एक QDesktopWidgetQApplication से, मेरा मतलब है:

QDesktopWidget *mydesk = QApplication::desktop(); 

QDesktopwidget पिक्सल में संकल्प पाने के लिए कुछ तरीकों है और कुछ milimethers में आकार पाने के लिए:

mydesk-> widthMM(); mydesk->heightMM(); 

हालांकि, इस correspo नहीं है भौतिक आकार के लिए, जब मैं एक शासक के साथ अपनी स्क्रीन को मापता हूं, तो इसमें काफी अंतर होता है।

इसके अलावा एक डीपीआई माप मिलता है और स्क्रीन के आकार की गणना कर सकते हैं:

mydesk->physicalDpiX(); mydesk->physicalDpiY(); 

double Winches = (double)mydesk.width()/(double)mydesk.physicalDpiX(); 
double Hinches = (double)mydesk.Height()/(double)mydesk.physicalDpiY(); 

जहां mydesk.width() और mydesk.height() पिक्सेल में आकार (संकल्प)

दे हालांकि माप भी गलत है और बहुत mydesk.widthMM() और mydesk.heightMM()

के साथ-साथ मैंने mydesk.logicalDpiX() का परीक्षण किया है और इसके समान परिणाम हैं।

+0

इन तरीकों में मेरे लिए काम नहीं है वास्तविक माप प्राप्त करने के लिए एक ही रास्ता एक संदर्भ के लिए है स्क्रीन पर असली दुनिया वस्तु (सोचने के लिए समय, शासकों, इत्यादि) –

+0

हाय सोसुकोडो, आप "स्क्रीन पर वास्तविक दुनिया की वस्तु का संदर्भ" के बारे में क्या कहते हैं? धन्यवाद – Herman

+0

मैं नमूना आवेदन लिख रहा हूं लेकिन मैं ' एम इसके साथ नहीं किया जाता है। वैसे भी, यदि आप जानते हैं कि एक डाइम का आकार 17.9 मिमी है और आप उपयोगकर्ता को एक डाइम की एक तस्वीर दिखाते हैं, तो जब तक तस्वीर भौतिक डाइम से मेल नहीं खाती तब तक उन्हें ज़ूम इन/आउट करने दें, यह मूल रूप से कहता है: मेरी स्क्रीन पर 17.9 मिमी = एन पिक्सल .. इससे आप यह समझने के लिए सरल गणित करते हैं कि आपके स्क्रीन माप में कितने डाइम्स जाते हैं। –

उत्तर

8

यहां मेरा (त्वरित और गंदा) उदाहरण है। ऐसा लगता है कि मेरे लिए काम करता है और मुझे उम्मीद है कि यह आपके लिए काम करेगा। मुझे लगता है कि आप अपने आप पर main.cpp का ख्याल रख सकते हैं। मैं एक मैकबुक एयर 11.6 "तारीख को किया और प्रतिस्थापित संयुक्त राज्य अमेरिका आइकन के लिए एक पैसा भी की एक तस्वीर ओएस एक्स के साथ शामिल:।

#ifndef WINDOW_H 
#define WINDOW_H 

#include <QtGui> 

class Window : public QWidget 
{ 
    Q_OBJECT 

public: 
    QWidget *canvas; 
    QSlider *slider; 
    QPixmap pixmap; 

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

public: 
    Window(); 
    void paintEvent(QPaintEvent *); 

public slots: 
    void setZoom(int); 
}; 

Window::Window() 
{ 
    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); 

    this->setLayout(layout); 

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

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

void Window::paintEvent(QPaintEvent *event) 
{ 
    QPainter paint; 
    paint.begin(this); 
    paint.scale(zoom, zoom); 
    paint.drawPixmap(0,0, pixmap); 
    paint.end(); 
} 

void Window::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; 

    this->repaint(); 
} 

#include "moc_window.cpp" 

#endif // WINDOW_H 
+1

यह वास्तव में अच्छा है, मैंने इसे अपनी नेटबुक में और अपना खुद का सिक्का इस्तेमाल किया है, और भौतिक आकार मिला है, मैं वास्तव में आपकी मदद की सराहना करता हूं। लेकिन मुझे अपने आवेदन के लिए स्वचालित रूप से आकार प्राप्त करने का एक तरीका चाहिए। – Herman

+1

ईमानदारी से, मुझे नहीं लगता कि यह संभव है। यदि ऐसा है, तो मुझे यह जानना अच्छा लगेगा कि यह कौन सा प्लेटफॉर्म संभव है! QPaintDevice :: widthMM के लिए प्रलेखन पर ध्यान दें: "प्लेटफ़ॉर्म सीमाओं के कारण स्क्रीन पर विजेट के वास्तविक भौतिक आकार को निर्धारित करने के लिए इस फ़ंक्शन का उपयोग करना संभव नहीं हो सकता है।" –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^