crossplatform.ru

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

> Передача данных от одной формы другой
neneTc
  опции профиля:
сообщение 9.3.2010, 17:02
Сообщение #1


Студент
*

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

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




Репутация:   0  


Здравствуйте! Столкнулся с проблемой при передаче данных от одной форме другой. Предлагали использовать сигналы-слоты, но формы не имеют указателя друг на друга чтобы через сигналы-слоты взаимодействовать. Как мне всё-таки сконнектить и осуществить передачу данных между двумя формами?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
PunX
  опции профиля:
сообщение 11.4.2010, 20:32
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 12.4.2009
Из: Димитровград
Пользователь №: 676

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




Репутация:   0  


Вообщем у меня получилось такое
login.h
Раскрывающийся текст
#ifndef LOGIN_H
#define LOGIN_H
#include <QtSql>
#include "dialog_login.h"
#include <QMessageBox>
QString error;

bool createConnections(QString db_dbname,QString db_host,QString db_username,QString db_pass)
{

    QSqlDatabase psql = QSqlDatabase::addDatabase( "QPSQL" );
    if ( !psql.driver() ) {
        error = "Failed to connect to psql driver";
        return FALSE;
    }

    psql.setDatabaseName( db_dbname );
    psql.setUserName( db_username );
    psql.setPassword( db_pass );
    psql.setHostName( db_host );

    if ( !psql.open() ) {
        error = "Failed to open orders database: " +
                psql.lastError().driverText();
        error = psql.lastError().databaseText();
        psql.close();
        return FALSE;
    }
    return TRUE;
}
bool enter (){
    Dialog dialog;
    if(dialog.exec() == QDialog::Rejected)
        return 1;
    if(!createConnections("postgres","localhost",dialog.login(),dialog.password()))
    {
        int i = QMessageBox::warning(0,"Warning","incorrect password or username\n"+error,QMessageBox::Ok);
        if(i == QMessageBox::Ok){
            enter();
        }
        return 1;
    }else{
        return 0;
    }

}
#endif // LOGIN_H

и main.cpp
Раскрывающийся текст
#include <QtGui/QApplication>
#include <QMessageBox>
#include "mainwindow.h"
#include "dialog_login.h"
#include "login.h"
int main(int argc, char *argv[])
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));    ///< Для строковых констант
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));        ///< Для функций перевода tr()
    QApplication a(argc, argv);
    if(enter()){
        return 0;
    }

    MainWindow w;
    w.show();
    return a.exec();
}

как сделать так чтобы db_username,db_dbname были доступны и эти переменные можно было использовать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.4.2010, 20:49
Сообщение #3


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Можно, например так:

main.cpp
Раскрывающийся текст
#include <QtGui/QApplication>
#include <QMessageBox>
#include "mainwindow.h"
#include "dialog_login.h"

bool createConnections(QString db_dbname,QString db_host,QString db_username,QString db_pass)
{

    QSqlDatabase psql = QSqlDatabase::addDatabase( "QPSQL" );
    if ( !psql.driver() ) {
        error = "Failed to connect to psql driver";
        return FALSE;
    }

    psql.setDatabaseName( db_dbname );
    psql.setUserName( db_username );
    psql.setPassword( db_pass );
    psql.setHostName( db_host );

    if ( !psql.open() ) {
        error = "Failed to open orders database: " +
                psql.lastError().driverText();
        error = psql.lastError().databaseText();
        psql.close();
        return FALSE;
    }
    return TRUE;
}

int main(int argc, char *argv[])
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));    ///< Для строковых констант
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));        ///< Для функций перевода tr()
    QApplication a(argc, argv);

    QString db_name = "postgres";
    QString db_login;

    forever
    {
        Dialog dialog;
        if(dialog.exec() == QDialog::Rejected)
            return 1;

        if( createConnections( db_name, "localhost", dialog.login(), dialog.password() ) )
        {
            db_login = dialog.login();
            break;
        }
        
        QMessageBox::warning(0,"Warning","incorrect password or username\n"+error,QMessageBox::Ok);
    }

    MainWindow w( db_name, db_login );
    w.show();
    return a.exec();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- neneTc   Передача данных от одной формы другой   9.3.2010, 17:02
- - kwisp   neneTc, Цитата(neneTc @ 9.3.2010, 17:02)...   9.3.2010, 17:05
- - neneTc   В main.cpp нет указателя на второе окно   9.3.2010, 17:08
- - kwisp   Цитата(neneTc @ 9.3.2010, 17:08) В main.c...   9.3.2010, 17:09
- - neneTc   а как осуществить передачу через коннект?   9.3.2010, 17:42
- - kwisp   так   9.3.2010, 17:45
- - neneTc   Спасибо) После 3 дней втыкания в различные маны вс...   9.3.2010, 18:16
|- - Vexar   Цитата(neneTc @ 10.3.2010, 1:16) Спасибо)...   19.3.2010, 3:55
- - Litkevich Yuriy   Цитата(Vexar @ 19.3.2010, 6:55) А можно п...   21.3.2010, 20:16
- - Vexar   Есть у меня Главное окно и Диалоговое. Мне нужно п...   22.3.2010, 1:38
- - Litkevich Yuriy   Вопрос: 1) Диалоговое окно модальное?   22.3.2010, 1:39
- - Vexar   Диалоговое окно, но лучше наверно сделать модально...   22.3.2010, 1:57
- - Litkevich Yuriy   обычно данные из диалоговых окон передаются в глав...   22.3.2010, 10:38
|- - danya   Цитата(Litkevich Yuriy @ 22.3.2010, 11:38...   1.11.2010, 23:34
- - PunX   Здравствуйте, я своём приложении мне необходимо сд...   8.4.2010, 19:04
- - BRE   А почему неймспейс называется Li::? По-умолчанию u...   8.4.2010, 19:14
- - PunX   Да, это исправил заменил на Ui, но это не помогло.   8.4.2010, 19:20
|- - BRE   Цитата(PunX @ 8.4.2010, 20:20) Да, это ис...   8.4.2010, 19:28
- - PunX   отредактировал до такого состояния, ошибок стало в...   8.4.2010, 19:30
|- - BRE   #include "dialog_login.h" login::l...   8.4.2010, 19:34
- - PunX   project_alfa/dialog_login.cpp:4: error...   8.4.2010, 19:38
- - BRE   А точно в файле ui_dialog_login.h класс называется...   8.4.2010, 19:43
- - PunX   Спасибо нашёл ошибку) надо было имя класса поменят...   8.4.2010, 19:50
- - Litkevich Yuriy   Цитата(PunX @ 8.4.2010, 23:04) :QDialog(p...   8.4.2010, 19:53
- - PunX   Сейчас формы вызываются, всё вроде работает. Переч...   8.4.2010, 20:03
- - PunX   Поставлю вопрос по другому, можно ли сделать так ч...   8.4.2010, 22:09
- - Litkevich Yuriy   Цитата(PunX @ 9.4.2010, 0:03) Подозреваю ...   8.4.2010, 22:10
- - PunX   Извините может за глупые вопросы, могли бы вы прив...   8.4.2010, 22:17
- - Litkevich Yuriy   Цитата(PunX @ 9.4.2010, 2:17) как вызвать...   9.4.2010, 7:06
- - PunX   Всё прекрасно работает и окно входа и потом запуск...   11.4.2010, 18:52
|- - BRE   Можно передать их в конструкторе MainWindow: int m...   11.4.2010, 18:56
- - PunX   Вообщем у меня получилось такое login.h Раскрывающ...   11.4.2010, 20:32
|- - BRE   Цитата(PunX @ 11.4.2010, 21:32) как сдела...   11.4.2010, 20:35
|- - BRE   Можно, например так: main.cpp Раскрывающийся текс...   11.4.2010, 20:49
- - PunX   Доступны для того чтобы вывести их на форму, т.е. ...   11.4.2010, 20:37
- - PunX   Если делать таким вариантом то выдаёт error: no ma...   11.4.2010, 20:55
|- - BRE   Цитата(PunX @ 11.4.2010, 21:55) Если дела...   11.4.2010, 20:59
- - Litkevich Yuriy   лучше сделать отдельный диалог для настройки соеди...   11.4.2010, 20:58
- - PunX   Попробую сделать с файлом конфигурации. Спасибо.   11.4.2010, 21:00
- - PunX   Работа через файл это конечно хорошо, но решил раз...   11.4.2010, 22:33
- - Litkevich Yuriy   Цитата(PunX @ 12.4.2010, 2:33) QString l ...   12.4.2010, 8:32
- - PunX   Да, написал туфту наверное, но как правильно доста...   12.4.2010, 8:49
- - Litkevich Yuriy   Цитата(PunX @ 12.4.2010, 12:49) Да, напис...   12.4.2010, 8:54
- - PunX   Ожидал что вернется значение переменной логин   12.4.2010, 9:05
- - Litkevich Yuriy   к членам объекта (экземпляра) класса обращаются та...   12.4.2010, 9:23
- - PunX   Спасибо за подробное разъяснение, но не понятно ка...   12.4.2010, 9:38
- - Litkevich Yuriy   вот этот код: QString l = MainWindow::db_l...   12.4.2010, 9:40
- - PunX   в функции void MainWindow::chengeEvent(QEvent *e) ...   12.4.2010, 10:43
- - Litkevich Yuriy   Цитата(PunX @ 12.4.2010, 14:43) в функции...   12.4.2010, 13:26
- - PunX   Хм, прочитав ещё 44 сообщение, делаю следующее ui-...   12.4.2010, 15:58
|- - BRE   Цитата(PunX @ 12.4.2010, 16:58) Хм, прочи...   12.4.2010, 16:00
- - Litkevich Yuriy   Цитата(BRE @ 12.4.2010, 20:00) Для чего с...   12.4.2010, 16:03
- - PunX   Если сделать show() для объекта db то приложение р...   12.4.2010, 16:04
- - PunX   На данный момент у меня в MainWindow 2 конструктор...   12.4.2010, 19:58
|- - BRE   Цитата(PunX @ 12.4.2010, 20:58) На данный...   12.4.2010, 19:59
- - PunX   MainWindow::MainWindow(QWidget *parent...   12.4.2010, 20:02
|- - BRE   Первый консруктор тебе не нужен, ведь ты должен об...   12.4.2010, 20:05
- - PunX   Я наверное уже замучал всякими вопросами дурацкими...   12.4.2010, 20:18
- - BRE   В файле mainwindow.h декларируй его так: class Mai...   12.4.2010, 20:21
- - PunX   О, заработало Спасибо! Но пока сыплються вор...   12.4.2010, 20:28
|- - BRE   Покажи, что у тебя в mainwindow.h и mainwindow.cpp...   12.4.2010, 20:35
- - Litkevich Yuriy   Цитата(PunX @ 12.4.2010, 23:58) вот и пол...   12.4.2010, 20:36
- - PunX   Спасибо большое за "разжёвывание" матерь...   12.4.2010, 20:45
- - Litkevich Yuriy   я предлагаю тему переместить из Qt в технику прогр...   12.4.2010, 20:49


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


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




RSS Текстовая версия Сейчас: 14.1.2025, 20:04