Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ embedded-widgets[РЕШЕНО]

Автор: igor_bogomolov 1.4.2009, 16:05

Скачал себе Embedded Widget (http://www.qtsoftware.com/developer/files/embedded-widget-demos/qt-embedded-widgets-source-and-documentation). Уж больно понравились все эти кнопочки. Решил использовать у себя в приложении. Благо компилировать можно везде.
Но вместо виджетов отображается пустое пространство. Что не так делаю никак не пойму. В примере который идет с библиотекой все отображается нормально.

Вот простой компилируемый пример.

button.cpp
#include <QtGui>
#include <QtSvgButton>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QtSvgButton * button = new QtSvgButton();
    button->setSkin("Beryl");
    button->resize(100, 50);
    button->show();
    QApplication::arguments().contains("-no-embedded");
    return app.exec();
}


Button.pro
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
include(f:/QT/Examples/embedded-widgets-1.1.0/src/svgbutton/svgbutton.pri)

SOURCES += button.cpp

CONFIG += release
CONFIG -= debug

QT *= svg


Подскажите, что нужно сделать, чтобы все отображалось нормально.

Автор: Litkevich Yuriy 1.4.2009, 17:11

Мне непонятны две вещи:

Цитата(igor_bogomolov @ 1.4.2009, 20:05) *
QApplication::arguments().contains("-no-embedded");
для чего?
Цитата(igor_bogomolov @ 1.4.2009, 20:05) *
QT *= svg
что за звёздочка?

Автор: igor_bogomolov 1.4.2009, 17:41

QApplication::arguments().contains("-no-embedded") совершенно не нужен, но и не мешет. Это от экспериментов осталось. Нашел такую строку в примере, вот и добавил не подумав. На самом деле в примере таким образом проверяется входной параметр, и если это -embedded, то устанавливается setWindowState(Qt::WindowFullScreen);, иначе не устанавливается :rolleyes:

Цитата(Litkevich Yuriy @ 1.4.2009, 18:11) *
что за звёздочка?

Понятия не имею. Скопировал из про файла прилагаеммого к библиотеки примера. Эту строку я пробовал и убирать вообще, на компиляции никак не отразилось. Т.е. компилируется без проблем, только не рисует ничего. :(

Автор: Litkevich Yuriy 1.4.2009, 18:20

а уменя вот даже каталог (catalog) не собирается, только patientcare собрался

Автор: igor_bogomolov 1.4.2009, 18:26

Litkevich Yuriy У меня тоже самое. Я пока не стал на этом зацикливаться. Одного работающего примера вполне достаточно.
Для работы с библиотекой все равно ничего собирать не надо, как я понял из описания, просто подключаем ее и все.
Не пробовали еще собрать свой пример, какие результаты?

patientcare - симпатичная штучка, неправда ли :D

Автор: Litkevich Yuriy 1.4.2009, 18:47

Цитата(igor_bogomolov @ 1.4.2009, 22:26) *
Для работы с библиотекой все равно ничего собирать не надо, как я понял из описания, просто подключаем ее и все.
Не пробовали еще собрать свой пример, какие результаты?
в этом-то вся и проблема, что не собирается хотя всеголишь исходники. И ошибка странная:
Цитата
QtGui: No such file or directory
на стандартный инклюд, а в patientcare файл проекта принципиальных отличий не имеет. Да и в make-фале есть путь соответствующий.

Автор: igor_bogomolov 1.4.2009, 21:39

Разобрался. Как всегда, все проблемы из-за торопливости, и как следствие невнимательности.
Ниже простейший рабочий пример (пути естественно меняем на свои)

#include <QtGui>
#include <QtSvgButton>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QtSvgButton * button = new QtSvgButton();
    button->setSkin("Beryl");
    button->resize(200, 200);
    button->show();
    return app.exec();
}

TEMPLATE = app
INCLUDEPATH += .
include(D:/Project/embedded-widgets-1.1.0/src/svgbutton/svgbutton.pri)

CONFIG += release
CONFIG -= debug

RESOURCES += D:/Project/embedded-widgets-1.1.0/src/skins/beryl_svgbutton.qrc

SOURCES += button.cpp


QT *= svg

Всем спасибо. :rolleyes:

 

Автор: igor_bogomolov 2.4.2009, 2:22

После пяти часов плясок с бубном, собрал пример catalog.
Всего то надо было заменить в файле mainwindow.cpp следущие строки

mainwindow.cpp
#include <Qt5WayButton>
#include <QtBasicDialGauge>
#include <QtBasicGraph>
#include <QtMultiSlider>
#include <QtScrollDial>
#include <QtScrollWheel>
#include <QtSvgButton>
#include <QtSvgDialGauge>
#include <QtSvgSlideSwitch>
#include <QtSvgToggleSwitch>
на
newmainwindow.cpp
#include "qt5waybutton.h"
#include "qtbasicdialgauge.h"
#include "qtbasicgraph.h"
#include "qtmultislider.h"
#include "qtscrolldial.h"
#include "qtscrollwheel.h"
#include "qtsvgbutton.h"
#include "qtsvgdialgauge.h"
#include "qtsvgslideswitch.h"
#include "qtsvgtoggleswitch.h"


Кто бы мог подумать :wacko:

[offtop]
Начало четвёртого. Скоро на работу. Чуствую утро будет "веселым". :morning1:
[/offtop]

 

Автор: Litkevich Yuriy 2.4.2009, 6:58

Цитата(igor_bogomolov @ 2.4.2009, 6:22) *
Кто бы мог подумать
что-то я не понял, причины. Почему по второму варианту компилится.
В pro-файлах везде есть:
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD


помоему это у make крыша едит. т.к. всюду вывод вижу такой:
Цитата
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE ...
а когда спотыкается, то строчка идет без ключа :
Цитата
g++ -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE ...


а в make-файле везде опции одинаковые

Автор: igor_bogomolov 2.4.2009, 9:25

Цитата(Litkevich Yuriy @ 2.4.2009, 7:58) *
помоему это у make крыша едит

У меня вчера точно чуть крыша не съехала. Таких плясок у меня еще небыло. Причем если в проекте изначально закоментировать все что связанно с QtBasicGraph и QtMultiSlider , проект собирётся. А вот дальше начинается необъяснимое (для меня). Подключаю обратно QtMultiSlider. Все отлично. Подключаю QtBasicGraph, начинаются проблемы с компиляцией. Коментирую обратно QtBasicGraph, проблема не исчезает, продолжает выдавать дурацкие ошибки "QtGui: No such file or directory", только уже относительно QtMultiSlider. Отключаю и его. Все собирается. Подключаю обратно, тоже собирается. В общем намучился я. Но если исправить инклуды, как я написал выше, никаких проблем не возникает. Причины такого поведения мне непонтны. Если кто разберется, сообщите пожалуйста.
А так впринципе вопрос решен.

Автор: Litkevich Yuriy 2.4.2009, 11:05

Предлагаю, всё таки отсавить вопрос открытым, можно конечно отдельную тему создать, но я название короткое и понятное пока не придумал.
Один раз проблема возникла, значит и еще раз всплывёт, да ещё и в самый неподходящий момент.

Автор: igor_bogomolov 2.4.2009, 11:36

Цитата(Litkevich Yuriy @ 2.4.2009, 12:05) *
Предлагаю, всё таки отсавить вопрос открытым

Согласен я уже сталкнулся с проблемами. По непонятным причинам проекты с использованием данной библиотеки вдруг перестают компилироваться. Пока не сделаешь очистку, занова не собирается. Я сейчас все ныжные исходники просто перенес в свой проект. Проблемы исчезли.
Хотя, я скорее всего откажусь от использования этих виджетов, всетаки они не для комп приложений. На кнопку нельзя даже текст разместить, и сами они либо кругляе, либо квадратные. Прямоугольную кнопку без модификаций исходников не сделать. Я попробовал, получается уже некрасиво.
Мне на самам деле просто отень понравился стиль виджетов. Сейчас пробую переделать под себя. В крайнем случае можно стили выдернуть, но я пока не знаком с форматом svg/. В общем продолжаю пока раскуривать тему.
Присоединяйтесь :rolleyes:

Автор: Litkevich Yuriy 2.4.2009, 11:53

Цитата(igor_bogomolov @ 2.4.2009, 15:36) *
Мне на самам деле просто отень понравился стиль виджетов.
мне тоже, однако это работа дизайнера, я всяко пробовал и пришел к выводу, что руки у меня явно для других целей. Ни в какую не получается, что-то нарисовать красиво.

Автор: LE0N 2.4.2009, 16:34

Внутри этого СВГ имеется такой коммент:

Цитата
<!-- Created with Inkscape (http://www.inkscape.org/) -->

Скорее всего этой вещью и создаются эти стили...
ЗЫ. Там отличный граф написан. Целый движок динамического графа....
Такого вроде же в Qt стандартного нет?

Автор: Litkevich Yuriy 2.4.2009, 17:28

Цитата(LE0N @ 2.4.2009, 20:34) *
Скорее всего этой вещью и создаются эти стили...
да это просто рисунок в ИнкСкэйпе нарисован. Про стили у них в доке написано:
Цитата
The general naming spec looks like this:
<widget-name>/<skin-name>/<file-name>.svg



П.С. ребят вы доку-то собирали? (доксигеном)

Автор: igor_bogomolov 2.4.2009, 18:52

Цитата(Litkevich Yuriy @ 2.4.2009, 18:28) *
П.С. ребят вы доку-то собирали? (доксигеном)


Да, конечно. Первым делом. А что?

Автор: Litkevich Yuriy 2.4.2009, 19:51

Цитата(igor_bogomolov @ 2.4.2009, 22:52) *
Да, конечно. Первым делом. А что?
ну вдруг не читали.

Автор: LE0N 2.4.2009, 21:47

Да я только скачал, потом скомпилил два этих примера, посмотрел на возможности, и отодвинул до востребования...

Автор: igor_bogomolov 3.4.2009, 12:12

Поигрался немного со стилями (svg). Результат на картинке
Помоему неплохо. :rolleyes:

Теперь у меня возник вопрос. Как на этой кнопке разместить текст?
painter.drawText почемуто к требуемому результату не приводит.

paintEvent
void QtSvgButton::paintEvent(QPaintEvent * event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    painter.scale(buttonRect().width(), buttonRect().height());
    if (isDown()) {
        m_pressed.play(&painter);
    } else if (underMouse()) {
        m_hovered.play(&painter);
    } else {
        m_normal.play(&painter);
    }
//    painter.drawText(20,20,"qwqwq");
}

Есть у кого-нить какие мысли по этому поводу?

Архивчик с проектом прилогается.
-----------------------------------------
Архив обновлен.

 

 Button.zip ( 17.77 килобайт ) : 104
 

Автор: Litkevich Yuriy 3.4.2009, 12:23

Цитата(igor_bogomolov @ 3.4.2009, 16:12) *
Есть у кого-нить какие мысли по этому поводу?
может картинка, как бы закрывает текст?

Автор: igor_bogomolov 3.4.2009, 12:28

Скорее всего. Хотя текст я рисую после картинки, и предпологал что он должен быть виден.
Пока с текстом ничего не получается. Если есть возможность, поэксперементируейте пожалуйста.
Может еще какие подводные камни есть.

Автор: molchanoviv 3.4.2009, 19:55

Странные какие-то у вас у вас проблемы. У меня все собралось отлично и без этих шаманств.

Моя система: Linux, Qt 4.5, gcc 4.3.2

Автор: SABROG 3.4.2009, 20:59

Цитата(Litkevich Yuriy @ 1.4.2009, 18:11) *
что за звёздочка?


Операция умножения ;)

Шутка, конечно.

Из ассистента:

Цитата
The *= operator adds a value to the list of values in a variable, but only if it is not already present. This prevents values from being included many times in a variable.


Оператор, который ищет существует ли уже такой ключ, и если существует, то не добавляет его. На самом деле я бы его использовал везде вместо +=, т.к. он более правильный.

Но, к сожалению, не интуитивно понятный не только для новичков, но и для тех, кто с Qt не первый год :)

Автор: Litkevich Yuriy 4.4.2009, 6:19

Цитата(SABROG @ 4.4.2009, 0:59) *
Оператор, который ищет существует ли уже такой ключ, и если существует, то не добавляет его. На самом деле я бы его использовал везде вместо +=, т.к. он более правильный.
да, я пожалуй возьму на вооружение.

Автор: igor_bogomolov 5.4.2009, 2:13

Цитата(molchanoviv @ 3.4.2009, 20:55) *
Странные какие-то у вас у вас проблемы. У меня все собралось отлично и без этих шаманств.
Моя система: Linux, Qt 4.5, gcc 4.3.2
Под виндой к сожалению без шаманства никак. Моя система сборки в подписи.

---------------------------------------------------------------------------------------------------------------

Сделал я себе кнопочки. Есть конечно свои недостатки, но меня вполне устраивает и так. Кому интересно, архивчик я обновил (ищите выше по треду).

 

Автор: igor_bogomolov 6.4.2009, 1:13

Встраивание embedded-widgets-1.1.0 в Qt Designer

Если кого-то когда-то заинтересуют эти виджетики, прилагаю архивчик, чтобы скомпилить из них плагины для QtDesigner.
Качаем его, кладем параллельно оригинальной библиотеки, и компилируем релизом. Не забудьте также настроить окружение, чтобы плагины оказались там где надо.

Система сборки под которой все это проверялось, в моей подписи.

 

 embeddedWidgetPlugin.zip ( 3.79 килобайт ) : 135
 

Автор: log1c 6.4.2009, 7:49

было бы кул оформить это в вики, весь процесс шаманства с этими виджетами :)

Автор: igor_bogomolov 6.4.2009, 8:48

Цитата(log1c @ 6.4.2009, 8:49) *
было бы кул оформить это в вики, весь процесс шаманства с этими виджетами
Да здесь писать на самом деле нечого. Все сводится к тому, что будьте внимательны и не забывайте читать описания. :rolleyes:
Единственное что нашаманил, это замена #include<...> на #include"...".
И еще я отказался от использования include(...) в проектном файле, подключая все исходники вручную.
К тому же, этих проблем, как я понял под Linux не наблюдается.
Как то на вику все это не тянет, мелковато.

P.S. Ну что, может пора закрывать тему? Мне больше здесь нечего добавить. :rolleyes:

Автор: Litkevich Yuriy 6.4.2009, 10:03

Цитата(igor_bogomolov @ 6.4.2009, 12:48) *
P.S. Ну что, может пора закрывать тему?
да, пожалуй. А инклюды прибережем для другой темы.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)