Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
1

c++ , QT Creator, слоты и сигналы

23.03.2020, 13:44. Показов 2215. Ответов 7

Author24 — интернет-сервис помощи студентам
c++ , QT Creator, слоты и сигналы


c++ , QT Creator, слоты и сигналы


c++ , QT Creator, слоты и сигналы


В чем ошибки ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2020, 13:44
Ответы с готовыми решениями:

Сигналы\слоты
что можно сделать со сл. кодом ...

Сигналы и слоты
Начал изучать Qt и возникла такая проблема. Как я понял сигнал можно соединить только с методом,...

Сигналы и слоты
Здравствуйте! Не могу разобраться в сигналах и слотах. Сначала приведу код: main.cpp ...

Слоты и сигналы в QT
пишу код используя статью собственно, код класса Downloader получился один в один такой же, в...

7
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,345
23.03.2020, 15:10 2
Razor0109, код приведи, но не скринами
0
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
23.03.2020, 15:22  [ТС] 3
main.cpp
#include "MyWindow.h"
#include <QApplication>


int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//QWidget *window=new QWidget ;
MyWindow *window=new MyWindow(0);
window->show();



return a.exec();
}
///////
MyWindow.h
#ifndef MYWINDOW_H
#define MYWINDOW_H

#include <QPushButton>
#include <QApplication>
#include <QFormLayout>
#include <QLineEdit>
#include <QDialog>
#include <QWidget>



class MyWindow: public QDialog
{
Q_OBJECT

public:
MyWindow(QWidget *parent);
private:
QString data;
QPushButton *button1;
QPushButton *button2;
QPushButton *button3;
QPushButton *button4;
QPushButton *button5;
QPushButton *button6;
QPushButton *button7;
QPushButton *button8;
QPushButton *button9;
QPushButton *button10;
QPushButton *button11;
QPushButton *button12;
QLineEdit *ps;
private slots:
void TextDialo(QString str);

signals:
void Clicked(QString str);


};

#endif // MYWINDOW_H
///////
MyWindow.cpp
#include <MyWindow.h>


MyWindow::MyWindow(QWidget *parent): QDialog(parent)
{
ps=new QLineEdit();
data="hello";

button1 =new QPushButton ("1");
button2 =new QPushButton("2");
button3 =new QPushButton("3");
button4 =new QPushButton("4");
button5 =new QPushButton("5");
button6 =new QPushButton("6");
button7 =new QPushButton("7");
button8 =new QPushButton("8");
button9 =new QPushButton("9");
button10 =new QPushButton("+");
button11 =new QPushButton("-");
button12 =new QPushButton("=");
QLineEdit *ps=new QLineEdit();
QFormLayout *pr=new QFormLayout();

pr->addWidget(ps);
pr->addWidget(button1);
pr->addWidget(button2);
pr->addWidget(button3);
pr->addWidget(button4);
pr->addWidget(button5);
pr->addWidget(button6);
pr->addWidget(button7);
pr->addWidget(button8);
pr->addWidget(button9);
pr->addWidget(button10);
pr->addWidget(button11);
pr->addWidget(button12);

setLayout(pr);

connect(button1,SIGNAL(Clicked(QString)),this,SLOT(TextDialo(QString)));
}

void MyWindow::TextDialo(QString str)
{
data=str;
}
void MyWindow::Clicked(QString )
{

emit Clicked("1");

}
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,345
23.03.2020, 15:29 4
C++ (Qt)
1
2
3
4
5
6
void MyWindow::Clicked(QString )
{
 
emit Clicked("1");
 
}
это удали

Добавлено через 2 минуты
ну и у QPushButton - нет такого сигнала "Clicked(QString)"
0
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
23.03.2020, 15:58  [ТС] 5
у QPushButton - нет такого сигнала "Clicked(QString)", поэтому я и создал свой сигнал который передает строку,
void MyWindow::Clicked(QString )
{

emit Clicked("1");

}
0
2528 / 1247 / 461
Регистрация: 08.11.2016
Сообщений: 3,428
23.03.2020, 16:25 6
Razor0109,

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
class MyButton : public QPushButton
{
    Q_OOBJECT
public:
    MyButton(QString btnName, QWidget *p = Q_NULLPTR) : QPushButton(btnName, p) { 
        this->setPropery("name", btnName); 
        QObject::connect(this, &QAbstractButton::clicked, this, &MyButton::slotProxy); }
private slots:
    void slotProxy(void) { emit(signalClicked(this->property("name").toString()); }
signals:
    void signalClicked(QString);
0
0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
23.03.2020, 21:08  [ТС] 7
Мне этот кусок кода как новичку, не о чём не говорит
0
683 / 458 / 160
Регистрация: 01.10.2015
Сообщений: 1,264
24.03.2020, 00:45 8
Лучший ответ Сообщение было отмечено Razor0109 как решение

Решение

Цитата Сообщение от Razor0109 Посмотреть сообщение
у QPushButton - нет такого сигнала "Clicked(QString)", поэтому я и создал свой сигнал
Сигнал определяете в MyWindow, а при подключении почему-то указываете
C++ (Qt)
1
connect(button1,SIGNAL(Clicked(QString)),this,SLOT(TextDialo(QString)));
Эта строка предписывает соединить сигнал Clicked(QString) объекта button1 со слотом TextDialo(QString). Вот только нет такого сигнала у объекта типа QPushButton, выше об этом было сказано. Ситуация усугубляется применением string-based синтаксиса connect. В процессе выполнения программы получите предупреждение на консоль, что-то вроде "QObject::connect: No such signal QPushButton::Clicked(QString)". Никаких ошибок, просто по нажатию на кнопку не будет ничего происходить.

Цитата Сообщение от Razor0109 Посмотреть сообщение
Мне этот кусок кода как новичку
"Кусок кода" является обычным наследованием, примененным как способ получить новую функциональность в наследнике. В контексте темы - способ определить класс-наследник обычных кнопок, но вдобавок умеющий эмитировать параметризованный строкой сигнал. Скорее всего, в данной ситуации можно обойтись и вовсе без наследования. Чтобы не плодить лишние сущности, можно задать обработку предопределенного сигнала clicked() всех кнопок одним слотом, который будет определять источник сигнала и получать доступ к его методам/свойствам с помощью QObject *QObject::sender() const.

Базовый язык не знаете, фундаментальные принципы фреймворка - тоже, документацию не читали. Начните с хорошей книги по "плюсам", по мере освоения, когда наследование перестанет казаться "куском кода", переходите к изучению Qt. Литературы по Qt тоже достаточно. Если вы пытались реализовать что-то вроде простого калькулятора, то в комплект поставки Qt входят и примеры проектов калькулятора разной степени сложности. Что мешает изучить код?
1
24.03.2020, 00:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2020, 00:45
Помогаю со студенческими работами здесь

Сигналы и слоты
Пытаюсь законектить сигнал со слотом. Есть класс: server.h class server { public: ...

Сигналы и Слоты
При вызове функции SendSignal(); образуется сигнал, который должен пораждать вызову слота и на экра...

Слоты и сигналы Qt
Может мне кто-нибудь подскажет или я не замечаю чего-то очевидного. В общем перейду к описанию...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru