Russian Qt Forum
Март 29, 2024, 15:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Qt: преобразованные виджеты  (Прочитано 9257 раз)
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #15 : Март 07, 2020, 20:28 »

Не вопрос.
Вот "на коленке" набросал проект. Фактически то, что я описывал в начале темы.
Может быть, я хочу чего-то принципиально невозможного, но я хочу увидеть в консоли "my_widget", а не "MyClass".
Записан

kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #16 : Март 08, 2020, 11:09 »

это невозможно: достаточно просто взглянуть на сгененрированный код в ui_mainwindow.h. Самым простым решением будет вызвать функцию из MyClass::MyClass() по таймеру с нулевой задержкой:
Код
C++ (Qt)
   QTimer::singleShot(0, [this]{
       qDebug() << objectName();
   });
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Март 08, 2020, 11:36 »

Вот он в консоле
Код
C++ (Qt)
#include "mainwindow.h"
 
#include <QApplication>
#include <QDebug>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   MainWindow w;
qDebug() << w.findChild<QWidget *>("MyClass");
qDebug() << w.findChild<QWidget *>("my_widget");
   w.show();
   return a.exec();
}
 
Есть объект с именем "my_widget" (а с именем "MyClass" нет). Ваша печать покажет MyClass потому что
Код
C++ (Qt)
class Ui_MyClass
{
public:
 
   void setupUi(QWidget *MyClass)
   {
       if (MyClass->objectName().isEmpty())
           MyClass->setObjectName(QStringLiteral("MyClass"));
       MyClass->resize(400, 300);
 
       retranslateUi(MyClass);
 
       QMetaObject::connectSlotsByName(MyClass);
   } // setupUi
Дызайнер сначала поставит "MyClass", и только потом, при установке MainWindow, поставит "my_widget". Возможно потому что "MyClass" требуется для connectSlotsByName, ну это личное дело дызайнера.

Все работает "как доктор прописал", увидеть из экземпляра заданное имя можно только после того как оно установлено.
Записан
tux
Крякер
****
Offline Offline

Сообщений: 399



Просмотр профиля
« Ответ #18 : Март 08, 2020, 15:17 »

это невозможно: достаточно просто взглянуть на сгененрированный код в ui_mainwindow.h. Самым простым решением будет вызвать функцию из MyClass::MyClass() по таймеру с нулевой задержкой:
Код
C++ (Qt)
   QTimer::singleShot(0, [this]{
       qDebug() << objectName();
   });
Хитро! Но работает.
Спасибо!
Записан

Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.125 секунд. Запросов: 22.