Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа из сигналами Qt, Вопрос от чайника 
:(
    Опции темы
Enchance
Дата 16.2.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.10.2009

Репутация: нет
Всего: нет



Добрый день!
Начинаю изучать Qt. Уже несколько дней сижу, читаю Макса Шлее, и все равно не могу понять, что к чему. Возможно, это из-за того, что я только в общих чертах знаком с ООП (с++ знаю только из двух семестров обучения в университете). Помогите с простейшей программой, чтобы я смог хоть от чего-то оттолкнуться.
Нужно сделать приложение, в котором будут две pushButton кнопки и одна область QGraphicsViev. При нажатии на одну кнопку в области QGraphicsViev выводится первая картинка, а при нажатии на вторую - вторая. Как накидать кнопок на окно я понял, а вот как заставить кнопки выполнять что-то осмысленное - нет. Я так понимаю, здесь нужно использовать сигналы и слоты, но как это делать, как присобачить сигналы к кнопкам?
Буду признателен, если дадите почитать описание, где это описано попроще.
PM MAIL   Вверх
Веталька
Дата 16.2.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 2.11.2008

Репутация: нет
Всего: 6



connect(YouButton,SIGNAL(clicked()),this,SLOT(showpicture()));
ну и showpicture не забудь описать (publick slots)

Это сообщение отредактировал(а) Веталька - 16.2.2011, 20:43


--------------------
Ради зачета студент идет на все, даже на лекции........................ 
PM MAIL ICQ   Вверх
kefir01
Дата 16.2.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



нажми правой кнопкой мыши на кнопке -> Перейти к слоту...

или в конструкторе родительского виджета (или где угодно) - функцией connect, описанной подробно в справке
PM MAIL   Вверх
Enchance
Дата 17.2.2011, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.10.2009

Репутация: нет
Всего: нет



Нашел пример из той же книги, описывающий принцип работы сигналов. Программа состоит из файлов "main.cpp", "counter.cpp", "counter.h", есть одно окно с цифрой, и второе с кнопкой "ADD". Понял суть работы сигналов, но не знаю, как изменить эту программу под мои нужды. Для начала обьясните хоть, как сделать, чтобы цифра и кнопка находились в одном окне? И как вставить область, в которой будут меняющиеся картинки?

Документация только на инглише, а значит трудночитабельна для меня, к сожалению(

main.cpp
Код

#include <QtGui>
#include "Counter.h"

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

    QLabel      lbl("0");
    QPushButton cmd("ADD");
    Counter     counter;

    lbl.show();
    cmd.show();

    QObject::connect(&cmd, SIGNAL(clicked()), 
                     &counter, SLOT(slotInc())
                    );

    QObject::connect(&counter, SIGNAL(counterChanged(int)),
                     &lbl, SLOT(setNum(int))
                    );

    QObject::connect(&counter, SIGNAL(goodbye()), 
                     &app, SLOT(quit())
                    );

    return app.exec();
}


counter.h
Код

#ifndef _Counter_h_
#define _Counter_h_

#include <QObject>

// ======================
class Counter : public QObject {
    Q_OBJECT
private:
    int m_nValue;

public:
    Counter();

public slots:
    void slotInc();

signals:
    void goodbye       (   );
    void counterChanged(int);
};
#endif  //_Counter_h_


counter.cpp
Код

#include "Counter.h"

// ----------------------------------------------------------------------
Counter::Counter() : QObject()
                   , m_nValue(0)
{
}

// ----------------------------------------------------------------------
void Counter::slotInc()
{
    emit counterChanged(++m_nValue);

    if (m_nValue == 5) {
        emit goodbye();
    }
}

PM MAIL   Вверх
borisbn
Дата 17.2.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(Enchance @  17.2.2011,  02:58 Найти цитируемый пост)
как сделать, чтобы цифра и кнопка находились в одном окне?

Код

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

     QWidget w;

    QLabel      lbl("0", &w);
    QPushButton cmd("ADD", &w);
    Counter     counter;

//    lbl.show();
//    cmd.show();

     QVBoxLayout * verticalLayout = new QVBoxLayout( &w );
     verticalLayout->addWidget( &lbl );
     verticalLayout->addWidget( &cmd );

     w.show();
...


Цитата(Enchance @  17.2.2011,  02:58 Найти цитируемый пост)
И как вставить область, в которой будут меняющиеся картинки?

QLabel::setPixmap ?

Цитата(Enchance @  17.2.2011,  02:58 Найти цитируемый пост)
Документация только на инглише

Программист обязан знать инглиш. Учи, учи и исчо раз учи (С) сам знаешь кто smile

Это сообщение отредактировал(а) borisbn - 17.2.2011, 09:49


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Enchance
Дата 18.2.2011, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.10.2009

Репутация: нет
Всего: нет



Цитата

QLabel::setPixmap


Спасибо большое!
А как сделать, чтобы независимо от ширины исходного изображения, то, что выводит программа было, скажем, 300 пикс.? (я нашел, как обрезать "лишнюю" часть, а мне нужно, чтобы изображение сжималось/растягивалось)

Это сообщение отредактировал(а) Enchance - 18.2.2011, 00:36
PM MAIL   Вверх
borisbn
Дата 18.2.2011, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(Enchance @  18.2.2011,  00:22 Найти цитируемый пост)
как сделать, чтобы независимо от ширины исходного изображения

Код

QLabel::setScaledContents( true );



Enchance, а ты в справку (Qt Assistant) заглядываешь ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.