KM
Katty Misik21 сентября 2020 г. 12:19

виджет динамического размера в виджете постоянно заданого размера, цель: виджет родитель принимал размер виджета ребенка

ui, parent, child, setWidgetResizable

Добрый день, у меня есть виджет динамического размера (2) в виджете статического (1)(постоянно заданого размера), И мне бы хотелось чтобы виджет родитель принимал размер виджета ребенка(виджета который есть внутри него и имеет динамический размер)

Очень хотелось бы чтоб был простой способ реализации задуманого
код

#include "errordialog.h"
#include "errorstatus.h"
#include "ui_errorstatus.h"
#include <QDebug>
#include <QTextBrowser>

ErrorStatus::ErrorStatus(QWidget *parent) :
    QWidget(parent),
    MenuElement(":/icons/img/error.png", nullptr, "0"),
    ui(new Ui::ErrorStatus)
{
    ui->setupUi(this);
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &ErrorStatus::checkForErrors);
    timer->start(settings.ErrorHandlerTimeOut.get()*1000);
    Global::errorHandler = this;
    agregator = new ErrorAgregator(this);
    ui->scrollArea->setWidgetResizable(true);

    ui->scrollWidget->setStyleSheet("QWidget#scrollWidget {background-color: #282828; border-left: 2px solid rgb(85,150,255);}");//40,40,40
    ui->scrollArea->setStyleSheet("QScrollArea { background-color: #282828; border: 0;}");//40,40,40
}

void ErrorStatus::checkForErrors() {
    clear(this->ui->horizontalLayout);
    Global::Alarm::turnOff(); //alarm noise
    QList<errorWidget*> textes;


    short errCount=0;
    foreach(ErrorAble *eventer, eventers) { //Przejdź po wszystkich eventerach (error eventerach)
        foreach(Error *error, eventer->errors) { //Przejdź po wszystkich błędach eventerów
            auto widget = new errorWidget(error, this->ui->contentWidget); //Stwórz widget błędu
            if(error->showInBar) { //Czy błąd ma być pokazany w status barze
                textes.push_front(widget);
                errCount++; //Zliczanie ilości błędów
            }
            if(!error->clicked && error->noticable) {
                if(settings.production.get()) Global::Alarm::turnOn(); //alarm noise
            }
            if(error->noticable && !error->noticed){ //Jeżeli ma być wyświetlony, a nie został
                agregator->add(error);//Wyświetl poprzez dodanie do listy
                error->noticed = true; //Ustaw jako wyświetlony
                Global::logger->add(*error); //Zloguj error
                if(!error->showInBar) eventers.removeOne(eventer);
            }
            if(error->lifetime>0) { //Jeżeli czas życia jest nieskończony
                error->currentLifeTime--; //Skróćmy czas życia
                if(error->currentLifeTime<=0) eventer->cancelError(*error); //Jeżeli czas życia dobiegł końca usuń błąd z listy
            }
        }
    }

    if(errCount>0) getIcon()->setText("Błędy: "+QString::number(errCount)); //Zmień liczbę w menu jeżeli wystąpiły błędy
    else getIcon()->setText("Brak błędów"); //Jeżeli nie wykryto błędów wyświetl ich brak


    foreach(errorWidget *widg, textes) {
        this->ui->horizontalLayout->addWidget(widg);
    }
    this->ui->horizontalLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
}

void ErrorStatus::clear ( QLayout* layout )
{
    QLayoutItem* item;
    while ( ( item = layout->takeAt( 0 ) ) != nullptr )
    {
        delete item->widget();
        delete item;
    }
    update();
}

void ErrorStatus::addEventer(ErrorAble *eventer) {eventers.append(eventer);}
void ErrorStatus::removeEventer(ErrorAble *eventer) {eventers.removeAll(eventer);}

void ErrorStatus::abort()
{
    foreach(ErrorAble *eventer, eventers) {
        eventer->resetErrors();
    }
}

QWidget *ErrorStatus::getView(){return this;}
ErrorStatus::~ErrorStatus(){delete timer;delete ui;}
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

1
Evgenii Legotckoi
  • 21 сентября 2020 г. 14:03

Добрый день!

Все классы, которые наследованы от QObject имеют метод parent() , вы можете попробовать сделать static_cast парент объекта и установить его размеры по контенту. Для этого служит метод adjustSize() .
Примерно так

static_cast<QWidget*>(parent())->adjustSize();

    Комментарии

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

    Qt - Тест 001. Сигналы и слоты

    • Результат:84баллов,
    • Очки рейтинга4
    Ua

    Qt - Тест 001. Сигналы и слоты

    • Результат:42баллов,
    • Очки рейтинга-8
    ОК

    Qt - Тест 001. Сигналы и слоты

    • Результат:47баллов,
    • Очки рейтинга-6
    Последние комментарии
    ИМ
    Игорь Максимов22 ноября 2024 г. 21:51
    Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    Evgenii Legotckoi
    Evgenii Legotckoi31 октября 2024 г. 23:37
    Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
    A
    ALO1ZE19 октября 2024 г. 17:19
    Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
    ИМ
    Игорь Максимов5 октября 2024 г. 16:51
    Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
    d
    dblas55 июля 2024 г. 20:02
    QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
    Сейчас обсуждают на форуме
    f
    firstlunoxod15 февраля 2025 г. 13:46
    Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
    Дмитрий
    Дмитрий3 февраля 2025 г. 16:24
    Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
    NW
    Nayo Wai30 января 2025 г. 19:22
    не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
    n
    nkly3 января 2025 г. 12:52
    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
    M
    Marsel17 августа 2023 г. 0:26
    OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

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