Russian Qt Forum
Ноябрь 25, 2024, 09:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QObject::connect: No such slot QTextEdit::append("Work!") in ../simply/main.cpp:  (Прочитано 3133 раз)
Павелъ
Гость
« : Сентябрь 12, 2015, 19:43 »

Доброго времени суток. Почему у меня коннект не создаётся.
Я хочу по нажатию на кнопку, чтобы текст добавлялся в текстовое поле.
А вместо этого ничего не происходит и вываливается вот это:
Код:
QObject::connect: No such slot QTextEdit::append("Work!") in ../simply/main.cpp:37

Вот сам код:

Код:
#include <QApplication>
#include <QTextEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc,char ** argv)
{

    QApplication app(argc,argv);


    QTextEdit *txt = new QTextEdit;
    QPushButton *btn = new QPushButton("Нажми на меня");
    QVBoxLayout *vl = new QVBoxLayout;
    QVBoxLayout *lbtn = new QVBoxLayout;
    vl->addWidget(txt);
    lbtn->addWidget(btn);

    vl->addLayout(lbtn);
    lbtn->setAlignment(Qt::AlignCenter);

    btn->setFixedWidth(100);




    QWidget wgt;

    wgt.setLayout(vl);


    wgt.show();



QObject::connect(btn,SIGNAL(clicked(bool)),txt,SLOT(append("Work!")));

    return app.exec();
}

Что я делаю не так?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Сентябрь 12, 2015, 19:48 »

Потому-что в connect передается тип значений, а не сами значения. Для передачи самих значений в connect можно воспользоваться лябмдами.

В вашем случаи, можно в слоте передать функцию, в которой и будет вызываться append
Записан

Павелъ
Гость
« Ответ #2 : Сентябрь 12, 2015, 19:56 »

Потому-что в connect передается тип значений, а не сами значения. Для передачи самих значений в connect можно воспользоваться лябмдами.

В вашем случаи, можно в слоте передать функцию, в которой и будет вызываться append

А как это сделать. Такой вариант не прокатывает.

Код:
void my_append(QTextEdit *txt, QString str)
{
    txt->append(str);
}

Код:
QObject::connect(btn,SIGNAL(clicked(bool)),SLOT(my_append(txt,"Work!")));
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Сентябрь 12, 2015, 22:51 »

Да нет же, типы параметров сигнала и слота, и их количество должно в connect совпадать.
И слот -- это метод наследника QObject, находящийся в группе slots

Минимально рабочий вариант:
Код
C++ (Qt)
#include <QWidget>
#include <QPushButton>
#include <QTextEdit>
#include <QVBoxLayout>
 
class Manager: public QWidget
{
   Q_OBJECT
 
   public:
       Manager() {
         QVBoxLayout * layout = new QVBoxLayout();
         layout->addWidget(&te);
         layout->addWidget(&pb);
         setLayout(layout);
 
         connect(&pb, SIGNAL(clicked()), this, SLOT(append()));
       }
 
   private:
       QTextEdit te;
       QPushButton pb;
 
   public slots:
       void append() {
           te.append("bla-bla");
       }
};
 
 
Записан

Павелъ
Гость
« Ответ #4 : Сентябрь 14, 2015, 16:48 »

Да нет же, типы параметров сигнала и слота, и их количество должно в connect совпадать.
И слот -- это метод наследника QObject, находящийся в группе slots


Спасибо, работает!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.111 секунд. Запросов: 23.