Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QPushButton попытки заблокировать кнопку.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
metronix
Добрый день.. столкнулся с маленькой проблемой. Трубется заблокировать кнопку сразу после нажатия, обработать некоторую операцию а потом сделать кнопку свова доступной).

Создал кнопку

QPushButton* b_ok = new QPushButton("Ok");

//Замкнул на слот
connect(b_ok, SIGNAL(clicked()), this, SLOT(obrabotka()));

//Написал слот-функцию,
void obrabotka()
{
             b_ok->setEnabled(false);
// здесь будут операции
             b_ok->setEnabled(true);

}

но при каких либо попытках сделать кнопку ненажимаемой ничего не получается=(
Кто-нибудь подскажите в чём может быть проблема?? Если писать b_ok->setEnabled(false); например в конструкторе то всё замечательно работает... неужели нельзя изменять объект которы послужил источником сигнала??

Также возник вопрос.. а какие операции необходимо произвести чтобы перенести приложение на другую машину? Если есть возможность скиньте ссылочку где можно почитать про это.
Заранее спасибо.
Litkevich Yuriy
Ты соеденяешь QPushButton* с this т.е. указатель на этот класс, а какой класс?
ведь ты написал просто функцию, а не член класса и как я полагаю не слот (объявление слота должно содержать ключевое слово slot)
см. обсуждение там мне нужно было просто функцию использовать в качестве слота
metronix
// window_mine.cpp
Window_mein::Window_mein(QWidget *pwgt) : QWidget(pwgt)
{
    QPushButton* b_ok = new QPushButton("Ok");
          
    connect(b_ok, SIGNAL(clicked()), this, SLOT(obrabotka()));
            / / инициализация лайотов создания других виджетов и присоединение их к этому классу опущены
    
    
}

void Window_mein::obrabotka()
{
//    b_ok->setEnabled(false);

//    b_ok->setEnabled(true);
}


// window_mein.h
#ifndef __WINDOW_MIEM_
#define __WINDOW_MIEM_

#include <QtGui>
#include <QWidget>

class Window_mein : public QWidget{
Q_OBJECT

public:
    /// другие виджеты
    QPushButton* b_ok;

public:

    Window_mein(QWidget* pwgt = 0);

public slots:

    void obrabotka();
};
#endif


Программа запускается, все виджеты отображаются и всё работает НО если нажимаю на кнопку то происходит ошибка.. main.cpp я также писать здесь не стал ибо в нм ничего интересного...
metronix
Прошу прощения, не углядел я про теги...
Litkevich Yuriy
Обрати внимание, ты кнопку объявил в заголовочном файле, и еще раз в конструкторе, это поидее компилится не должно.
Litkevich Yuriy
Вот пример накидал
main.cpp:
#include <QtGui>
#include "class.h"

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // Для функций перевода tr()
    
  CTest window;
    
    window.show();

    return app.exec();
}

class.h:
#ifndef CLASS_H
#define CLASS_H

#include <QtGui>

class CTest: public QWidget
{
    Q_OBJECT

public:
    CTest(QWidget *parent = 0);
    
    QPushButton* b1;
    QPushButton* b2;
    QVBoxLayout *layout;

public slots:
    void OnClic(bool check);
};

#endif //CLASS_H

class.cpp:
#include <QtGui>
#include "class.h"

CTest::CTest(QWidget *parent): QWidget(parent)
{
    b1 = new QPushButton(tr("Нажми меня"),this);
    b2 = new QPushButton(tr("Нажми меня"),this);
    layout = new QVBoxLayout(this);
    
    layout->addWidget(b1);
    layout->addWidget(b2);
    
    
    connect(b1, SIGNAL(clicked(bool)),
            this, SLOT(OnClic(bool)));
    
    connect(b2, SIGNAL(clicked(bool)),
            this, SLOT(OnClic(bool)));
}

void CTest::OnClic(bool /*check*/)
{
    // Для тестирования слота
    //QMessageBox::information(this, tr("Слот"), tr("кнопка нажата"),    QMessageBox::Ok);
    
    if (b1->isEnabled())
    {
        b1->setEnabled(false);
        b2->setEnabled(true);
    }
    else
    {
        b1->setEnabled(true);
        b2->setEnabled(false);    
    }
}
metronix
А слона то мы и не заметили...
Цитата
ты кнопку объявил в заголовочном файле, и еще раз в конструкторе, это поидее компилится не должно.

Большое спасибо!! Ошибку поправил и всё заработалло на ура=)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.