Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2011, 03:26   #1
Enchance
Пользователь
 
Регистрация: 20.10.2009
Сообщений: 23
По умолчанию [Qt] Как применить сигнал в даной программе?

Здравствуйте.
У меня есть код:

Код:
#include <QtGui>

int main (int argc, char** argv)
{
    QApplication app(argc, argv);

    QWidget w;

    QPixmap pix1;			//pix1 - это картинка "mira.jpg"
    pix1.load("mira.jpg");
    QPixmap pix2;			//pix2 - это картинка "mira2.jpg"
    pix2.load("mira2.jpg");

    QLabel xxl;				
    xxl.setScaledContents ( true );
    xxl.resize(50,50);
    xxl.setPixmap(pix1);		//здесь у нас выбрана pix1
    
    QPushButton cmd1("Photo 1", &w);
    QPushButton cmd2("Photo 2", &w);

    QVBoxLayout * verticalLayout = new QVBoxLayout( &w );
    verticalLayout->addWidget( &cmd1 );      //button1
    verticalLayout->addWidget( &cmd2 );      //button2
    verticalLayout->addWidget( &xxl );       //image
    w.show();

    return app.exec();
}
Нужно, чтобы при нажатии на кнопку "cmd1" выводилось изображение pix1,
а при нажатии на кнопку "cmd2" выводилось изображение pix2.

Как реализовать? У меня что бы я не делал, как бы я не изворачивался, изображение не меняется. Про сигналы в общих чертах знаю, но не знаю, как их здесь применить.
Enchance вне форума Ответить с цитированием
Старый 08.03.2011, 03:31   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Нужно иметь имеющий в родстве QObject класс и там сделать слоты openPix1() и openPix2(), дабы подсоединить к этим слотам сигналы clicked() соответствующих кнопок.

И почитай Шлее...

Примерно так:
1) Наследуем от QWidget класс
2) На нём размещаем QLabel и 2 кнопки
3) Делаем там 2 слота, которые меняли бы картинку в QLabel
4) Подсоединяем к этим слотам сигналы clicked() кнопок

И никогда не делай так:
Цитата:
QWidget w;
Всё, что имеет в родстве QObject, должно создаваться динамически (через new).
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 08.03.2011 в 03:39.
Obey-Kun вне форума Ответить с цитированием
Старый 08.03.2011, 03:56   #3
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
Всё, что имеет в родстве QObject, должно создаваться динамически (через new).
почему это?
даже открыть примеры - предостаточно где создают на стеке объекты из иерархии QObject
alex_x_x вне форума Ответить с цитированием
Старый 08.03.2011, 04:07   #4
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
даже открыть примеры - предостаточно где создают на стеке объекты из иерархии QObject
Там таких мест мало, а делают в ней так только для упрощения примера.

А вот входящее в http://doc.trolltech.com/4.7/shared....ist-of-classes уже желательно делать в стэке.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 08.03.2011 в 04:10.
Obey-Kun вне форума Ответить с цитированием
Старый 08.03.2011, 12:24   #5
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

не вижу там ни слова про создание в куче
к половине классов примеры с созданием на стеке
alex_x_x вне форума Ответить с цитированием
Старый 08.03.2011, 15:54   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Вот отсюда следует то, что создавать их в стеке опасно: http://doc.qt.nokia.com/4.7/objecttrees.html (см. про порядок деструкторов).

Тут также упомянуто, что лучше создавать объекты динамически: http://doc.qt.nokia.com/4.7/gettingstartedqt.html
Цитата:
As a rule, you should always allocate QObjects on the heap and never copy them.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 08.03.2011 в 15:57.
Obey-Kun вне форума Ответить с цитированием
Старый 08.03.2011, 16:05   #7
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

В Qt мне нравится то, что при уничтожении родителя, все дочерние объекты, в которые была передана ссылка на родителя, уничтожаются автоматически. Это классно . А если по делу. Enchance посмотри книгу Бланшета или Шлее, там это все дело объясняется.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как применить атрибут скрытый файлу? Hichigo Общие вопросы C/C++ 1 22.07.2010 23:05
Как применить поправочный коэфф. в ранжировке? NiYa Microsoft Office Excel 2 03.05.2010 01:00
Как применить изменение в реестре? KWN, lnc Общие вопросы Delphi 2 11.05.2009 00:10
Не знаю, как применить СУММЕСЛИ Katherina_Koval Microsoft Office Excel 2 30.07.2008 13:56