KM
Katty MisikSept. 21, 2020, 2:19 a.m.

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

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;}
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
1

Добрый день!

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

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
J

C++ - Test 001. The first program and data types

  • Result:93points,
  • Rating points8
V
  • Vitreg
  • Oct. 26, 2020, 2:35 a.m.

C++ - Test 001. The first program and data types

  • Result:73points,
  • Rating points1
V
  • Vitreg
  • Oct. 26, 2020, 2:23 a.m.

C++ - Test 005. Structures and Classes

  • Result:83points,
  • Rating points4
Last comments
S

QML - Lesson 026. Intents with Qt for Android, part 1

Есть ли возможность приведения java типа у QAndroidJniObject? Интересует конкретно class to
VK

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Кто-нибудь знает, как сделать так, чтобы в QTableWidget состоящей из чекбоксов в строке таблицы можно было выбрать только один checkbox ?

Qt/C++ - Lesson 006. QSqlQueryModel – Tables in Qt with SQL-query

QSqlTableModel выполняет ряд стандартных операций для одной таблицы из базы данных. Поэтому там и реализован функционал по удалению и редактированию. QSqlQueryModel позволяет выполнить запр…
VB

Qt/C++ - Lesson 006. QSqlQueryModel – Tables in Qt with SQL-query

Добрый день. Хотел спросить вот что. Создал проект на основе QAbstractTableModel. В MainWindow cоответственно создал модель и связал с представлением. Поиск веду по списку элементов модели,…

QCheckBox в качестве делегата QTableView

До тех пор, пока у вас проект содержит только одну таблицу, или несколько то может быть. Когда их будет 1000 и чекбоксы в разных колонках, то без делегатов и переопределения возвращаемых ре…
Now discuss on the forum
DD

MyForm(forms.Form): - непонятка

просто в конструкторе self.user = None
DD

QWebView android

реализовать приведение типа невозможно
DD

не могу передать стринг с QLineEdit

якщо ти про ось це
DD

Siganal slot в ui

какой код должен находиться в слоте он сам не знает
u
  • ubomj
  • Oct. 28, 2020, 6:37 a.m.

Создание черновика как на авито и тд

Илья а можно пример кода? Пожалуйстааа ^___^ class CreatePostView(LoginRequiredMixin, CreateView): model = Post form_class = PostForm template_name = 'add.html' success_u…
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB