Russian Qt Forum
Ноябрь 25, 2024, 08:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделано в qtdemo?  (Прочитано 5178 раз)
dd
Гость
« : Август 03, 2010, 03:28 »

Я пока новичок, исходники qtdemo сложноваты для меня.
Интересует, как сделаны кнопочки в меню.
Я попробовал  взять обычный виджет (QLabel, QButton), и применить setStyleSheets.
На обычном окне все отображается как надо.
А на GV убого:


На картинке 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(...), но по-моему это не то.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Август 03, 2010, 06:25 »

А почитать исходники религия не позволяет?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Август 03, 2010, 10:27 »

>>А почитать исходники религия не позволяет?

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

Юра.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Август 03, 2010, 11:31 »

Упс. Это пропустил. Но исходники все равно попробуй покопать понемногу.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kdm
Гость
« Ответ #4 : Август 03, 2010, 12:01 »

> Упс. Это пропустил. Но исходники все равно попробуй покопать понемногу.
Так всегда и бывает Грустный
Записан
dd
Гость
« Ответ #5 : Август 03, 2010, 13:52 »

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

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

PS Ничего личного, если кого задел, извиняюсь.
« Последнее редактирование: Август 03, 2010, 13:54 от dd » Записан
ufna
Гость
« Ответ #6 : Август 03, 2010, 14:10 »

Когда не помогает QSS, делай свой айтем-кнопку и не мучайся. А там уже рисуй текст и графику кнопки как тебе хочется - я так делал и делаю, т.к. на это дело у меня уже сильно левелапнутая кнопка. ничего сложного - делаешь три-четыре стейта по настроению, ловишь мышь и обрабатывашь paintEvent.

а QSS не идеален.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Август 03, 2010, 16:25 »

dd, вся эта программа основывается на каркасе графического представления.

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

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 23.