crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QPushButton попытки заблокировать кнопку., QPushButton попытки заблокировать кнопку.
Гость_metronix_*
сообщение 1.5.2008, 20:52
Сообщение #1





Гости








    


Добрый день.. столкнулся с маленькой проблемой. Трубется заблокировать кнопку сразу после нажатия, обработать некоторую операцию а потом сделать кнопку свова доступной).

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

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); например в конструкторе то всё замечательно работает... неужели нельзя изменять объект которы послужил источником сигнала??

Также возник вопрос.. а какие операции необходимо произвести чтобы перенести приложение на другую машину? Если есть возможность скиньте ссылочку где можно почитать про это.
Заранее спасибо.
Причина редактирования: пользуйтесь тэгом cod=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.5.2008, 21:17
Сообщение #2


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

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

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




Репутация:   94  


Ты соеденяешь QPushButton* с this т.е. указатель на этот класс, а какой класс?
ведь ты написал просто функцию, а не член класса и как я полагаю не слот (объявление слота должно содержать ключевое слово slot)
см. обсуждение там мне нужно было просто функцию использовать в качестве слота
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_metronix_*
сообщение 1.5.2008, 21:23
Сообщение #3





Гости








    


// 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_*
сообщение 1.5.2008, 21:24
Сообщение #4





Гости








    


Прошу прощения, не углядел я про теги...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.5.2008, 8:33
Сообщение #5


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

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

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




Репутация:   94  


Обрати внимание, ты кнопку объявил в заголовочном файле, и еще раз в конструкторе, это поидее компилится не должно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.5.2008, 9:08
Сообщение #6


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

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

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




Репутация:   94  


Вот пример накидал
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_*
сообщение 2.5.2008, 17:22
Сообщение #7





Гости








    


А слона то мы и не заметили...
Цитата
ты кнопку объявил в заголовочном файле, и еще раз в конструкторе, это поидее компилится не должно.

Большое спасибо!! Ошибку поправил и всё заработалло на ура=)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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