Название: Неактивная кнопка Отправлено: Дмитрий от Январь 11, 2015, 11:46 Собрал простенький проект,смысл его таков:ввожу текст нажимаю ок и текст всплывает в новом сообщении.Всё хорошо только где то упустил ошибку и кнопка "ок" неактивна,нельзя на неё нажать.Как это исправить? (http://imgur.com/4BZeESR)
Название: Re: Неактивная кнопка Отправлено: __Heaven__ от Январь 11, 2015, 12:34 свойство Enabled
Название: Re: Неактивная кнопка Отправлено: Дмитрий от Январь 11, 2015, 12:36 По конкретнее пожалуйста
Название: Re: Неактивная кнопка Отправлено: Mikhail от Январь 11, 2015, 13:47 Если форма сделана в дизайнере (QtCreator) установить для кнопки свойство Enabled в true.
Если форма в тексте - для кнопки выполнить btn->setEnabled(true). btn - указатель на твою кнопку. А вообще то желательно читать документацию - Assistant Название: Re: Неактивная кнопка Отправлено: Дмитрий от Январь 11, 2015, 14:01 Вариант со свойствами Enable сработал.
Создано две кнопки: ok = new QPushButton ("Ок"); ok->setDefault(false); ok->setEnabled(true); close = new QPushButton("&Выход"); После того как поменял местами false и true кнопка "ок" заработала но,при использовании в программке функции "верхний регистр" программа работает,при использовании функции "инверсия текста" тоже работает,однако при использовании обеих функций программа виснет.http://imgur.com/a/ZqigD Название: Re: Неактивная кнопка Отправлено: Bepec от Январь 11, 2015, 14:51 А давайте прекратим играть в экстрасенсов? ошибка у вас в коде и несчастный QPushButton ни в чем не виноват...
Название: Re: Неактивная кнопка Отправлено: Дмитрий от Январь 11, 2015, 17:03 Да что вы.Ну с кнопкой согласен.Пушбатон может и не виноват тогда где проблема?Делал программку по видеоуроку.Пересмотрел,у парня работает у меня не.Мож поможете?:)
Название: Re: Неактивная кнопка Отправлено: Bepec от Январь 11, 2015, 17:11 Я ж не экстрасенс по вашему комментарию код прозревать...
Вот когда вы код покажете нам, причем весь, мы вам поможем. PS могу и платную консультацию с объяснением дать, если хотите :D Название: Re: Неактивная кнопка Отправлено: Дмитрий от Январь 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()); } Название: Re: Неактивная кнопка Отправлено: Bepec от Январь 11, 2015, 18:01 А давайте я вам скажу, что это не весь код. Нет h файла, неизвестно что за сигналы и что в них происходит, так что вы привели огрызок :D
Название: Re: Неактивная кнопка Отправлено: Дмитрий от Январь 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(); } Название: Re: Неактивная кнопка Отправлено: kambala от Январь 11, 2015, 18:51 for(int i=str.size()-1,j=0; i >= 0; i--,i++) - отсюда и зацикливание. и вместо того, чтобы тщательно проверить свой код, ты создаешь тему на форуме.
Название: Re: Неактивная кнопка Отправлено: Дмитрий от Январь 11, 2015, 19:38 :( Каюсь....Спасибо большое всем.
|