Evgenii Legotckoi
Evgenii Legotckoi9 ноября 2019 г. 2:42

QML - Урок 037. Кастомизация кнопок в QML (Обновление урока 002)

По просьбе одного из пользователей обновляю один из первых уроков в соответствии с текущим состоянием Qt. А именно новый урок будет написан с использованием Qt Quick Controls 2.

А именно, настраиваем внешний вид нашего приложения, чтобы кнопки выглядели следующим образом.


Вступление

Первая кнопка будет красной с черным ободком и черным текстом, а при нажатии она изменит цвет фона на черный с красным ободком и красным. А вторая кнопка будет иметь те же цвета, но в обратной последовательности.

Версии

  • Qt 5.13
  • Qt Quick Controls 2

Структура проекта

Не буду вникать в содержимое файла pro, так как он создается по умолчанию. А вот все остальные файлы мы изучим.

main.cpp

Могу сказать, что содержимое шаблонов файла main.cpp претерпело значительные изменения. И теперь созданный файл по умолчанию выглядит следующим образом.

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

main.qml

Теперь создайте и настройте наши кнопки.

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Custom Button")

    // Create the first button
    Button {
        id: button_1 // Будем
        // Customize layout using anchors
        anchors.verticalCenter: parent.verticalCenter
        anchors.right: parent.horizontalCenter
        anchors.rightMargin: 15
        text: qsTr("Press me 1")

        // To customize the text, you need to set the Text object to contentItem
        contentItem: Text {
            text: button_1.text
            color: button_1.pressed ? "black" : "red"
        }

        // To customize the background, you must override the background property
        // namely, install some object that inherits from Item
        // For example Rectangle
        background: Rectangle {
            // The important point for dynamically setting the color is
            // that we control the pressed property of the button we are interested in
            // and depending on its state, set the color
            color: button_1.pressed ? "red" : "black"           // as background color
            border.color: button_1.pressed ? "black" : "red"    // so the borders
            border.width: 2
            radius: 5
        }
    }

    // Similarly, we customize the second button
    Button {
        id: button_2
        anchors.verticalCenter: parent.verticalCenter
        anchors.left: parent.horizontalCenter
        anchors.leftMargin: 15
        text: qsTr("Press me 2")

        contentItem: Text {
            text: button_2.text
            color: button_2.pressed ? "red" : "black"
        }

        background: Rectangle {
            color: button_2.pressed ? "black" : "red"
            border.color: button_2.pressed ? "red" : "black"
            border.width: 2
            radius: 5
        }
    }
}

Вывод

Если вы сравните предыдущую статью, то увидите, что разница в сложности кода очевидна. Лично я считаю благом то, что теперь не нужно переопределять стили объектов для кастомизации, как это было в Qt Quick Controls 1. Это был уродливый и не гибкий API для кастомизации. А в некоторых случаях приходилось исправлять приватную часть кода, что тоже очень плохо. Если вам нужно исправить приватную часть кода, то это говорит о двух вещах:

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

Также это будет первая статья, код которой будет размещен в общем специальном репозитории. Дальнейшие статьи постараюсь выкладывать в репозиторий на GitHub, чтобы все было в одном месте.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

i
  • 8 ноября 2024 г. 22:07

cheap priligy Minerva Endocrinol 27 157 66

i
  • 15 ноября 2024 г. 16:38

how can i buy priligy in usa February 2020; International Journal of Cancer Education and gastric cancer risk An individual participant data meta analysis in the StoP project consortium Author affiliated institutions include University of Milan Italy, Harbin Medical University China, UCLA Jonsson Comprehensive Cancer Center USA, University of Ottawa Canada, N

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
m
  • molni99
  • 26 октября 2024 г. 8:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80баллов,
  • Очки рейтинга4
m
  • molni99
  • 26 октября 2024 г. 8:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20баллов,
  • Очки рейтинга-10
Последние комментарии
i
innorwall16 ноября 2024 г. 1:21
Расширение Qt Bridge buy priligy usa It is unclear in the other articles
i
innorwall16 ноября 2024 г. 1:19
Qt/C++ - Урок 019. Рисуем треугольник в Qt5. Позиционирование в QGraphicsScene Family history Heredity priligy Be careful and be sure to specify the information on the section Special precautions for disposal and other handling in the instructions to the drug Ta…
i
innorwall16 ноября 2024 г. 0:38
QML - Урок 037. Кастомизация кнопок в QML (Обновление урока 002) how can i buy priligy in usa February 2020; International Journal of Cancer Education and gastric cancer risk An individual participant data meta analysis in the StoP project consortium…
i
innorwall15 ноября 2024 г. 20:05
Qt/C++ - Урок 016. Как установить QCheckBox в центре ячейки QTableWidget priligy usa If full substitution was observed at the training dose of 0
i
innorwall15 ноября 2024 г. 18:19
Недокументированный QMake - CONFIG += resources_big priligy for sale Most adjuvant drug therapies use substances that travel through the bloodstream, reaching cancer cells all over the body
Сейчас обсуждают на форуме
i
innorwall15 ноября 2024 г. 18:38
добавить qlineseries в функции Wallgren A, Baral E, Glas U Adjuvant breast cancer treatment with tamoxifen and combination chemotherapy in postmenopausal women priligy prescription 2 C averaged 106 48 mmol day duri…
t
tonypeachey115 ноября 2024 г. 14:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
i
innorwall11 ноября 2024 г. 18:55
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9Anonim25 октября 2024 г. 16:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Следите за нами в социальных сетях