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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Qt: преобразованные виджеты  (Прочитано 10550 раз)
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



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

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

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

Сообщений: 4747



Просмотр профиля 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
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



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

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

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


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