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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Неактивная кнопка  (Прочитано 6486 раз)
Дмитрий
Гость
« : Январь 11, 2015, 11:46 »

Собрал простенький проект,смысл его таков:ввожу текст нажимаю ок и текст всплывает в новом сообщении.Всё хорошо только где то упустил ошибку и кнопка "ок" неактивна,нельзя на неё нажать.Как это исправить?
« Последнее редактирование: Январь 11, 2015, 19:39 от Дмитрий » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Январь 11, 2015, 12:34 »

свойство Enabled
Записан
Дмитрий
Гость
« Ответ #2 : Январь 11, 2015, 12:36 »

По конкретнее пожалуйста
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Январь 11, 2015, 13:47 »

Если форма сделана в дизайнере (QtCreator) установить для кнопки свойство Enabled в true.

Если форма в тексте - для кнопки выполнить btn->setEnabled(true). btn - указатель на твою кнопку.

А вообще то желательно читать документацию - Assistant
Записан
Дмитрий
Гость
« Ответ #4 : Январь 11, 2015, 14:01 »

Вариант со свойствами Enable сработал.
Создано две кнопки:
ok = new QPushButton ("Ок");
    ok->setDefault(false);
    ok->setEnabled(true);
    close = new QPushButton("&Выход");
После того как поменял местами false и true кнопка "ок" заработала но,при использовании в программке функции "верхний регистр" программа работает,при использовании функции "инверсия текста" тоже работает,однако при использовании обеих функций программа виснет.http://imgur.com/a/ZqigD
Записан
Bepec
Гость
« Ответ #5 : Январь 11, 2015, 14:51 »

А давайте прекратим играть в экстрасенсов? ошибка у вас в коде и несчастный QPushButton ни в чем не виноват...
Записан
Дмитрий
Гость
« Ответ #6 : Январь 11, 2015, 17:03 »

Да что вы.Ну с кнопкой согласен.Пушбатон может и не виноват тогда где проблема?Делал программку по видеоуроку.Пересмотрел,у парня работает у меня не.Мож поможете?Улыбающийся
Записан
Bepec
Гость
« Ответ #7 : Январь 11, 2015, 17:11 »

Я ж не экстрасенс по вашему комментарию код прозревать...
Вот когда вы код покажете нам, причем весь, мы вам поможем.

PS могу и платную консультацию с объяснением дать, если хотите Веселый
Записан
Дмитрий
Гость
« Ответ #8 : Январь 11, 2015, 17:32 »

Вот собственно код проекта.

#include "mywindow.h"

MyWindow::MyWindow(QWidget *parent) : QDialog(parent)
{
    lbl = new QLabel("&Текст");

    line = new QLineEdit(this);
    lbl->setBuddy(line);

    cb1 = new QCheckBox("Верхний регистр");
    cb2 = new QCheckBox("Инверсия");

    ok = new QPushButton ("Ок");
    ok->setDefault(true);
    ok->setEnabled(false);
    close = new QPushButton("&Выход");

    QBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(lbl);
    layout->addWidget(line);

    QVBoxLayout *right = new QVBoxLayout;
    right->addLayout(layout);
    right->addWidget(cb1);
    right->addWidget(cb2);

    QVBoxLayout *left = new QVBoxLayout;

    left->addWidget(ok);
    left->addWidget(close);
    left->addStretch();

    QHBoxLayout *main1 = new QHBoxLayout;
    main1->addLayout(right);
    main1->addLayout(left);

    connect(line,SIGNAL(textChanged(QString)),this,SLOT(TextChanged(Qstring)));
    connect(close,SIGNAL(clicked()),this,SLOT(close()));
    connect(ok,SIGNAL(clicked()),this,SLOT(OkClicked()));

    setLayout(main1);
    setWindowTitle("Message");
}

void MyWindow::TextChanged(QString str)
{
    ok->setEnabled(!str.isEmpty());
}

void MyWindow::OkClicked()
{
    if(cb1->isChecked() && cb2->isChecked())
        emit RegistrAndInverse(line->text());
    else
        if((!cb1->isChecked()) && (!cb2->isChecked()))
            emit Simple(line->text());
        else
            if(cb1->isChecked())
                emit Register(line->text());
            else
                if(cb2->isChecked())
                    emit Invers(line->text());

}























« Последнее редактирование: Январь 11, 2015, 17:41 от Дмитрий » Записан
Bepec
Гость
« Ответ #9 : Январь 11, 2015, 18:01 »

А давайте я вам скажу, что это не весь код. Нет h файла, неизвестно что за сигналы и что в них происходит, так что вы привели огрызок Веселый
Записан
Дмитрий
Гость
« Ответ #10 : Январь 11, 2015, 18:07 »

А ну это можно,пожалуйста(h файл):

#ifndef MYWINDOW
#define MYWINDOW

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMessageBox>

class MyWindow : public QDialog
{
    Q_OBJECT

public:
    MyWindow(QWidget *parent=0);
private:
    QLabel *lbl;
    QLineEdit *line;
    QCheckBox *cb1;
    QCheckBox *cb2;
    QPushButton *ok;
    QPushButton *close;
private slots:
    void OkClicked();
    void TextChanged(QString str);
signals:
    void Register(QString str);
    void Invers(QString str);
    void Simple(QString str);
    void RegistrAndInverse(QString str);

};

class str : public QObject
{
    Q_OBJECT
public slots:

    void Simple(QString str)
    {
        QMessageBox msg;
        msg.setText(str);
        msg.exec();
    }
    void Inversia(QString str)
    {
        QString result = str;
        for(int i=str.size()-1,j=0; i >= 0; i--,j++)
        {
            result[j] = str;
        }

        QMessageBox msg;
        msg.setText(result);
        msg.exec();
    }
    void Register(QString str)
    {
        str = str.toUpper();
        QMessageBox msg;
        msg.setText(str);
        msg.exec();
    }
    void All(QString str)
    {
        str = str.toUpper();
        QString result = str;
        for(int i=str.size()-1,j=0; i >= 0; i--,i++)
        {
            result[j] = str;
        }

        QMessageBox msg;
        msg.setText(result);
        msg.exec();
    }
};

#endif // MYWINDOW

Файл main.cpp:
#include <QApplication>
#include "MyWindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyWindow *window = new MyWindow(NULL);

    window->show();

    str *n = new str;

    QObject::connect(window,SIGNAL(Simple(QString)),n,SLOT(Simple(QString)));
    QObject::connect(window,SIGNAL(Invers(QString)),n,SLOT(Inversia(QString)));
    QObject::connect(window,SIGNAL(Register(QString)),n,SLOT(Register(QString)));
    QObject::connect(window,SIGNAL(RegistrAndInverse(QString)),n,SLOT(All(QString)));





    return a.exec();
}













Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #11 : Январь 11, 2015, 18:51 »

for(int i=str.size()-1,j=0; i >= 0; i--,i++) - отсюда и зацикливание. и вместо того, чтобы тщательно проверить свой код, ты создаешь тему на форуме.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Дмитрий
Гость
« Ответ #12 : Январь 11, 2015, 19:38 »

 Грустный Каюсь....Спасибо большое всем.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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