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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: connect сигналы и слоты=(  (Прочитано 13807 раз)
Ker
Гость
« : Август 04, 2009, 20:15 »

Новичок и само собой не понимаю...
В принципе нужно что бы при нажатии кнопки QPushButton выводилась строка в поле QTextEdit.

Код:
QPushButton *pushButton = new QPushButton("Button");
QTextEdit *textEdit = new QTextEdit();
QString str = "TEST";

connect(pushButton, SIGNAL(clicked()), textEdit, SLOT(setPlainText(str)));

Подскажите что не так...?
Записан
spectre71
Гость
« Ответ #1 : Август 04, 2009, 20:24 »

Новичок и само собой не понимаю...
В принципе нужно что бы при нажатии кнопки QPushButton выводилась строка в поле QTextEdit.

Код:
QPushButton *pushButton = new QPushButton("Button");
QTextEdit *textEdit = new QTextEdit();
QString str = "TEST";

connect(pushButton, SIGNAL(clicked()), textEdit, SLOT(setPlainText(str)));

Подскажите что не так...?

Все!
Почитай для начала книжку по QT.
http://torrents.ru/forum/viewtopic.php?t=687311
http://torrents.ru/forum/viewtopic.php?t=597355
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Август 04, 2009, 20:33 »

Откройте документацию.

Цитировать

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )   [static]

...

Note that the signal and slots parameters must not contain any variable names, only the type. E.g. the following would not work and return false:

Код:
         // WRONG
         QObject::connect(scrollBar, SIGNAL(valueChanged(int value)),
                          label, SLOT(setNum(int value)));
Записан
denka
Гость
« Ответ #3 : Август 04, 2009, 21:28 »

То что ты хочешь сделать, делаеться с помощью QSignalMapper
Записан
MoPDoBoPoT
Гость
« Ответ #4 : Август 04, 2009, 21:49 »

То что ты хочешь сделать, делаеться с помощью QSignalMapper
Ты специально хочешь запутать человека? (:
Соглашусь с советом Spectre, необходимо прочитать хотя бы одну книгу по Qt.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Август 05, 2009, 05:35 »

Сколько бы не было написано в Асистенте, но все ошибку совершают с сигналами и слотами (и я тоже на эту граблю наступал). По этому поводу даже в вики написал: Сигналы и слоты (Qt)

И ещё не помешает старое учебное пособие прочитать (то что в 4.5. убрали)
« Последнее редактирование: Август 05, 2009, 05:38 от lit-uriy » Записан

Юра.
Vexator
Гость
« Ответ #6 : Август 05, 2009, 06:58 »

тебе хотят сказать, что передавать переменные таким путем нельзя
такое сработало бы, если бы твоя строка str передавалась бы из сигнала clicked()
Код:
connect(pushButton, SIGNAL(clicked(QString)), textEdit, SLOT(setPlainText(QString)));
но для такого тебе потребуется наследовать свой класс от QPushButton

вообщем читай про слоты подробнее
Записан
sergeyvl12
Гость
« Ответ #7 : Август 20, 2009, 18:21 »

Все!
Почитай для начала книжку по QT.
http://torrents.ru/forum/viewtopic.php?t=687311
http://torrents.ru/forum/viewtopic.php?t=597355
Тебе не кажется что это - универсальный ответ на любой вопрос начинающего?
Я думаю автор уже кое-что читал.
Если кратко, то сигнал и слот должны совпадать по параметрам.
В твоем случае нужно очевидно сделать слот без параметров (на форме), связать его с кнопкой в connect() и из этого слота уже вызывать setPlainText(QString)

« Последнее редактирование: Август 20, 2009, 18:34 от sergeyvl12 » Записан
Rcus
Гость
« Ответ #8 : Август 20, 2009, 18:39 »

Гыгы гыгы Улыбающийся Универсальный ответ грите? Когда у меня были проблемы начинающего с Qt/Embedded что-то никто мне не кинул линков на нужные книги(а как хотелось). А на данный вопрос именно ссылка на документацию является более корректным ответом, поскольку в ней дается не только прямой ответ на вопрос, но и объясняется общий принцип действия и ньюансы которые не укладываются в формат ответа на форуме.
Записан
sergeyvl12
Гость
« Ответ #9 : Август 20, 2009, 19:17 »

Видел я эти книги! Все они начинаются с примеров и нужно немало прочитать вперед и перепробовать немало примеров чтобы что-то мало-мальски начать понимать (тем более что moc немного исковеркал или если хотите "дополнил" C++). А человек очевидно попытался немного переделать один из этих начальных примеров. Не получилось с ходу. Бывает. А вы его опять посылаете изучать те же книги и те же примеры.

Давайте тогда на форуме "Для начинающих" повесим жирными буквами надпись: Форум закрыт, читайте книги! И дело с концом.

Не спорю есть люди которые только столкнутся с проблемой, сразу же бегут на форум. Сам таких не люблю. Но интуиция подсказывает мне что в данном случае это не так.

Извините за оффтоп! Давайте закроем эту дискуссию, в конце концов я немного погорячился и как отвечать на форуме - личное дело каждого.

« Последнее редактирование: Август 20, 2009, 19:25 от sergeyvl12 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Август 20, 2009, 19:41 »

Здравствуйте, Сергей
...
(тем более что moc немного исковеркал или если хотите "дополнил" C++).
...
Не знаю что Вы имеете ввиду. Лично для меня (новичка в Qt) все эти moc и qmake пока больше геморрой чем выгода. Да, это сэкономит мне сотню строк, но для меня это не великая проблема, руками напишу, не переломлюсь Улыбающийся  Но вот торопиться с выводами  по-моему не стоит. Поюзаем, посмотрим, а дальше - жизнь покажет  Улыбающийся
Записан
Новгородец
Гость
« Ответ #11 : Август 20, 2009, 19:58 »

Один из вариантов решения.
А что не так, выше уже написали. 
Но книги все таки надо читать.

Код
C++ (Qt)
// main.cpp
#include <QApplication>
#include "MyDialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyDialog b;
b.show();
return a.exec();
}

Код
C++ (Qt)
// MyDialog.h
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
class QString;
class QTextEdit;
class QPushButton;
class MyDialog : public QDialog
{
Q_OBJECT
public:
MyDialog();
private:
QPushButton *pushButton;
QTextEdit *textEdit;
QString str;
private slots:
void slot();
};
#endif // MYDIALOG_H

Код
C++ (Qt)
// MyDialog.cpp
#include "MyDialog.h"
#include <QtGui>
MyDialog::MyDialog()
{
  pushButton = new QPushButton("Button");
  textEdit = new QTextEdit();
  str = "TEST";
  QHBoxLayout *Layout = new QHBoxLayout(this);
  Layout->addWidget(textEdit);
  Layout->addWidget(pushButton);
  setLayout(Layout);
  connect(pushButton, SIGNAL(clicked()), SLOT(slot()));;
}
 
void MyDialog::slot()
{
textEdit->setPlainText(str);
}

Записан
C010ne1
Гость
« Ответ #12 : Август 10, 2019, 11:25 »

10 лет прошло и у новичков опять вопросы про connect...
Использую Qt Creator 4.8.2. Основан на Qt 5.12.2
Как работает connect я разобрался (вроде бы...) и у меня вопрос скорей про Creator.
Беру пример:
    QPushButton *close = new QPushButton("Выход");
    connect(close,SIGNAL(clicked()),this,SLOT(close()));

Пример рабочий, но когда я ручками пишу эти строчки Creator мне не подсказывает список возможных сигналов и слотов Грустный
И такая проблема во всех моих проектах. Достало уже лазить каждый раз в помощь и смотреть перечень сигналов и слотов в нужном мне каком-то классе. Или лазить копировать из описания своего какого-то класса.
В настройках Creatora ничего не нашел. В интернете у всех на ютубе, когда пишут SIGNAL или SLOT всплывает список сигналов и слотов соответственно, а у меня нет...
Руками писать - частые ошибки (разбирай потом).
Я в печали...
Help me please.
Записан
vbv
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #13 : Август 10, 2019, 12:26 »

Только что обратил внимание Creator 4.9.2.
То-же не подсказывает.
Никогда не обращал внимание. Улыбающийся

Может потому не подсказывает, что пишу на Qt4....
Была замечена проблема подсказок у Creator'a при использовании namespace,
времени разбираться не было и не стал заморачиваться а потом забыл.

Надо попробовать чистый project сгенерить.

Добавлено:
По пробовал:
1. Проблема не в namespaces.
2. Проблема не в версии QT.
Надо будет разобраться.

« Последнее редактирование: Август 10, 2019, 12:38 от vbv » Записан
vbv
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #14 : Август 10, 2019, 12:56 »

Отвечаю: они изменили методику вызова.

https://wiki.qt.io/New_Signal_Slot_Syntax

Старая модель:
connect(
    sender, SIGNAL( valueChanged( QString, QString ) ),
    receiver, SLOT( updateValue( QString ) )
);

Новая модель:

connect(
    sender, &Sender::valueChanged,
    receiver, &Receiver::updateValue
);

И тогда подсказывает.

Или как вариант:
запретить Help > About Plugins > Clang Code Model
« Последнее редактирование: Август 10, 2019, 13:12 от vbv » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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