Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB

Qt/C++ - Урок 082. Кастомные виджеты в графическом дизайнере Qt Designer

QtDesigner, Widget, Qt

Периодически возникают вопросы связанные с наследованием виджетов и применении наследованных виджетов в рамках графического дизайнера Qt Designer.

Если применение виджета в рамках кода в целом является понятным, то как прикрутить кастомный виджет к ui форме на первый взгляд не понятно.

Давайте посмотрим на примере наследованной кнопки QPushButton.

CustomButton

Дан класс CustomButton, который наследован от QPushButton и в нём переопределён метод mousePressEvent. Вы не увидите в данном коде ничего особенного, он просто показывает, как написать класс, который наследован от какого-либо виджета в Qt.

CustomButton.h

#ifndef CUSTOMBUTTON_H
#define CUSTOMBUTTON_H

#include <QPushButton>

class CustomButton : public QPushButton
{
    Q_OBJECT
public:
    explicit CustomButton(QWidget *parent = nullptr);

    // QWidget interface
protected:
    virtual void mousePressEvent(QMouseEvent* event) override;
};

#endif // CUSTOMBUTTON_H

CustomButton.cpp

#include "CustomButton.h"

CustomButton::CustomButton(QWidget *parent) : QPushButton(parent)
{

}


void CustomButton::mousePressEvent(QMouseEvent* event)
{
    // ToDo something

    QWidget::mousePressEvent(event);
}

Добавление кастомного виджета на ui-форму

1) Дана форма класса Widget, в которой ничего нет

2) Добавим на неё стандартную кнопку QPushButton

3) Вызвать контекстное меню правой кнопкой мыши и нажмите пункт "Преобразовать в..."

4) В открывшемся диалоговом окне внести имя преобразованного класса и имя заголовочного файла. В нашем случае это будет:

  • имя класса CustomButton
  • заголовочный файл CustomButton.h

И нажать кнопку добавить в диалоговом окне

5) Выбрать преобразованный класс и нажать кнопку преобразовать

Комментарии

9 июля 2018 г. 10:32

Благодарю, а я решил весь GUI в коде писать из-за того, что года два назад не нашел ответ на этот вопрос :) Плохо искал :C

9 июля 2018 г. 10:46

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

Для Django рекомендую VDS-хостинг TIMEWEB

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
9 декабря 2018 г. 22:00
Yura Gajdar

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

  • Результат:70баллов,
  • Очки рейтинга1
9 декабря 2018 г. 2:33
anat_home@ukr.net

C++ - Тест 001. Первая программа и типы данных

  • Результат:100баллов,
  • Очки рейтинга10
9 декабря 2018 г. 2:29
anat_home@ukr.net

C++ - Тест 001. Первая программа и типы данных

  • Результат:60баллов,
  • Очки рейтинга-1
Последние комментарии
9 декабря 2018 г. 8:14
Евгений Легоцкой

Вы можете в QSettings записать откуда угодно bool переменную без всяких чекбоксов. def save_check_box_settings(self): settings = QSettings() settings.setValue(SETTINGS_TRAY,...
8 декабря 2018 г. 13:02
Жасулан Нургожинов

а как можно это сделать без чек бокса
5 декабря 2018 г. 13:25
Евгений Легоцкой

Значит всё-таки в переменных окружения была проблема. Полагаю, что Qt Creator берёт информацию сначала из переменных PATH, либо записывает её из  своего конфига, а потом берёт уже из PATH при ...
5 декабря 2018 г. 13:21
IscanderChe

В переменной PATH путь к CMake был указан как G:\soft\CMake\bin, в реальности же каталог называется Cmake. Причём после изменения в переменной PATH всё заработало, а в Qt Creator путь ос...
5 декабря 2018 г. 10:53
Евгений Легоцкой

Под linux как правило проще, там всё по свои каталогам и полочкам разложено сразу. Думается мне, что проблема все-таки где-то в путях переменных...
Сейчас обсуждают на форуме
9 декабря 2018 г. 18:55
Игорь Максимов

Доброго времени суток. Нашел приложение для конвертации видео + celery что очень радует. Не радует только то что оно отказывается работать под python3 Трейсбек прикладываю: File "/ho...
9 декабря 2018 г. 15:14
Евгений Легоцкой

Непонятно, вы драйвер скачали или собирали? Сдаётся мне, что возможно более правильный вариант собрать своим компилятором вначале его, а потом уже подключать.
8 декабря 2018 г. 18:30
Жасулан Нургожинов

может так будет понятнее# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'C:\Users\hallgato\PycharmProjects\workers.ui'## Created by: PyQt5 UI code generator 5.11...
8 декабря 2018 г. 10:51
Даниил Тетерин

Но если серьезно, то действительно помощь нужна. Мне по-хорошему нужно сдать это в понедельник
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы