Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: QT: простая программа, сигналы и слоты.  (Прочитано 11573 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« : 20-05-2015 13:52 » 

Будьте здоровы!

Пытаюсь разбираться с QT.
Вот такая программка:
Код: (C++ (Qt))
#include <QApplication>
#include <QtWidgets>
#include <QtGui>
#include <QtCore>

void kuku(QLabel *lbl);


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget *window = new QWidget;

    window->setWindowTitle("Identification");
    QGridLayout *layout = new QGridLayout;
    QLabel *lblName = new QLabel("Name: ");
    QLabel *lblPass = new QLabel("Password: ");
    QLineEdit *txtName = new QLineEdit;
    QLineEdit *txtPass = new QLineEdit;
    QLabel *lblRes = new QLabel("Result");
    layout->addWidget(lblName,0,0);
    layout->addWidget(txtName,0,1);
    layout->addWidget(lblPass,1,0);
    layout->addWidget(txtPass,1,1);
    layout->addWidget(lblRes,2,0);
    QPushButton *btnOK = new QPushButton("OK");
    QPushButton *btnClose = new QPushButton("Cancel");
    QObject::connect(btnClose,SIGNAL(clicked()),&app,SLOT(quit()));
    QObject::connect(btnOK,SIGNAL(clicked()),&app,SLOT(kuku(lblRes)));  
    layout->addWidget(btnOK,3,0,1,2);
    layout->addWidget(btnClose,4,0,1,2);


    window->setLayout(layout);
    window->show();
    return app.exec();
}

void kuku(QLabel *lbl)
{
   lbl->setText("kuku");
}

Почему при нажатии кнопки ОК не меняется надпись lblRes?
Что  не так ?
« Последнее редактирование: 22-05-2015 08:11 от Джон » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-05-2015 17:19 » new

Код: (C++ (Qt))
    QObject::connect(btnOK,SIGNAL(clicked()),&app,SLOT(kuku(lblRes)));  

И это скомпилируется?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #2 : 21-05-2015 07:25 » 

Да
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 21-05-2015 10:00 » 

Да-с, позабыл уже Qt...

kuku() у тебя просто функция? В этом и проблема. Читай внимательно доки!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #4 : 22-05-2015 08:27 » 

kuku() нужно описать .как слот - я не знаю как.
Если с помощью делать Qt Designer, то получается.
А как вручную это прописать?
Все примеры, которые нашла в инете, пока не помогли.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #5 : 22-05-2015 08:50 » 

kuku() нужно описать .как слот - я не знаю как.
Прошу прощения, что вмешиваюсь, но kuku() должна быть в каком-то классе, и иметь права доступа "public slots:"
Записан
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #6 : 22-05-2015 09:33 » 

darkelf, Очень даже хорошо, что вмешиваетесь.
Да, я это понимаю, те видела в примерах.
Не понимаю в каком классе.

Всё порядку:
1.создала пустой проект с пом. creator
2. добавила main.cpp - текст приведён выше (взяла пример из инета -там использовался только стандартный quit() - для Cancel)
3. пыталась прибавить от себя реакцию на нажатие ОК - изменение надписи лейбла.

Понимаю, что в main.h надо описать класс , где будет
Q_OBJECT
  public slots:
        void kuku

Какой класс? Наследник виджета? диалога? или ...?

Наверное, это какой-то простой вопрос, который вам очевиден, а я несколько дней только начала с qt разбираться.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #7 : 22-05-2015 09:57 » 

можно попробовать что-то типа:
Код:
class MyClass : public QObject
{
    Q_OBJECT
  public slots:
        void kuku(QLabel *lbl);
};
а затем, где надо подставить уже объект и слот куда надо (в connect())
Сорри, у меня сейчас нет Qt, так-что проверить моё предложение не могу.
Записан
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #8 : 23-05-2015 07:52 » 

Пока не получилось.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines