Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: jacuba от Март 09, 2011, 11:15



Название: Произвольная команда по нажатию на кнопку
Отправлено: jacuba от Март 09, 2011, 11:15
Добрый день, есть код:
Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget *window = new QWidget;
    window->resize(200, 120);

    QPushButton *button1 = new QPushButton("BEEP!", window);
    button1->setGeometry(10, 10, 180, 40);

    /*QProcess *beep = new QProcess(window);
    beep->startDetached("mpg123 beep-1.mp3");*/  Вот этот кусок кода

    //QObject::connect(button1, SIGNAL(clicked()), beep, SLOT());

    window->show();
    return app.exec();
}

Необходимо, что бы часть кода, помеченная надписью "Вот этот кусок кода", выполнялась по нажатию на кнопку, возможно ли это?


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: Пантер от Март 09, 2011, 11:17
Вынести этот код в отдельный слот и законнектить сигнал clicked кнопки на вызов этого слота.


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: jacuba от Март 09, 2011, 12:24
Код:
#include <QtGui/QApplication>
#include <stdio.h>
#include "mainwindow.h"
#include <QSound>
#include <QPushButton>
#include <QHBoxLayout>
#include <QWidget>
#include <QProcess>
#include <QApplication>

class Process
    :    public QProcess
{
    Q_OBJECT
public slots:
    void startProcess()
    {
        QProcess::startDetached("mpg123 beep-1.mp3");
    }
};

int main(int argc, char *argv[])
{
    
    QApplication app(argc, argv);
    QWidget *window = new QWidget;
    window->resize(200, 120);

    QPushButton *button1 = new QPushButton("BEEP!", window);
    button1->setGeometry(10, 10, 180, 40);

    QProcess *beep = new QProcess(window);
    QObject::connect(button1, SIGNAL(clicked()), beep, SLOT(startProcess()));

    //QProcess::startDetached("mpg123 beep-1.mp3");
    window->show();
    return app.exec();
}


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: alexman от Март 09, 2011, 12:28
Пробовал хотя бы скомпилить?


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: jacuba от Март 09, 2011, 12:31
да, компилируется


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: Пантер от Март 09, 2011, 12:39
Зачем от QProcess наследуешься? В QObject'а вполне хватит. И вынеси этот класс в отдельный h/cpp.


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: GreatSnake от Март 09, 2011, 12:45
Цитата: jacuba
да, компилируется
Странно, т.к. по приведённому коду beep не описан.


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: jacuba от Март 09, 2011, 12:54
Цитировать
Странно, т.к. по приведённому коду beep не описан.
Поправил, прошу прощения, упустил...


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: GreatSnake от Март 09, 2011, 13:07
Поправил неправильно. Слот не отработает.


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: jacuba от Март 09, 2011, 13:23
Всем спасибо, задача решена.

process.h
Код:
#ifndef PROCESS_H
#define PROCESS_H

#include <QObject>
#include <QProcess>

class Process : public QProcess
{
Q_OBJECT
public:
    explicit Process(QObject *parent = 0);

public slots:
    void startProcess()
    {
        QProcess::startDetached("mpg123 beep-1.mp3");
    }

};
#endif // PROCESS_H

main.cpp
Код:
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QPushButton>
#include <QWidget>
#include <QProcess>
#include <QApplication>
#include "process.h"

int main(int argc, char *argv[])
{
   
    QApplication app(argc, argv);
    QWidget *window = new QWidget;
    window->resize(200, 120);

    QPushButton *button1 = new QPushButton("BEEP!", window);
    button1->setGeometry(10, 10, 180, 40);

    Process *beep = new Process();
    QObject::connect(button1, SIGNAL(clicked()), beep, SLOT(startProcess()));

    window->show();
    return app.exec();
}


Название: Re: Произвольная команда по нажатию на кнопку
Отправлено: Пантер от Март 09, 2011, 13:44
1. Не наследуйся от QProcess.
2. QWidget *window вынеси как отдельный класс и в нем уже реализуй слот.
3. Прочитай про компоновку при помощи QLayout.