crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Выполнить после нажатия на кнопку
micle7
  опции профиля:
сообщение 16.2.2009, 22:00
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 16.2.2009
Пользователь №: 557

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




Репутация:   0  


#include <QApplication>
#include <QPushButton>
#include <iostream>

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

QPushButton *button = new QPushButton("&Ok");
button->show();

std::cout << "345\n";
     return app.exec();
}

Подскажите, как запустить выполнение строки std::cout << "345\n"; после того, как я нажму на кнопку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 16.2.2009, 22:14
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


#include <QApplication>
#include <QPushButton>

class MyWidget : public QPushButton
{
public:
     MyWidget(QWidget *parent = 0);

public slot:
     void btnClick();
};

MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
{

     connect(this, SIGNAL(clicked()), this, SLOT(btnClick()));
}

void  MyWidget::btnClick()
{
   std::cout << "345\n";
}


int main(int argc, char *argv[])
{
     QApplication app(argc, argv);
     MyWidget widget;
     widget.show();
     return app.exec();
}
Только она правда выведется консольном приложении, а не в этом. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2009, 22:24
Сообщение #3


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

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

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




Репутация:   94  


Цитата(ViGOur @ 17.2.2009, 1:14) *
Только она правда выведется консольном приложении, а не в этом.
можно в фал проекта консоль подцепить:
CONFIG += console

либо приложение запустить из консоли, тогда будет видно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
micle7
  опции профиля:
сообщение 16.2.2009, 22:55
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 16.2.2009
Пользователь №: 557

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




Репутация:   0  


#include <QApplication>
#include <QPushButton>
#include <QWidget>
#include <iostream>
class MyWidget : public QWidget
{
public:
     MyWidget(QWidget *parent = 0);
public slots:
     void btnClick();
};

MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
{

     QPushButton *ok = new QPushButton(tr("Ok"), this);

     connect(ok, SIGNAL(clicked()), this, SLOT(btnClick()));
}

void  MyWidget::btnClick()
{
   std::cout << "345\n";
}

int main(int argc, char *argv[])
{
     QApplication app(argc, argv);
     MyWidget widget;
     widget.show();
     return app.exec();
}

Скомпилировал этот вариант, в консоли получаю при запуске Object::connect: No such slot QWidget::btnClick() что поправить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2009, 23:09
Сообщение #5


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

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

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




Репутация:   94  


макрос добавь в начало
 class MyWidget : public QWidget
{
Q_OBJECT
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 16.2.2009, 23:09
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Добавить макрос Q_OBJECT в класс MyWidget и в конце файла main.cpp прописать

#include "main.moc"


Затем make clean && qmake && make release
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2009, 23:11
Сообщение #7


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

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

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




Репутация:   94  


да, к стати инклюд нужен, т.к. и объявление класса и его реализация, находятся в одном файле
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 16.2.2009, 23:25
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Как вариант еще можно сделать так:

#include <QtGlobal>
#include <QtCore/QEventLoop>
#include <QtCore/QDebug>
#include <QtGui/QApplication>
#include <QtGui/QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QEventLoop loop;
    QPushButton btn("Exit");
    QObject::connect(&btn, SIGNAL(clicked()), &loop, SLOT(quit()));
    btn.show();
    loop.exec();
    qDebug() << "345\n";
    return 0;
}


Или так, что логичнее:

#include <QtGlobal>
#include <QtCore/QDebug>
#include <QtGui/QApplication>
#include <QtGui/QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton btn("Exit");
    QObject::connect(&btn, SIGNAL(clicked()), &app, SLOT(quit()));
    btn.show();
    int ret = app.exec();
    qDebug() << "345\n";
    return ret;
}


Сообщение отредактировал SABROG - 16.2.2009, 23:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
micle7
  опции профиля:
сообщение 17.2.2009, 1:12
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 16.2.2009
Пользователь №: 557

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




Репутация:   0  


#include <QApplication>
#include <QPushButton>
#include <QWidget>
#include <QLCDNumber>
#include <iostream>
#include <QVBoxLayout>

class MyWidget : public QWidget
{
Q_OBJECT
public:
     MyWidget(QWidget *parent = 0);
public slots:
     int btnClick();
};

MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
{
     QLCDNumber *lcd = new QLCDNumber(3);
     lcd->display(77);

     QLCDNumber *lcd1 = new QLCDNumber(3);

     QPushButton *ok = new QPushButton(tr("Ok"), this);
     connect(ok, SIGNAL(clicked()), this, SLOT(btnClick()));
     QVBoxLayout *layout = new QVBoxLayout;
     layout->addWidget(ok);
     layout->addWidget(lcd);
     layout->addWidget(lcd1);
     setLayout(layout);
}

int  MyWidget::btnClick()
{
int a = 5;
int b = a + 2;
int c = b + 5;

}

int main(int argc, char *argv[])
{
     QApplication app(argc, argv);
     MyWidget widget;
     widget.show();
     return app.exec();
}
#include "hello.moc"

Скажите еще, если не сложно, как мне вывести переменную "a" на lcd, а переменную "c" на lcd1, т.е. смысл следующий, после нажатия кнопки начинается расчет формул и в результате получается несколько переменных, a, b, c, нужно несколько из них вывести в красивой рамочке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Константин
  опции профиля:
сообщение 17.2.2009, 2:39
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 9.2.2009
Пользователь №: 539

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




Репутация:   1  


Цитата(micle7 @ 17.2.2009, 1:12) *
Скажите еще, если не сложно, как мне вывести переменную "a" на lcd, а переменную "c" на lcd1


#include <QApplication>
#include <QPushButton>
#include <QWidget>
#include <QLCDNumber>
#include <iostream>
#include <QVBoxLayout>

class MyWidget : public QWidget
{
Q_OBJECT
public:
     MyWidget(QWidget *parent = 0);
public slots:
     int btnClick();
private:
     QLCDNumber *lcd;
     QLCDNumber *lcd1;
};

MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
{
     lcd = new QLCDNumber(3);
     lcd->display(77);

     lcd1 = new QLCDNumber(3);

     QPushButton *ok = new QPushButton(tr("Ok"), this);
     connect(ok, SIGNAL(clicked()), this, SLOT(btnClick()));
     QVBoxLayout *layout = new QVBoxLayout;
     layout->addWidget(ok);
     layout->addWidget(lcd);
     layout->addWidget(lcd1);
     setLayout(layout);
}

int  MyWidget::btnClick()
{
int a = 5;
int b = a + 2;
int c = b + 5;

     lcd->display(a);
     lcd1->display(c);
}

int main(int argc, char *argv[])
{
     QApplication app(argc, argv);
     MyWidget widget;
     widget.show();
     return app.exec();
}
#include "hello.moc"


micle7, учи плюсы, учи кутэ, читай ассистант, задавай вопросы в форуме (весьма желательно именно в такой последовательности)



теперь я понимаю как набить столько "спасибо"-в, как у Юрия :)
жаль, у меня терпения не хватит...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 26.11.2024, 9:49