crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Ответ на нажатие кнопки, сигналы и слоты?
AD
  опции профиля:
сообщение 11.4.2008, 13:34
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Для того, чтобы поймать реакцию на нажатие кнопки надо использовать сигналы и слоты? Можно маленький примерчик.

ПыСы Простите за такие глупые вопросы, просто что-то не получается поймать реакцию на нажатие кнопки OK, Cancel, для выхода из второстепенного диалогового окна в главное приложение!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.4.2008, 13:38
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Угу, сигналы и слоты.
Вот пример: Урок 2 - Кнопка выход
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.4.2008, 13:52
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(ViGOur @ 11.4.2008, 14:38) *
Угу, сигналы и слоты.
Вот пример: Урок 2 - Кнопка выход

сработало, спасибо!!!! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.4.2008, 18:04
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Вопрос посложнее: есть файл, из которого считываются нужные цвета кнопок. Затем заполняется в цикле массив кнопок. Как мне узнать на какую кнопку нажали? С помощью какого сигнала или слота это определить?

Заполнение:
void QDialDistParam::setupDialog(QWidget* dialog)
{
for(int i = tab_mas[tab_index].index + 1; i<dist_vec -> size(); ++i)
        {
            string type = (*dist_vec)[i].getType().toStdString();
            if(type != "Tab")
            {
                string param_name_str = (*dist_vec)[i].getPrName().toStdString();
                QString param_name = (*dist_vec)[i].getPrName();
                if(type == "CheckBox")
                {
                    //
                }
                else if(type == "PushButton")
                {
                    param_name.insert(0, btn_inset);
                    params[param_index].btnColor = new QPushButton(dist_tabs[k]);
                    params[param_index].btnColor -> setObjectName(param_name);
                    params[param_index].btnColor -> setGeometry(btn_x, y, btn_width, btn_height);

                    QString style_sheet = "* { background-color: ";
                    style_sheet += (*dist_vec)[i].getColor();
                    style_sheet += " }";
                    params[param_index].btnColor -> setStyleSheet(style_sheet);
                    connect(params[param_index].btnColor, SIGNAL(pressed()),
                                this, SLOT(btnColorClick())); //// жирным выделен важный кусок кода, на который и следует обратить внимание
                    ++param_index;
                    param_count = param_index;
                    y += 30;
                }
            }
            else break;
        }
        distGraphics -> addTab(dist_tabs[k], QString());
}

Функция узнавания нажатой кнопки:
 
void QDialDistParam::btnColorClick()
{
    QColor color = QColorDialog::getColor();
    QString color_name = color.name();
    for(int k=0; k<param_count; ++k)
        if(btnSave -> isChecked()) /// ????????????????
        {
            QString style_sheet = "* { background-color: ";
            style_sheet += color_name;
            style_sheet += " }";
            params[k].btnColor ->setStyleSheet(style_sheet);
            break;
        }
}


вот важный элемент в коде заполнения:
connect(params[param_index].btnColor, SIGNAL(pressed()),
this, SLOT(btnColorClick()));
//// жирным выделен важный кусок кода, на который и следует обратить внимание

Сообщение отредактировал AD - 11.4.2008, 18:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.4.2008, 18:54
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


глянь пример MDI, там, используется QSignalMapper, т.к. сигналы triggered() передают толко булевые значения, а впрограмме требуется узнать виджет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.4.2008, 19:04
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 11.4.2008, 19:54) *
глянь пример MDI, там, используется QSignalMapper, т.к. сигналы triggered() передают толко булевые значения, а впрограмме требуется узнать виджет.

Спасибо. Попробую!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.4.2008, 19:08
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


тут у Шлее нашел еще, в его MDI, такой слот:
void MDIProgram::slotChangeWindowTitle(const QString& str)
{
    qobject_cast<DocWindow*>(sender())->setWindowTitle(str);
}

может это проще, отправителя узнать можно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.4.2008, 19:10
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


хе-хе, смотри пример Калкулятор, там слот один несколько кнопок обслуживает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.4.2008, 19:54
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 11.4.2008, 20:10) *
хе-хе, смотри пример Калкулятор, там слот один несколько кнопок обслуживает.

Вообще супер. qobject_cast<>() - рулит. Очень удобно, практично и быстро реализовывается!!!

Спасибо! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 10.12.2019, 22:44