Russian Qt Forum

Qt => Qt Quick => Тема начата: marbius от Октябрь 13, 2010, 11:16



Название: [РЕШЕНО] Как получить размер экрана в QML?
Отправлено: marbius от Октябрь 13, 2010, 11:16
Доброго времени суток.

Задумал "поизучать" QML и сразу столкнулся с вопросом, как можно получить в QML размеры экрана?

По задумке хочу, чтобы на desktop-приложении (QML) интерфейс занимал, ну скажем, 80% по ширине экрана и столько же по высоте.

Заранее благодарен.



Название: Re: Как получить размер экрана в QML?
Отправлено: stump от Октябрь 13, 2010, 20:36
Можно получить, используя QML Extension.
Создаем свой класс - наследник от QObject.
В нем определяем методы, которые будут возвращать нам габариты экрана и применяем к ним макрос Q_INVOKABLE, чтобы их можно было юзать из QML. Другой вариант - определить их слотами. Впринципе все.

Phone.h

Код:

#include "QObject"

class Phone : public QObject
{
    Q_OBJECT

public:
    Phone(QObject *parent = 0);
    ~Phone();

    Q_INVOKABLE int screenWidth();
    Q_INVOKABLE int screenHeight();

};


Phone.cpp
Код:

#include "Phone.h"
#include <QtGui/QApplication>
#include "QDesktopWidget"

Phone::Phone(QObject *parent) : QObject(parent)
{
   
}

int Phone::screenWidth()
{
    return QApplication::desktop()->width();
}

int Phone::screenHeight()
{
    return QApplication::desktop()->height();
}

Phone::~Phone()
{

}

main.cpp
Код:
#include <QtGui/QApplication>
#include "Phone.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qmlRegisterType<Phone>("Phone",1,0,"Phone");     //регистрация созданного нами класса

    QDeclarativeView *view = new QDeclarativeView();

    view->setSource(QUrl::fromLocalFile("D:\\Qt\\2010.05\\qt\\QML\\extension.qml"));
    view->show();

    return a.exec();
}

extension.qml
Код:
import Qt 4.7
import Phone 1.0

Item {
    width: obj.screenWidth(); height: obj.screenHeight()

    Phone {
        id: obj
    }
}

может быть, можно и проще... ;) это так... навскидку  ;D


Название: Re: Как получить размер экрана в QML?
Отправлено: marbius от Октябрь 14, 2010, 04:40
Можно получить, используя QML Extension.
...

Так и сделал. Спасибо.