Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: dd от Август 03, 2010, 03:28



Название: Как сделано в qtdemo?
Отправлено: dd от Август 03, 2010, 03:28
Я пока новичок, исходники qtdemo сложноваты для меня.
Интересует, как сделаны кнопочки в меню.
Я попробовал  взять обычный виджет (QLabel, QButton), и применить setStyleSheets.
На обычном окне все отображается как надо.
А на GV убого:
(http://s43.radikal.ru/i100/1008/e8/0906b4c25e33t.jpg) (http://radikal.ru/F/s43.radikal.ru/i100/1008/e8/0906b4c25e33.png.html)

На картинке QLabel со стилем:
Код:
QLabel{border: 1px solid #ffcccc;
                              background-color: #000000;
                              border-radius: 10px;
                              font: bold 15px;
                              color: #ffffff;

Как видно, округление виджета отображается некорректно.
Хотя, может быть я чего-то напутал. Делал так:


Код:
    QApplication a(argc, argv);
    MainWindow w;

    QGraphicsScene scene(0, 0, 500, 500);

    QGraphicsView gv(&scene, &w);
    gv.setGeometry(100, 100, 600, 600);
    gv.setStyleSheet("QGraphicsView{background: qlineargradient(spread:pad, x1:1, y1:1, x2:0, y2:0,stop:0.403409 rgba(10, 10, 10, 255),stop:1 rgba(155, 155, 155, 255));}");

    MyWidget *widget = new MyWidget();
    widget->setGeometry(10, 10, 400, 50);
    widget->setText("Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ");
    widget->setAlignment(Qt::AlignTop | Qt::AlignLeft | Qt::AlignVCenter);
    widget->setWordWrap(true);
    widget->setStyleSheet("QLabel{border: 1px solid #ffcccc;\
                              background-color: #000000;\
                              border-radius: 10px;\
                              font: bold 15px;\
                              color: #ffffff;}");

    QGraphicsProxyWidget *proxy = scene.addWidget(widget);


    w.setStyleSheet("QMainWindow{background: qlineargradient(spread:pad, x1:1, y1:1, x2:0, y2:0,stop:0.403409 rgba(10, 10, 10, 255),stop:1 rgba(155, 155, 155, 255));}");

    w.show();
    return a.exec();

MyWidget - просто класс, наследованный от QLabel. Без GV отображается корректно.

И еще вопрос. Как там сделан текст на кнопках? При растягивании окна буквы всегда растягиваются пропорционально кнопке.
Первая мысль была про QFont::setPixelSize(...), но по-моему это не то.


Название: Re: Как сделано в qtdemo?
Отправлено: Пантер от Август 03, 2010, 06:25
А почитать исходники религия не позволяет?


Название: Re: Как сделано в qtdemo?
Отправлено: lit-uriy от Август 03, 2010, 10:27
>>А почитать исходники религия не позволяет?

он же написал:
"исходники qtdemo сложноваты для меня"


Название: Re: Как сделано в qtdemo?
Отправлено: Пантер от Август 03, 2010, 11:31
Упс. Это пропустил. Но исходники все равно попробуй покопать понемногу.


Название: Re: Как сделано в qtdemo?
Отправлено: kdm от Август 03, 2010, 12:01
> Упс. Это пропустил. Но исходники все равно попробуй покопать понемногу.
Так всегда и бывает :(


Название: Re: Как сделано в qtdemo?
Отправлено: dd от Август 03, 2010, 13:52
Нуу снова здорова. Все вумные такие, спасу нет.
Тогда чего же не ответить на мои два простых вопроса?
Наверняка, если человек свободно может прочитать исходники QTDemo, должен знать, как сделать также не читая их.
Как сие организовать на winapi, MFC или wxWidgets, сам могу рассказать кому угодно. Но QT слишком специфичная штука, поэтому спрашиваю у бывалых.

[ОФФТОП]
И вообще я перед тем как запостить порылся в форуме. Есть дофига нерешенных вопросов, где новичок прямым текстом говорит, что он
новичок и сложные исходники не может читать. Ему так же  ляпают не читая пост - читай исходники, потом снисходительно "ой, извини, не прочел, что ты нуб".
И все, на этом ветка заканчивается. Сам умник не знает, ответа на вопрос, хотя вопрос несложный.
Ребят! Читайте пожалуйста пост, перед тем как ответить! Неуважение к форуму.
А то встаю утром - аж 4 ответа. Захожу - мусор.
2 админы: потрите пожалуйста ответы, не содержащие информации по вопросу. Спасибо.
[/ОФФТОП]

PS Ничего личного, если кого задел, извиняюсь.


Название: Re: Как сделано в qtdemo?
Отправлено: ufna от Август 03, 2010, 14:10
Когда не помогает QSS, делай свой айтем-кнопку и не мучайся. А там уже рисуй текст и графику кнопки как тебе хочется - я так делал и делаю, т.к. на это дело у меня уже сильно левелапнутая кнопка. ничего сложного - делаешь три-четыре стейта по настроению, ловишь мышь и обрабатывашь paintEvent.

а QSS не идеален.


Название: Re: Как сделано в qtdemo?
Отправлено: lit-uriy от Август 03, 2010, 16:25
dd, вся эта программа основывается на каркасе графического представления.

Кнопка описана: %QTDIR%\demos\qtdemo\textbutton.{cpp|h}
Она является наследником класса DemoItem описанного в одноимённом файле. А DemoItem, в свою очередь, является наследником QGraphicsItem