crossplatform.ru

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

История благодарностей участнику breeve ::: Спасибо сказали: 9 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
12.5.2011, 10:51 QLineEdit проверить
Цитата(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);
}
fortero,
11.5.2011, 2:18 QLineEdit проверить
Или можешь сделать просто флаг - переменную 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,
16.4.2011, 0:06 Как убрать полосы с QToolBar
Попробуй тогда так:
border-width: 0px;

вот что получилось у меня:
1 - до, 2 - после.
ruzik,
15.4.2011, 17:09 Как убрать полосы с QToolBar
Или так же с помощью StyleSheet убери верхнюю и нижнюю границу.
Как то так:
margin-top:0px
margin-bottom:0px
ruzik,
10.4.2011, 23:09 QTextEdit, маркер
Цитата(breeve @ 4.4.2011, 0:35) *
как выделить текст программно?
Общие задачи редактирования форматированного текста
abc,
17.5.2010, 13:14 Перемещение окна за любую его часть
Вот если кому надо, рабочий вариант:
void Console::mousePressEvent(QMouseEvent *event)
{
    QRect p = this->geometry();
    if(event->button() == Qt::LeftButton)
    {
        lastPoint = event->pos();        
        if(!p.contains(lastPoint))
            return;
        b_move = true;
    }
}

void Console::mouseMoveEvent(QMouseEvent *event)
{
    if((event->buttons() & Qt::LeftButton) && b_move)
        move(event->globalX()-lastPoint.x(),
             event->globalY()-lastPoint.y());
}

void Console::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton && b_move) {
            b_move = false;
        }
}


Остался один не понятный момент. Если у меня окно стоит с флагом Qt::Window. То все работает правильно. Если же я выставляю Qt::ToolTip или Qt::Popup, то если я хоть раз нажму на другое окно то я больше не смогу его сдвинуть. Не понятно почему.
gxoptg,
17.5.2010, 12:47 Перемещение окна за любую его часть
void Console::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        b_move = true;
    }
}
void Console::mouseMoveEvent(QMouseEvent *event)
{
    if((event->buttons() & Qt::LeftButton) && b_move)
        move(event->pos());
}
void Console::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton && b_move) {
            b_move = false;
        }
}
gxoptg,
17.5.2010, 9:32 Вывод окна в центре экрана
Цитата(AntonH851 @ 17.5.2010, 10:10) *
Добрый день!
Подскажите пожалуйста, как сделать чтобы окно программы появлялось всегда в центре экрана?

Двигай приложение в центр. Как-то так
int w = qApp->desktop()->width(); //ширина экрана
int h = qApp->desktop()->height(); //высота экрана
move(w/2, h/2);


Таким образом твое окно буде начинаться из центра экрана, а чтобы центр окна был на центре экрана надо сделать как то так:
int w = qApp->desktop()->width(); //ширина экрана
w /= 2
w -= this->width()/2;
int h = qApp->desktop()->height(); //высота экрана
h /= 2
h -= this->height()/2;
move(w, h);
AntonH851, aviabunin,

RSS Текстовая версия Сейчас: 19.4.2024, 22:24