KM
Katty MisikҚыр. 24, 2020, 3:27 Т.Ж.

как скрыть елемент с копии виджета

QPushButton

Добрый день я копирую обект из другого класса, а именно

 auto widget = new errorWidget(error, this->ui->contentWidget); //Stwórz widget błędu

как я могу с копии убрать кнопку(X)? если пишу widget-X или errorWidget ->X QT ее не видит=(
тили хотя бы скрыть ее при этом не лезть в класс где она создавалась.
Просто этот виджет отображаеться в других местах у меня в программе
кстати кнопка создана не динамически а внутри виджета= виджет-виджет-кнопка

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

7
U
  • Қыр. 24, 2020, 6:56 Т.Ж.
  • (өңделген)

Дело в том, что ui класса находится в private-секции... И из-вне доступ получить, не нарушая канонов - не получится) Можно конечно сделать что-то в духе #define private public, но это для истинных извращуг))))

Первое, что пришло в голову:
В конструкторе Вашего errorWidget-виджета добавить булевскую переменную, которая будет собственно отвечать за то, видна ли кнопка Х или не видна)

И кнопка видна будет, когда

 auto widget = new errorWidget(error, this->ui->contentWidget, true); //Stwórz widget błędu

И скрыта, когда

 auto widget = new errorWidget(error, this->ui->contentWidget, false); //Stwórz widget błędu

А чтобы не править ранее работающие вызовы виджета, можно в конструкторе указать значение по умолчанию = true.
Тогда старые вызовы не придется переписывать)
А в новых уже укажете требуемое состояние)
Но я так чую, что придется подсказать еще и что в конструкторе писать? Там подправить-то немного придется... Чего Вы боитесь?)

    KM
    • Қыр. 28, 2020, 5:29 Т.Ж.
    • (өңделген)

    Вы меня не правильно поняли
    мне нужно скрыть X!
    как я могу с копии убрать кнопку(X)? если пишу widget-X или errorWidget ->X QT ее не видит=(

      Evgenii Legotckoi
      • Қыр. 28, 2020, 6:16 Т.Ж.
      • Жауап шешім ретінде белгіленді.

      Можете попробовать установить парента для виджета.
      Когда вы создаёте виджет

      new errorWidget(error, this->ui->contentWidget);
      

      То вы передаёте ему parent объект. Полагаю, что это this->ui->contentWidget . parent будет отвечать за то, внутри какого объекта находится создаваемый объект. Чтобы обращаться к созданным вручную виджетам, рекомендую сделать для них переменную, или вектор виджетов, чтобы можно было их куда-то сохранять, а ваше обращение через errorWidget->X не работает именно потому, что нет переменной, куда вы сложили этот виджет или метода, который достал бы созданный виджет из переменной или вектора виджетов.

        U
        • Қыр. 29, 2020, 5:09 Т.Ж.
        • (өңделген)

        Удалить пост нельзя... Поэтому удачки, Катту)

          KM
          • Қаз. 7, 2020, 5:57 Т.Ж.
          • (өңделген)

          Help

          include

          include

          include

          include

          include

          include "errorwidget.h"

          include "erroragregator.h"

          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: 5px solid rgb(85,150,255);}");//40,40,40
          ui->scrollArea->setStyleSheet("QScrollArea { background-color: #282828; border: 0;}");//40,40,40
          errorWidget* widg2;
          //errorWidget->X->hide();
          

          }

          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
                      //auto pos1 = this->mapToParent(this->rect().topLeft());
          
                  }
          
                  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;}

            KM
            • Қаз. 7, 2020, 6:43 Т.Ж.

            можеьте написать как это будеь в файлe .H?

              Evgenii Legotckoi
              • Қаз. 7, 2020, 5:51 Т.Қ.

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

                Пікірлер

                Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                Кіріңіз немесе Тіркеліңіз
                AD

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

                • Нәтиже:50ұпай,
                • Бағалау ұпайлары-4
                m
                • molni99
                • Қаз. 26, 2024, 1:37 Т.Ж.

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

                • Нәтиже:80ұпай,
                • Бағалау ұпайлары4
                m
                • molni99
                • Қаз. 26, 2024, 1:29 Т.Ж.

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

                • Нәтиже:20ұпай,
                • Бағалау ұпайлары-10
                Соңғы пікірлер
                ИМ
                Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                Evgenii Legotckoi
                Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                A
                ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                ИМ
                Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas5Шілде 5, 2024, 11:02 Т.Ж.
                QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                Енді форумда талқылаңыз
                m
                moogoҚар. 22, 2024, 7:17 Т.Ж.
                Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                Evgenii Legotckoi
                Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                t
                tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                NSProject
                NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

                Бізді әлеуметтік желілерде бақылаңыз