KM
Katty Misik21 сентября 2020 г. 2: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 г. 4:03

Добрый день!

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

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

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    d
    • dsfs
    • 26 апреля 2024 г. 1:56

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

    • Результат:80баллов,
    • Очки рейтинга4
    d
    • dsfs
    • 26 апреля 2024 г. 1:45

    C++ - Тест 002. Константы

    • Результат:50баллов,
    • Очки рейтинга-4
    d
    • dsfs
    • 26 апреля 2024 г. 1:35

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

    • Результат:73баллов,
    • Очки рейтинга1
    Последние комментарии
    k
    kmssr8 февраля 2024 г. 15:43
    Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
    АК
    Анатолий Кононенко4 февраля 2024 г. 22:50
    Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
    EVA
    EVA25 декабря 2023 г. 7:30
    Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
    J
    JonnyJo25 декабря 2023 г. 5:38
    Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
    G
    Gvozdik18 декабря 2023 г. 18:01
    Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
    Сейчас обсуждают на форуме
    G
    George136 мая 2024 г. 21:27
    добавить qlineseries в функции в функции: "GPlotter::addSeries(QString title, QVector &arr)" я вызываю метод setChart(...), я в конструктор передал адрес на QChartView элемент
    BlinCT
    BlinCT5 мая 2024 г. 2:46
    Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
    PS
    Peter Son3 мая 2024 г. 14:57
    Best Indian Food Restaurant In Cincinnati OH Ready to embark on a gastronomic journey like no other? Join us at App india restaurant and discover why we're renowned as the Best Indian Food Restaurant In Cincinnati OH . Whether y…
    Evgenii Legotckoi
    Evgenii Legotckoi2 мая 2024 г. 11:07
    Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
    IscanderChe
    IscanderChe30 апреля 2024 г. 1:22
    Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…

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