Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2012, 13:50   #1
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию Передача параметров между формами Qt

Здравствуйте. У меня есть 2 окна - одно MainWindow из которого вызывается окно Widget' а. В Widget происходит ввод текста. Мне необходимо передать этот текст в MainWindow. Вызов окна происходит по нажатию кнопки:
Код:
void MainWindow::on_pushButton_3_clicked()
{
    encrypt *en = new encrypt( );
    en->show();
}
Обе формы сделаны в Qt Designer. encrypt - класс Widget'а.
После ввода текста в Widget пользователь должен нажать кнопку ОК и после этого текст надо передать в MainWindow и начать работу с ним.

Пожалуйста подскажите как это сделать)

Ну или просто: как передать текст из одной формы к другой)

Последний раз редактировалось Asdprom; 10.08.2012 в 15:36. Причина: Дополнение)
Asdprom вне форума Ответить с цитированием
Старый 10.08.2012, 21:12   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

-помести в класс геттер и получай данные через него откуда захочешь.
-используй сигналы и слоты
rrrFer вне форума Ответить с цитированием
Старый 11.08.2012, 10:33   #3
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
-используй сигналы и слоты
а можно по - подробнее про этот способ?
Asdprom вне форума Ответить с цитированием
Старый 11.08.2012, 12:06   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

юзер нажимает на кнопку - кидаешь свой сигнал, с сигналом передаешь что там тебе надо.
Сигнал получит(получат) объекты, к которым ты приделаешь его с помощью connect, при этом будет выполнен код их слота (слота, который указан в том же connect).

в любой книжке про это написано, в самом начале ищи.

пример... взял я отсюда: http://pro-prof.com/archives/619 что-то типа бегущей строки и чуть-чуть изменил(теперь у нас 2 бегущие строки, которые передают друг другу QString через сигналы и слоты)

main.cpp, смотри тут connect-ы
Код:
#include "runline.h"
#include <QObject>
#include <QApplication>

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

    RunLine line1( QObject ::tr("hello world "), 1 );
    line1 .show();
    line1 .active(true);

    RunLine line2( QObject ::tr(""), 1 );
    line2 .show();

    QObject ::connect( &line1, SIGNAL(testSig(QString)),
                       &line2, SLOT(sigProc(QString)));

    QObject ::connect( &line2, SIGNAL(testSig(QString)),
                       &line1, SLOT(sigProc(QString)));

    return a.exec();;
}

runline.h

Код:
#ifndef RUNLINE_H
#   define RUNLINE_H

#   include <QLabel>

    class RunLine :public QLabel {
    Q_OBJECT
        enum {
            TICK_LIMIT = 7
        };
    public:
        RunLine( const QString str_ = "", int speed = 0, QWidget *p = 0 );
        virtual ~RunLine();
        void active( bool );
    protected:
        virtual void timerEvent( QTimerEvent* );

    signals:
        void testSig( QString str );
    public slots:
        void sigProc( QString str );
    protected:
        int position_,
            timerID_;
        QString
            str_;
        int nTick_;
        int speed_;
        bool active_;
    };

#endif // RUNLINE_H
runline.cpp, смотри emit. Сигнал кидается каждые TICK_LIMIT тиков, при этом текст текущей бегущей строки заменятеся пустой строкой, а у второй строки устанавливается текст, который был в первой до вырабатывания сигнала.
Код:
#include "RunLine.h"
RunLine ::RunLine( const QString str, int speed, QWidget *p )
    :QLabel( p ), position_( 0 ), str_( str ), nTick_( 0 ), speed_( speed )
    ,active_( 0 ){
    setText( str_ );
    timerID_ = startTimer( (int) ( 1000 / speed ) );
}
RunLine ::~RunLine() {
    killTimer( timerID_ );
}
void RunLine ::timerEvent( QTimerEvent* ) {
    int length;
    length = str_ .length();

    if( ++position_ >= length )
        position_ = 0;

    setText( str_ .right( position_ ) + str_ .left( length - position_ ) );

    nTick_ += active_;
    if( TICK_LIMIT <= nTick_ ) {
        active_ =  0;
        nTick_ = 0;
        emit testSig( str_ );
        str_ = "";
    }
}

void RunLine ::sigProc( QString str ) {
    active_ = 1;
    str_ = str;
}
void RunLine ::active( bool active ) {
    active_ = active;
}
хотя...как-то криво тут все ))

Последний раз редактировалось rrrFer; 11.08.2012 в 12:11. Причина: опечатка
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных обьектов между 2-мя формами, через переменную Человек_Борща Общие вопросы Delphi 5 07.06.2012 03:32
Передача данных между формами SwitchOFF C# (си шарп) 5 13.05.2012 14:27
Передача данных между формами! MyXa Общие вопросы .NET 1 03.02.2011 18:15
Передача данных между формами katbka Общие вопросы C/C++ 1 16.05.2010 20:45
Передача и параметров между страницами Killer_djon JavaScript, Ajax 3 04.02.2009 04:07