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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получить указатель главного окна  (Прочитано 6444 раз)
Boris
Гость
« : Сентябрь 06, 2009, 10:02 »

Товарищи у кого есть подскажите как лучше быть с главным окном приложения
1. Таскать за собой на него указатель (в переменной типа MainWindow *mw объявленной глобально).
2. Или же его как-то элегантно можно получить

Код:
qApp->mainWidget()
не работает в Qt4

Код:
qApp->desktop();
//и
qApp->findChild<MainWindow*>() или qApp->findChild<MainWindow*>("MainWindow");
возвращают мусор
в main у меня
Код:
    QApplication a(argc, argv);
    QTextCodec *incodec = QTextCodec::codecForLocale();
    QTextCodec::setCodecForTr(incodec);
    QTextCodec::setCodecForCStrings(incodec);
    MainWindow w;
    w.hide();
    mw = &w;//это присваиваю глобальной переменной
    return a.exec();
Записан
BRE
Гость
« Ответ #1 : Сентябрь 06, 2009, 10:33 »

QWidgetList QApplication::topLevelWidgets ()   [static]
Возвращает список окон верхнего уровня, если у тебя такое окно одно, то можно сделать что-то типа:
Код
C++ (Qt)
MainWindow *nw = qobject_cast<MainWindow*>( QApplication::topLevelWidgets()[ 0 ] );

Можно самому сохранять указатель на главное окно:
Код
C++ (Qt)
class MainWindow : public QMainWindow
{
public:
MainWindow(...)
{
Q_ASSERT_X( !m_instance, "Build MainWindow", "Объект главного окна уже создан" );
m_instance = this;
}
 
static MainWindow *instance()
{
Q_ASSERT_X( m_instance, "Get instance MainWindow", "Объект главного окна не создан" );
return m_instance;
}
 
private:
static MainWindow *m_instance = 0;
};
 

Думаю еще много чего можно придумать.
Записан
Boris
Гость
« Ответ #2 : Сентябрь 06, 2009, 11:06 »

Спасибо, topLevelWidgets помогло
Записан
vdann
Гость
« Ответ #3 : Сентябрь 06, 2009, 19:35 »

...второй вариант конечно предпочтительней, называется Singleton...
...такой прием удобно использовать для объектов, которые должны существовать в одном экземпляре в пределах одного приложения...
Записан
set
Гость
« Ответ #4 : Сентябрь 07, 2009, 07:05 »

...второй вариант конечно предпочтительней, называется Singleton...
...такой прием удобно использовать для объектов, которые должны существовать в одном экземпляре в пределах одного приложения...

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

к тому же если вы так обожаете синглетоны то надо вам сказать что в первом способе скорее всего применяеся уже написаный шаблон Реестр, который является частным случаем синглетона
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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