Russian Qt Forum

Qt => Вопросы новичков => Тема начата: System Fault от Октябрь 09, 2013, 17:09



Название: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: System Fault от Октябрь 09, 2013, 17:09
Привет. Собственно сабж. Есть кнопка ui->pushButton и текстовая строка ui->lineEdit, мои попытки изменить текст в строке не увенчались успехом. Подскажите где и как надо писать connect()

Вот мой код:

Код
C++ (Qt)
// main.cpp
#include "widget.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   Widget w;
   w.show();
 
   w.LineEdit("Текст");
 
   return a.exec();
}


Код
C++ (Qt)
// widget.h
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QString>
 
namespace Ui { class Widget; }
 
class Widget : public QWidget
{
   Q_OBJECT
 
   public:
       Ui::Widget *ui;
 
       explicit Widget(QWidget *parent = 0);
       ~Widget();
 
       void LineEdit(QString);
};
 
#endif // WIDGET_H
 

Код
C++ (Qt)
// widget.cpp
#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
   ui->setupUi(this);
}
 
Widget::~Widget()
{
   delete ui;
}
 
void Widget::LineEdit(QString text)
{
   ui->lineEdit->setText(text);
}
 


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: mutineer от Октябрь 09, 2013, 17:11
Не вижу тут попыток изменить текст нажатием на кнопку

connect можно написать например в конструкторе Widget


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: System Fault от Октябрь 09, 2013, 17:15
Не вижу тут попыток изменить текст нажатием на кнопку
Я тоже не вижу, потому что его нет. Я не знаю как его писать.

connect можно написать например в конструкторе Widget

Не работает:
Код
C++ (Qt)
connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(LineEdit));


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: mutineer от Октябрь 09, 2013, 17:16
мои попытки изменить текст в строке не увенчались успехом

Подразумевается что они были...

Код
C++ (Qt)
connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(LineEdit));
 
Этот код не работает, потому что не соответствует документации. Ты примеры в доке смотрел?


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: System Fault от Октябрь 09, 2013, 17:23
Код
C++ (Qt)
connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(LineEdit));
 
Этот код не работает, потому что не соответствует документации. Ты примеры в доке смотрел?

Да.

вот так тоже не работает:
Код
C++ (Qt)
connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(ui->lineEdit->setText("7890")));


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: mutineer от Октябрь 09, 2013, 17:24
вот так тоже не работает:
Код
C++ (Qt)
connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(ui->lineEdit->setText("7890")));

Это ни разу не похоже на примеры, приведенные в доке. http://doc.qt.digia.com/4.7/qobject.html#connect

Посмотри и подумай чем отличается содержимое SLOT() в примерах и у тебя


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: System Fault от Октябрь 09, 2013, 17:57
Посмотри и подумай чем отличается содержимое SLOT() в примерах и у тебя
Практически ничем.

Вторая кнопка для очистки строки работает, но мало чем отличается от первой:
Код
C++ (Qt)
   connect(ui->pushButton,   SIGNAL(clicked()), ui->lineEdit, SLOT(setText("Текст"))); // не работает
   connect(ui->pushButton_2, SIGNAL(clicked()), ui->lineEdit, SLOT(clear())); // работает
 


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: mutineer от Октябрь 09, 2013, 17:59
Отличается, в SLOT() надо указывать не значение параметра слота, а его тип.
Где вы все находите такую запись? В доке же явно в примере написано SLOT(setNum(int))


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: System Fault от Октябрь 09, 2013, 18:03
не значение параметра слота, а его тип
Вот так  :o ??? )))
Код
C++ (Qt)
connect(ui->pushButton,   SIGNAL(clicked()), ui->lineEdit, SLOT(setText(QString)));


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: mutineer от Октябрь 09, 2013, 18:06
Синтаксически так, но соединения не будет, потому что у сигнала нет параметра, который он бы в слот передал.
Чтобы соединение было успешным у слота должно быть не больше параметров, чем у сигнала. Ну и по типам они должны совпадать


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: System Fault от Октябрь 09, 2013, 18:22
Синтаксически так, но соединения не будет, потому что у сигнала нет параметра, который он бы в слот передал.
Чтобы соединение было успешным у слота должно быть не больше параметров, чем у сигнала. Ну и по типам они должны совпадать

А вот так почему не работает, здесь ведь все правильно?
Код
C++ (Qt)
#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
   ui->setupUi(this);
 
   connect(ui->pushButton,   SIGNAL(clicked()), ui->lineEdit, SLOT(button_click()));
   connect(ui->pushButton_2, SIGNAL(clicked()), ui->lineEdit, SLOT(clear()));
}
 
void Widget::button_click()
{
   ui->lineEdit->setText("ТЕКСТ");
}
 


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: mutineer от Октябрь 09, 2013, 18:24
А вот так не работает потому что у QLineEdit нету слота button_click(), а он есть у this
Так и будешь продолжать брут-форс?))


Название: Re: Как поменять текст в lineEdit кликом кнопки pushButton
Отправлено: System Fault от Октябрь 09, 2013, 19:09
Теперь вроде работает  :)