crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в вопрос по сигналам и слотам
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 3.9.2009, 16:00
 
Цитата(BRE @ 3.9.2009, 19:10) *
Ты имеешь ввиду - не учтена reich?
угу
BRE Дата 3.9.2009, 15:10
 
Цитата(Litkevich Yuriy @ 3.9.2009, 15:46) *
эта особенность просто не учтена.

Ты имеешь ввиду - не учтена reich?

Я почему поднял эту тему. По мне, так такой подход в использовании singleton'ов чреват ошибками. Легко обнаруживаемыми и не очень.
Singleton может вовсе не гарантировать, что указатель на объект который вернул метод instance, в дальнейшем будет валиден.
Obj *obj1 = Object::instance();
// Что-то делаем, например вызываем какой нибудь статический Object::reload().
Obj *obj2 = Object::instance();

// Вот здесь obj1 может быть не равен obj2

Поэтому, сохраняя указатель на такой объект, а в дальнейшем его использование чревато тем, что указатель будет указывать на убитый или не валидный объект.
В случае с QCoreApplication это как раз и не вызовет особых проблем, но практика по моему опасна.
Litkevich Yuriy Дата 3.9.2009, 14:46
 
Цитата(BRE @ 3.9.2009, 15:20) *
Для чего может понадобиться сохранять указатель на singleton?
эта особенность просто не учтена.
И в Qt поменьшей мере два подобных класса:
QSqlDatabase
QCoreApplication
BRE Дата 3.9.2009, 11:20
 
Цитата(reich @ 3.9.2009, 12:14) *
Пердоставленный выше пример никаких. Было бы короче записать твой вариант. Но я же говорю, что привык писать по другому.

Любой другой пример....
Для чего может понадобиться сохранять указатель на singleton?
Мы не ищем легких путей? Потенциально тонкий момент, нужно не забывать вызывать setInstance().
Зачем?

Я не прикалываюсь, действительно не понимаю... ;)
reich Дата 3.9.2009, 11:14
 
Цитата(BRE @ 3.9.2009, 11:11) *
Цитата(reich @ 3.9.2009, 12:01) *
BRE, я привык так делать, потому, что есть иногда другие нужды в использовании QCoreApplication

Интересно, а какие нужды позволяет сделать твой метод передачи по сравнению с ...
QApplication *app = QCoreApplication::instance();
app->....

или просто

qApp->...


Серьезно, не пойму...


Пердоставленный выше пример никаких. Было бы короче записать твой вариант. Но я же говорю, что привык писать по другому.
BRE Дата 3.9.2009, 11:11
 
Цитата(reich @ 3.9.2009, 12:01) *
BRE, я привык так делать, потому, что есть иногда другие нужды в использовании QCoreApplication

Интересно, а какие нужды позволяет сделать твой метод передачи по сравнению с ...
QApplication *app = QCoreApplication::instance();
app->....

или просто

qApp->...


Серьезно, не пойму...
Какой смысл передавать и хранить указатель, который можно получить в любом месте?
Причем нужно помнить, что нужно вызвать setInstance().
:blink:
reich Дата 3.9.2009, 11:01
  BRE, я привык так делать, потому, что есть иногда другие нужды в использовании QCoreApplication
BRE Дата 3.9.2009, 9:30
 
Цитата(reich @ 3.9.2009, 9:51) *
Бред полнейший. Прочитайте хотябы пол книги по Qt и Вы поймете, как рисовать GUI

:) ;)

Цитата(reich @ 3.9.2009, 9:51) *
Вот простой пример, как этим пользоваться:
//main.cpp
int main( int argc, char *argv[] ){
    ...
    wdg.setInstance( app.instance() );
    ...
}

void Widget::setInstance(QCoreApplication *__app){
    connect( _ui.pushButton, SIGNAL( clicked() ), __app, SLOT( quit() ) );
}

Для чего такие сложные телодвижения для получения указателя на QApplication?
Почитай про:
QCoreApplication * QCoreApplication::instance () [static]
и макрос qApp.
reich Дата 3.9.2009, 8:51
 
Цитата(deex @ 3.9.2009, 7:44) *
кто ж мог подумать что связка Eclipse + QT мешает, а не помогает
обычный С++ я пишу в Эклипсе и мне он очень облегчает жизнь

Бред полнейший. Прочитайте хотябы пол книги по Qt и Вы поймете, как рисовать GUI

Вот простой пример, как этим пользоваться:
//main.cpp
#include <QtGui/QApplication>

#include "widget.h"



int main( int argc, char *argv[] ){
    QApplication app( argc, argv );
    Widget wdg;
    wdg.setInstance( app.instance() );
    wdg.setVisible( true );
    return app.exec();
}

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "ui_widget.h"

class QCoreApplication;

class Widget : public QWidget{

    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

public:
    void setInstance( QCoreApplication *__app );

private:
    Ui::WidgetClass _ui;

};

#endif // WIDGET_H


//widget.cpp
#include "widget.h"

#include <QtCore/QCoreApplication>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    _ui.setupUi(this);
}

Widget::~Widget()
{

}

void Widget::setInstance(QCoreApplication *__app){
    connect( _ui.pushButton, SIGNAL( clicked() ), __app, SLOT( quit() ) );
}
deex Дата 3.9.2009, 7:44
  кто ж мог подумать что связка Eclipse + QT мешает, а не помогает
обычный С++ я пишу в Эклипсе и мне он очень облегчает жизнь
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 23:12