Russian Qt Forum
Сентябрь 22, 2024, 22:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Произвольная команда по нажатию на кнопку  (Прочитано 4334 раз)
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();
}

Необходимо, что бы часть кода, помеченная надписью "Вот этот кусок кода", выполнялась по нажатию на кнопку, возможно ли это?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 09, 2011, 11:17 »

Вынести этот код в отдельный слот и законнектить сигнал clicked кнопки на вызов этого слота.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
jacuba
Гость
« Ответ #2 : Март 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();
}
« Последнее редактирование: Март 09, 2011, 12:53 от jacuba » Записан
alexman
Гость
« Ответ #3 : Март 09, 2011, 12:28 »

Пробовал хотя бы скомпилить?
Записан
jacuba
Гость
« Ответ #4 : Март 09, 2011, 12:31 »

да, компилируется
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Март 09, 2011, 12:39 »

Зачем от QProcess наследуешься? В QObject'а вполне хватит. И вынеси этот класс в отдельный h/cpp.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Март 09, 2011, 12:45 »

Цитата: jacuba
да, компилируется
Странно, т.к. по приведённому коду beep не описан.
Записан

Qt 5.11/4.8.7 (X11/Win)
jacuba
Гость
« Ответ #7 : Март 09, 2011, 12:54 »

Цитировать
Странно, т.к. по приведённому коду beep не описан.
Поправил, прошу прощения, упустил...
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Март 09, 2011, 13:07 »

Поправил неправильно. Слот не отработает.
Записан

Qt 5.11/4.8.7 (X11/Win)
jacuba
Гость
« Ответ #9 : Март 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();
}
« Последнее редактирование: Март 09, 2011, 13:27 от jacuba » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Март 09, 2011, 13:44 »

1. Не наследуйся от QProcess.
2. QWidget *window вынеси как отдельный класс и в нем уже реализуй слот.
3. Прочитай про компоновку при помощи QLayout.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 23.