crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> не могу получить текст из QLineEdit, найдите ошибку...
xolvo
  опции профиля:
сообщение 25.8.2008, 16:31
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 25.8.2008
Пользователь №: 274

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я новичек в qt.

Сегодня взялся тестировать QLineEdit класс. Почти написал то, что хотел, но работает это все не так как хочу я. А я хочу, чтобы пользователь ввел имя, а ему в ответ на это появилось окно с приветствием "Hello, %username%."  Но этого не происходит.

вот исходник:
// main.cpp
#include <QtGui>
#include <QMessageBox>
#include <QString>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    qApp->setStyleSheet
    (
        "QLineEdit {"
            "border: 2px solid grey;"
            "border-radius: 10px;"
            "padding: 0 8 px;"
            "selection-background-color: darkgrey;"
        "}"
        
        "QPushButton {"
            "border: 1px solid #000000;"
            "border-radius: 10px;"
            "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
                                              "stop: 0 #dedede, stop: 1 #656a6d);"
              "min-width: 80px;"
        "}"
        
        "QPushButton:pressed {"
            "background-color: grey"
        "}"
        
        "QPushButton:flat {"
            "border: none; "
        "}"
    );
    
    QWidget window;
    window.setGeometry(200, 200, 200, 100);
    
    QLineEdit nameLine(&window);                                                              
    nameLine.setGeometry(100, 30, 100, 20);
    
    QLabel lbl("Enter your name:", &window);
    lbl.setGeometry(5, 30, 100, 20);
    
    QString name = nameLine.text();
    
    QMessageBox messageBox;
    messageBox.setGeometry(250, 220, 100, 100);
    messageBox.setText(QString ("Hello, %1").arg(name));
    
    QPushButton btn ("OK", &window);
    btn.setGeometry(63, 75, 75, 20);
    
    QObject::connect(&btn, SIGNAL(clicked()), &messageBox, SLOT(show()));

    window.show ();    
    return app.exec();
}


Что я делаю не так?

p.s. И еще QMessageBox как то не правильно работает... Там кнопка "ОК" не такая как в главном окне. Как это исправить??
Причина редактирования: код в посте
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 25.8.2008, 16:47
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Ты просто не так все делаешь.
Вот посмотри пример работы с QLineEdit: Line Edits Example.
Если что-то в нем не будет понятно, спрашивай. ;)

Сообщение отредактировал ViGOur - 25.8.2008, 16:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.8.2008, 16:50
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(xolvo @ 25.8.2008, 20:31) *
вот исходник

что он слишком большой?
лучше выкладывай на форум вставляй текст между тэгами [code][/code]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xolvo
  опции профиля:
сообщение 25.8.2008, 17:07
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 25.8.2008
Пользователь №: 274

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 25.8.2008, 17:47) *
Ты просто не так все делаешь.
Вот посмотри пример работы с QLineEdit: Line Edits Example.
Если что-то в нем не будет понятно, спрашивай. ;)


Я че то ничего не понял ((  Можешь поправить мой код, что бы правильно было ??

И на скока я понял где-то тут ошибка у меня:

QString name = nameLine.text();
QMessageBox messageBox;messageBox.setGeometry(250, 220, 100, 100);
messageBox.setText(QString ("Hello, %1").arg(name));


Сообщение отредактировал Litkevich Yuriy - 25.8.2008, 17:15
Причина редактирования: пиши параметр тэга, code=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.8.2008, 17:13
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


xolvo, строчка
QString name = nameLine.text();
копирует пустую строку только что созданного текстового поля.

Цитата(xolvo @ 25.8.2008, 20:31) *
Там кнопка "ОК" не такая как в главном окне. Как это исправить??

Ты залез в стили не разобравшись с элементарными вещами.

xolvo, План такой:
1) Создаешь класс собственного виджета, главного окна, в виде отдельной пары файлов cpp/h (по аналогии с примером, что дал ViGOur).
2) в функции main конструируешь обект главного окна (как в упомянутом примере).
3) Весь код сосредотачивается в твоем виджете, в конструкторе соеденяешь сигнал от кнопки со слотом своего виджета.
4) В слоте копируешь текст из тестового поля и показываешь сообщение.

P.S. Про стили пока забудь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xolvo
  опции профиля:
сообщение 25.8.2008, 17:15
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 25.8.2008
Пользователь №: 274

Спасибо сказали: 0 раз(а)




Репутация:   0  


ок... Ща попробую
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.8.2008, 17:27
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


рекомендую пройти учебное пособие, вдумчиво.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 25.8.2008, 17:56
Сообщение #8


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


ндя... событийное программирование, это не фунт изюма...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xolvo
  опции профиля:
сообщение 25.8.2008, 17:56
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 25.8.2008
Пользователь №: 274

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 25.8.2008, 18:27) *
рекомендую пройти учебное пособие, вдумчиво.




я его читал. Вроде все понял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xolvo
  опции профиля:
сообщение 25.8.2008, 18:43
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 25.8.2008
Пользователь №: 274

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 25.8.2008, 18:13) *
xolvo, План такой:
1) Создаешь класс собственного виджета, главного окна, в виде отдельной пары файлов cpp/h (по аналогии с примером, что дал ViGOur).
2) в функции main конструируешь обект главного окна (как в упомянутом примере).
3) Весь код сосредотачивается в твоем виджете, в конструкторе соеденяешь сигнал от кнопки со слотом своего виджета.
4) В слоте копируешь текст из тестового поля и показываешь сообщение.


че то не получается ((
Мож я как то текст из поля не правильно копирую в слоте ??

//lineedit.cpp

#include "lineedit.h"

lineEdit::lineEdit() {
    
    setGeometry(200, 200, 200, 100);
    
    okButton = new QPushButton (tr ("OK"), this);
    okButton->setGeometry(63, 75, 75, 20);
    
    lbl = new QLabel (tr ("Enter your name:"), this);
    lbl->setGeometry(5, 30, 100, 20);
    
    nmLine = new QLineEdit (this);
    nmLine->setGeometry(100, 30, 100, 20);
    nmLine->setFocus();
    
    messageBox = new QMessageBox (this);
    messageBox->setGeometry(250, 220, 100, 100);
    
    connect ( okButton, SIGNAL(clicked()), messageBox, SLOT(name = nmLine.text()) );
    connect ( okButton, SIGNAL(clicked()), messageBox, SLOT(show()) );
}


//lineedit.h

#ifndef LINEEDIT_H
#define LINEEDIT_H

#include <QtGui>
#include "ui_lineedit.h"

class lineEdit : public QWidget
{
    Q_OBJECT

public:
    lineEdit();    

private:
    QLineEdit *nmLine;
    QPushButton *okButton;
    QLabel *lbl;
    QMessageBox *messageBox;
    QString *name;
};

#endif // LINEEDIT_H
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.7.2020, 14:54