Как сделать круглую кнопку qt

Обновлено: 06.07.2024

Виджет QPushButton представляет собой командную кнопку.

Кнопка, или командная кнопка, является, по всей видимости, наиболее часто используемым виджетом в любом графическом пользовательском интерфейсе. Нажатие (щелчок) кнопки указывает компьютеру, что необходимо выполнить действие или ответить на вопрос. Типичные кнопки - это OK, Apply (Применить), Cancel (Отменить), Close (Закрыть), Yes (Да), No (Нет) и Help (Справка).

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

В данном примере сочетанием горячих клавиш является Alt+D, а текстовая метка выглядит как Download.

Кнопки отображают текстовую метку и, при желании, небольшую иконку, которые могут быть установлены в конструкторе и позднее изменены с помощью setText() и setIcon(). Если кнопка недоступна, то текст и иконка будут отображаться в соответствии со стилем GUI чтобы показать, что кнопка "недоступна".

Кнопка испускает сигнал clicked() когда активизируется мышью, клавишей пробела или сокрыщенной клавишей. Соединить данный сигнал для обработки нажатия кнопки. Кнопка также предоставляет другие, реже испольуемые сигналы, например, pressed() и released().

Командные кнопки в диалогах по умолчанию являются кнопками автоумолчания, т.е. они становятся кнопками по умолчанию автоматически при получении фокуса ввода клавиатуры. Кнопка по умолчанию - это кнопка, которая активизируется когда пользователь нажимает клавишу Enter или Return в диалоге. Вы можете изменить данное свойство используя setAutoDefault(). Обратите внимание, что кнопки автоумолчания резервируют небольшое дополнительное пространство которое необходимо для рисования кнопки по умолчанию. Если Вы не хотите занимать место вокруг кнопок, вызовите setAutoDefault(false).

Будучи таким важным элементом, кнопка за прошлое десятиление была сильно усовершенствована чтобы вместить в себя много разновидностей. Стиль Microsoft предоставляет, приблизительно, десять параметров кнопок в Windows и подразумевается множество их комбинаций.

Наиболее важные режимы и состояния кнопки:

  • Доступна или нет (серая, недоступная).
  • Стандартная кнопка, западающая кнопка или кнопка меню.
  • Включена или выключена (только для западающих кнопок).
  • Кнопка по умолчанию или нормальная. Кнопка по умолчанию может быть "кликнута" либо активизирована клавишами Enter или Return.
  • Автоповторение включено или нет.
  • Нажата или нет.

Как правило, кнопку используют чтобы заставить приложение или диалог выполненить действие по щелчку пользователя на ней (такие как Apply (Применить), Cancel (Отменить), Close (Закрыть) и Help (Справка)) или когда виджет, как предполагается, имеет широкую прямоугольную форму и надпись. Маленькие, обычно квадратные кнопки, не выполняющие действий, но изменяющие состояние окна (такие как кнопки в правом верхнем углу QFileDialog) не являются командными кнопками, а являются кнопками инструментов. Qt для этих кнопок предоставляет специальный класс (QToolButton).

Если вы нуждаетесь в кнопке с поведением подобным поведению фиксируемой кнопке (см. setCheckable()) или подобной кнопке с автоповторением сигнала активации пока она нажата, подобно стрелке в полосе прокрутки (см. setAutoRepeat()), то командная кнопка - это, вероятно, не то, что Вам нужно. Когда есть сомнения - используйте кнопку инструмента.

Одна из разновидностей командной кнопки - кнопка меню. Такие кнопки могут предоставить как одну команду, так и несколько, когда по ним щелкают, выпадает меню, состоящее из нескольких команд на выбор. Чтобы связать выпадающее меню с командной кнопкой, используйте метод setMenu().

Другие классы кнопок - это переключатели (см. QRadioButton) и флажки (см. QCheckBox).

В Qt базовый класс QAbstractButton реализует большинство методов и API, а класс QPushButton реализует логику GUI. Для получения более полной информации об API см. QAbstractButton.

Описание Свойств

autoDefault : bool

Данное свойство указывает, является-ли кнопка кнопкой автоумолчания.

Если данное свойство установлено в true, то кнопка является кнопкой автоумолчания в диалоге.

В некоторых стилях GUI кнопка по умолчанию отображается с дополнительной рамкой вокруг толщиной до 3 пикселей или более. Qt автоматически оставляет это место свободным вокруг кнопок автоумолчания, т.е. кнопки автоумолчания могут иметь немного больший рекомендуемый размер.

По умолчанию данное свойство равно true для кнопок имеющих в качестве родителя QDialog; для других кнопок оно равно false.

Для получения более подробной информации о взаимодействии свойств default и auto-default см. описание свойства default.

default : bool

Данное свойство указывает, является-ли кнопка кнопкой по умолчанию.

Если данное свойство установлено в true, то кнопка активизируется если пользователь нажимает клавишу Enter (или Return) в диалоге.

Кнопка активизируется при нажатии пользователем клавиши Enter независимо от фокуса: Если есть кнопка по умолчанию, то срабатывает она; в противном случае, если есть одна или более кнопок autoDefault то срабатывает первая из кнопок autoDefault которая была бы активизирована при нажатии клавиши Tab. Если нет кнопок по умолчанию и кнопок autoDefault, то только нажатие Space (Пробел) на кнопке имеющей фокус, щелчок мыши или использование горячего сочетания клавиш смогут активизировать кнопку.

В диалоге только одна кнопка в один момент может быть кнопкой по умолчанию. Данная кнопка будет отображаться с дополнительной рамкой вокруг (в зависимости от стиля GUI).

Поведение кнопки по умолчанию проявляется только в диалоге. Кнопка всегда может быть активизирована нажатием на клавиатуре Enter (или Return) или нажатием Spacebar когда кнопка имеет фокус.

По умолчанию свойство имеет значение false.

flat : bool

Данное свойсто указывает, доступна-ли рамка кнопки.

По умолчанию свойство имеет значение false.

Описание Функций-Членов

QPushButton::QPushButton ( QWidget * parent = 0 )

Создает командную кнопку без надписи и с родителем parent.

QPushButton::QPushButton ( const QString & text, QWidget * parent = 0 )

Создает командную кнопку с родителем parent и надписью text.

QPushButton::QPushButton ( const QIcon & icon, const QString & text, QWidget * parent = 0 )

Создает командную кнопку с иконкой icon, текстом text и родителемparent.

Обратите внимание, что Вы можете также передать объект QPixmap в качестве иконки (благодаря неявному преобразованию типов в C++).

QPushButton::~QPushButton ()

Разрушает командную кнопку.

QMenu * QPushButton::menu () const

Возвращает ассоциированное с кнопкой выплывающее меню или 0 если всплывающее меню для кнопки не было установлено.

void QPushButton::setMenu ( QMenu * menu )

Ассоциирует всплывающее меню menu с данной командной кнопкой. Это приведет к превращению кнопки в кнопку меню, что в некоторых стилях может вызвать появление маленького треугольника справа от надписи кнопки.

Меню передается кнопке не по значению.

void QPushButton::showMenu () [slot]

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

Рад снова всех приветствовать! Как известно, спрос рождает предложение, поэтому я решил опубликовать цикл статей, посвященных различным аспектам QML 👍 Пройдемся более менее масштабно, начиная с основных интерактивных элементов для взаимодействия с пользователем, таких как Button , CheckBox , ComboBox и т. д. И не оставим в стороне также более узконаправленные нюансы. При этом среди вопросов по этой тематике добрую половину представляют из себя вопросы по кастомизации стиля и внешнего вида элементов. Соответственно, этому уделим отдельное внимание, конечно же, все будет сопровождаться конкретными практическими примерами.

Не знал, с чего именно начать, но по факту последовательность тут особой роли не играет, так что без веской на то причины первым героем данного цикла будет тип Button . И в качестве отправной точки стабильно будем использовать пустой Qt Quick проект:

Qt Quick project.

В итоге имеем проект с двумя файлами с дефолтным содержимым, main.cpp:

Для использования Button сразу импортируем:

QML Button. Создание.

Итак, пустое приложение дает нам в результате запуска пустое же окно, и это прекрасно, ничего лишнего. Сегодня разбираем исключительно кнопку, поэтому создадим ее прямо в самом центре окна, сделав последнее чуть поменьше 👍:

Как и для практически любого компонента QML непосредственно добавление осуществляется элементарно, в чем мы и убедились. Вид на данный момент Button имеет дефолтный, ничем не примечательный, кастомизацией займемся чуть позже. Но прежде рассмотрим кратко функционал.

QML Button. События.

Итак, кнопка создана для того, чтобы ее нажимали. Поэтому разберемся, как обработать данное действие пользователя. И все также максимально просто, при помощи обработчика - onClicked :

Здесь мы по нажатию выводим строку в консоль. Пример настолько прост, что просто вгоняет в краску, поэтому минимально, но усложним. Добавим под кнопку текст, в который при нажатии будем выводить количество кликов по кнопке:

Button наследует от AbstractButton, поэтому именно здесь определена и описана подавляющая часть свойств и методов. В частности, сигналы, для каждого из которых существует свой обработчик вида onИмяСигнала :

  • onCanceled
  • onClicked
  • onDoubleClicked
  • onPressAndHold
  • onPressed
  • onReleased
  • onToggled

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

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

Так, кроме всего прочего, интерфейс часто требует наличия кнопки, которая выступает в роли переключателя. То есть не просто отрабатывает события нажатия и т. д., но может находиться в двух состояниях - нажатом и не нажатом. Естественно, обойти это стороной нельзя. Реализация также очень проста:

Убираем "лишние" обработчики и получаем следующий базовый пример использования:

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

QML Button. Стили. Кастомизация.

Давайте изначально систематизируем - у кнопки есть два объекта для настройки стиля - непосредственно сама прямоугольная область и текст, заключенный внутри нее. Поэтому QML предоставляет нам два соответствующих свойства:

Лучше всего разобраться можно на конкретных примерах, к ним и переходим. Для начала сделаем минимально необходимые вещи, а затем будем постепенно добавлять:

Полезные ссылки - Rectangle, Text - и результат:

Увеличим размер кнопки:

Проблема налицо, разместим текст по центру и сразу же немного увеличим шрифт:

Уважающая себя кнопка должна иметь отклик в виде изменения оформления при действиях пользователя - наведении курсора, нажатии кнопки и т. д. Поэтому добавим цвета:

С этим разобрались, теперь мы имеем весь необходимый функционал, предлагаю рассмотреть еще один пример, с градиентами. Про градиенты будет отдельная статья (может быть), так что здесь просто, отбросив сомнения, используем. Добавим еще скругление углов кнопки и рамку по периметру, чтобы охватить бОльшее количество доступных свойств:

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

Репутация: нет
Всего: 3

Как то нашел в инете статью как создать свою объемную кнопку на QT. Тогда это не нужно было и не сохранил. Сейчас очень надо, не могу найти, даже не помню название статьи. Помню, что эффект объема там достигался за счет градиента в рисунках, накладываемых друг на друга

Репутация: нет
Всего: 1

Попробуйте копнуть в сторону css и Qt Style Sheets. Полного эффекта 3D не добиться но, по крайне мере псевдо 3D изобразить можно.

Репутация: нет
Всего: 13

Код

virtual void polish(QWidget *wgt);
virtual void unpolish(QWidget *wgt);
virtual void drawPrimitive(PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0 ) const;

Присоединённый файл ( Кол-во скачиваний: 5 )
CustomStyle.rar 10,34 Kb

Sony VAIO VGN-FW480J

user posted image

Репутация: нет
Всего: 3

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

[ Время генерации скрипта: 0.1136 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Для оформления кнопки будем пользоваться доступными в Qt CSS стилями.
Прежде всего создайте новый проект и поместите на него кнопку. Примерно вот так:


Я убрал и текст кнопки, т.к. я буду использовать заранее заготовленные изображения для её фона.
Теперь кликните правой клавишей по кнопке и нажмите "Изменить styleSheet". В появившемся окне можно приступать к редактированию свойств кнопки. Для начала уберём стандартный фон и границу. Все изменения делаются в конструкции:

В нашем случае (если вы конечно не меняли имя кнопки) :

Этим стилем я убрал границу и добавил фоновое изображение, которое находится в файле button.jpg.
Теперь приступим к редактированию кнопки при наведении курсора и её нажатого состояния:

Для редактирования стиля выключеной кнопки используйте селектор:

В указанных примерах я всего лишь меняю фоновые изображения кнопки. Вы можете задать градиенты, цвета, изменить шрифт и пр.

Читайте также: