crossplatform.ru

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


  Ответ в QLineEdit проверить
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 13.5.2011, 7:20
 
Цитата(fortero @ 11.5.2011, 2:01) *
выяснить QLineEdit полные или пустые???
QLineEdit::text() + QString::isEmpty()
silver47 Дата 13.5.2011, 6:35
 
Цитата(fortero @ 13.5.2011, 3:43) *
А подскажите а какой функцией можно измереть длинну строки, в классе QString?


int QString::size () const
Returns the number of characters in this string.
The last character in the string is at position size() - 1. In addition, QString ensures that the character at position size() is always '\0', so that you can use the return value of data() and constData() as arguments to functions that expect '\0'-terminated strings.

Все что курсивом для общего развития. Существуют так называемые C-строки и Pascal-строки. Первые произвольной длинны, последний символ - \0, счет ведется с нулевого символа. Вторые длинной до 255 символов, счет ведется с 1 символа, т.к. нулевой содержит длину строки (один байт).
fortero Дата 13.5.2011, 1:43
  Всем оргрмное спасибо!
Всё работает так как я и представлял!

P.S. А подскажите а какой функцией можно измереть длинну строки, в классе QString?
breeve Дата 12.5.2011, 10:51
 
Цитата(fortero @ 11.5.2011, 4:43) *
Спасибо помогло, пару маленьких поправок и всё стало так как я хочу!
Но вот снова не задача, а как быть когда надо обслуживать несколько поолей, если в 3 из 9 полей нет данных то кнопка не должна быть активная, как это орагнизовать???

Подключаешь сигналы textChanged(QString), от трех LineEdit'ов к одному слоту и там обрабатываешь.
Слот выглядит примерно так:
void BlockButton::s_blockButton()
{
    bool first = lineOne->text().isEmpty();
    bool second = lineTwo->text().isEmpty();
    bool third = lineThree->text().isEmpty();
    if(first || second || third)
         button->setDisabled(true);
    else
         button->setDisabled(false);
}
MJIbIu Дата 11.5.2011, 8:57
 
Цитата(fortero @ 11.5.2011, 4:43) *
Спасибо помогло, пару маленьких поправок и всё стало так как я хочу!
Но вот снова не задача, а как быть когда надо обслуживать несколько поолей, если в 3 из 9 полей нет данных то кнопка не должна быть активная, как это орагнизовать???

Может быть есть есть и другие способы, но в лоп приходит тока мысль создать массив из bool переменных. При каждом вводе заполнять его, не пустое или пустое. потом его проверять на все true.
fortero Дата 11.5.2011, 3:43
  Спасибо помогло, пару маленьких поправок и всё стало так как я хочу!
Но вот снова не задача, а как быть когда надо обслуживать несколько поолей, если в 3 из 9 полей нет данных то кнопка не должна быть активная, как это орагнизовать???
breeve Дата 11.5.2011, 2:18
  Или можешь сделать просто флаг - переменную bool isEmpty. Которая изначально будет тру(строка пустая). И при любом изменении текста LineEdit'а будет проверяться пустая ли строка. А как это сделать читай выше. Сигнал к слоту, и в нем обрабатываешь и изменяешь переменную.

Пример твой не прокатит, насколько я знаю чтобы сделать слот нужно в любом случае класс создавать свой.
Проверенный код:
BLOCKBUTTON_H
#ifndef BLOCKBUTTON_H
#define BLOCKBUTTON_H

#include <QtGui>

class BlockButton : public QWidget
{
    Q_OBJECT

public:
    BlockButton(QWidget *parent = 0);
    ~BlockButton(){};
private:
    QPushButton *button;
    QLineEdit *line;
    QVBoxLayout *vLay;
private slots:
    void s_blockButton(QString);
};

#endif // BLOCKBUTTON_H
BLOCKBUTTON.CPP
#include "blockbutton.h"

BlockButton::BlockButton(QWidget *parent)
    : QWidget(parent)
{
    vLay = new QVBoxLayout;
    button = new QPushButton("Next");
    button->setDisabled(true);
    line= new QLineEdit;
    connect(line, SIGNAL(textChanged(QString)),
            this, SLOT(s_blockButton(QString)));


    vLay->addWidget(line);
    vLay->addWidget(button);
    setLayout(vLay);
}

void BlockButton::s_blockButton(QString s)
{
    if(s.isEmpty())
        button->setDisabled(true);
    else
        button->setDisabled(false);
}
fortero Дата 11.5.2011, 1:54
 
Цитата(breeve @ 11.5.2011, 1:37) *
Цитата(fortero @ 11.5.2011, 2:32) *
Я уже думал об этом, но нужно не только изминение отследить но и ч то бы оно не пустым осталось!

Если я тебя правильно понял, то ты в этом слоте делай обработку т.о. если строка пустая заблокировать кнопку, если нет то разблокировать.
Ну и изначально блокируешь кнопку, чтобы пользователь в любом случае что-нибудь ввел.

Верно Вы понимаете, вот я набросал пример, отбросив лишенее:
#include <QtGui>

int main(int argc, char **argv){
    QApplication app(argc, argv);
    QDialog dia;
    QLineEdit ed;
    QHBoxLayout lay;
    QPushButton btn("OK");
    btn.setDisabled(true);
    if() //Вставить услове которое разблокирует кнопку ????????
    btn.setDisabled(false);
    lay.addWidget(&ed, 1);
    lay.addWidget(&btn);
    dia.setLayout(&lay);
    dia.resize(250, 40);
    dia.show();
    return app.exec();
}
breeve Дата 11.5.2011, 1:37
 
Цитата(fortero @ 11.5.2011, 2:32) *
Я уже думал об этом, но нужно не только изминение отследить но и ч то бы оно не пустым осталось!

Если я тебя правильно понял, то ты в этом слоте делай обработку т.о. если строка пустая заблокировать кнопку, если нет то разблокировать.
Ну и изначально блокируешь кнопку, чтобы пользователь в любом случае что-нибудь ввел.
fortero Дата 11.5.2011, 1:32
 
Цитата(breeve @ 11.5.2011, 1:31) *
Цитата(fortero @ 11.5.2011, 2:22) *
Ну есть, форма, она пустая QLineEdit, когда в неё вводиш данные нужно что бы определяло это, а если это описать в этой функции он автоматом думает что она пустая она же не обновляется...

Ты можешь подключить сигнал QLineEdit::textChanged(QString), QLineEdit::textEdited(QString) или QLineEdit::editFinished()
к своему слоту и там уже обрабатывать то что тебе надо.

Я уже думал об этом, но нужно не только изминение отследить но и ч то бы оно не пустым осталось!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.4.2024, 23:39