0 / 0 / 0
Регистрация: 03.09.2018
Сообщений: 48
|
|
1 | |
c++ , QT Creator, слоты и сигналы23.03.2020, 13:44. Показов 2215. Ответов 7
0
|
23.03.2020, 13:44 | |
Ответы с готовыми решениями:
7
Сигналы\слоты Сигналы и слоты Сигналы и слоты Слоты и сигналы в QT |
фрилансер
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 | |||||
Добавлено через 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,
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 как решение
Решение
Сигнал определяете в MyWindow, а при подключении почему-то указываете
Clicked(QString) объекта button1 со слотом TextDialo(QString) . Вот только нет такого сигнала у объекта типа QPushButton, выше об этом было сказано. Ситуация усугубляется применением string-based синтаксиса connect. В процессе выполнения программы получите предупреждение на консоль, что-то вроде "QObject::connect: No such signal QPushButton::Clicked(QString)". Никаких ошибок, просто по нажатию на кнопку не будет ничего происходить."Кусок кода" является обычным наследованием, примененным как способ получить новую функциональность в наследнике. В контексте темы - способ определить класс-наследник обычных кнопок, но вдобавок умеющий эмитировать параметризованный строкой сигнал. Скорее всего, в данной ситуации можно обойтись и вовсе без наследования. Чтобы не плодить лишние сущности, можно задать обработку предопределенного сигнала clicked() всех кнопок одним слотом, который будет определять источник сигнала и получать доступ к его методам/свойствам с помощью QObject *QObject::sender() const .Базовый язык не знаете, фундаментальные принципы фреймворка - тоже, документацию не читали. Начните с хорошей книги по "плюсам", по мере освоения, когда наследование перестанет казаться "куском кода", переходите к изучению Qt. Литературы по Qt тоже достаточно. Если вы пытались реализовать что-то вроде простого калькулятора, то в комплект поставки Qt входят и примеры проектов калькулятора разной степени сложности. Что мешает изучить код?
1
|
24.03.2020, 00:45 | |
24.03.2020, 00:45 | |
Помогаю со студенческими работами здесь
8
Сигналы и слоты Сигналы и Слоты Слоты и сигналы Qt Сигналы и слоты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |