Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Выполнить после нажатия на кнопку

Автор: micle7 16.2.2009, 22:00

#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

#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

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

либо приложение запустить из консоли, тогда будет видно

Автор: micle7 16.2.2009, 22:55

#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

макрос добавь в начало

 class MyWidget : public QWidget
{
Q_OBJECT

Автор: SABROG 16.2.2009, 23:09

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

#include "main.moc"


Затем make clean && qmake && make release

Автор: Litkevich Yuriy 16.2.2009, 23:11

да, к стати инклюд нужен, т.к. и объявление класса и его реализация, находятся в одном файле

Автор: SABROG 16.2.2009, 23:25

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

#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;
}

Автор: micle7 17.2.2009, 1:12

#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

Цитата(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, учи плюсы, учи кутэ, читай ассистант, задавай вопросы в форуме (весьма желательно именно в такой последовательности)



теперь я понимаю как набить столько "спасибо"-в, как у Юрия :)
жаль, у меня терпения не хватит...

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)