KM
Katty Misik24 сентября 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 г. 17:51

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

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                e
                • ehot
                • 1 апреля 2024 г. 0:29

                C++ - Тест 003. Условия и циклы

                • Результат:78баллов,
                • Очки рейтинга2
                B

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

                • Результат:16баллов,
                • Очки рейтинга-10
                B

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

                • Результат:46баллов,
                • Очки рейтинга-6
                Последние комментарии
                k
                kmssr9 февраля 2024 г. 5:43
                Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                АК
                Анатолий Кононенко5 февраля 2024 г. 12:50
                Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                EVA
                EVA25 декабря 2023 г. 21:30
                Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                J
                JonnyJo25 декабря 2023 г. 19:38
                Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                G
                Gvozdik19 декабря 2023 г. 8:01
                Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                Сейчас обсуждают на форуме
                a
                a_vlasov14 апреля 2024 г. 16:41
                Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                Павел Дорофеев
                Павел Дорофеев14 апреля 2024 г. 12:35
                QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                Mm
                Mind mingles12 апреля 2024 г. 10:42
                ASO Service Forum: Enhancing App Visibility and Reach Welcome to the ASO Service Forum, your ultimate destination for insights, discussions, and strategies revolving around App Store Optimization. ASO (App Store Optimization) is paramoun…
                f
                fastrex4 апреля 2024 г. 14:47
                Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
                P
                Pisych27 февраля 2023 г. 15:04
                Как получить в массив значения из связанной модели? Спасибо, разобрался:))

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