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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как поменять текст в lineEdit кликом кнопки pushButton  (Прочитано 9359 раз)
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);
}
 
« Последнее редактирование: Октябрь 09, 2013, 17:11 от System Fault » Записан
mutineer
Гость
« Ответ #1 : Октябрь 09, 2013, 17:11 »

Не вижу тут попыток изменить текст нажатием на кнопку

connect можно написать например в конструкторе Widget
Записан
System Fault
Гость
« Ответ #2 : Октябрь 09, 2013, 17:15 »

Не вижу тут попыток изменить текст нажатием на кнопку
Я тоже не вижу, потому что его нет. Я не знаю как его писать.

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

Не работает:
Код
C++ (Qt)
connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(LineEdit));
Записан
mutineer
Гость
« Ответ #3 : Октябрь 09, 2013, 17:16 »

мои попытки изменить текст в строке не увенчались успехом

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

Код
C++ (Qt)
connect(ui->pushButton, SIGNAL(clicked()), ui->lineEdit, SLOT(LineEdit));
 
Этот код не работает, потому что не соответствует документации. Ты примеры в доке смотрел?
Записан
System Fault
Гость
« Ответ #4 : Октябрь 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")));
Записан
mutineer
Гость
« Ответ #5 : Октябрь 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() в примерах и у тебя
Записан
System Fault
Гость
« Ответ #6 : Октябрь 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())); // работает
 
Записан
mutineer
Гость
« Ответ #7 : Октябрь 09, 2013, 17:59 »

Отличается, в SLOT() надо указывать не значение параметра слота, а его тип.
Где вы все находите такую запись? В доке же явно в примере написано SLOT(setNum(int))
Записан
System Fault
Гость
« Ответ #8 : Октябрь 09, 2013, 18:03 »

не значение параметра слота, а его тип
Вот так  Шокированный Непонимающий )))
Код
C++ (Qt)
connect(ui->pushButton,   SIGNAL(clicked()), ui->lineEdit, SLOT(setText(QString)));
Записан
mutineer
Гость
« Ответ #9 : Октябрь 09, 2013, 18:06 »

Синтаксически так, но соединения не будет, потому что у сигнала нет параметра, который он бы в слот передал.
Чтобы соединение было успешным у слота должно быть не больше параметров, чем у сигнала. Ну и по типам они должны совпадать
Записан
System Fault
Гость
« Ответ #10 : Октябрь 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("ТЕКСТ");
}
 
Записан
mutineer
Гость
« Ответ #11 : Октябрь 09, 2013, 18:24 »

А вот так не работает потому что у QLineEdit нету слота button_click(), а он есть у this
Так и будешь продолжать брут-форс?))
Записан
System Fault
Гость
« Ответ #12 : Октябрь 09, 2013, 19:09 »

Теперь вроде работает  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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