crossplatform.ru

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

7 страниц V  « < 2 3 4 5 6 > »   
Ответить в данную темуНачать новую тему
> Передача данных от одной формы другой
PunX
  опции профиля:
сообщение 11.4.2010, 20:32
Сообщение #31


Студент
*

Группа: Участник
Сообщений: 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:35
Сообщение #32


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

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

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




Репутация:   44  


Цитата(PunX @ 11.4.2010, 21:32) *
как сделать так чтобы db_username,db_dbname были доступны и эти переменные можно было использовать?

Доступны где?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 11.4.2010, 20:37
Сообщение #33


Студент
*

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

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




Репутация:   0  


Доступны для того чтобы вывести их на форму, т.е. доступны в mainwindow.cpp.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.4.2010, 20:49
Сообщение #34


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

Группа: Участник
Сообщений: 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();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 11.4.2010, 20:55
Сообщение #35


Студент
*

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

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




Репутация:   0  


Если делать таким вариантом то выдаёт error: no matching function for call to 'MainWindow::MainWindow(QString&, QString&)'
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.4.2010, 20:58
Сообщение #36


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


лучше сделать отдельный диалог для настройки соединения с БД, при старте программы в конструкторе главного окна читать настройки из INI-файла, вызывать некий метод главного окна, который настроит соединение. А когда понадобится изменить настройки, вызывать диалог (он должен будет прочитать настройки из INI-файла), чтобы пользователь в вёл новые данные, если ввод успешен, то сохранять настройки в INI-файл и опять вызывать метод настраивающий соединение.

Цитата(PunX @ 12.4.2010, 0:55) *
MainWindow::MainWindow(QString&, QString&)'
дак ты напиши конструктор, который принимает логин и пароль.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.4.2010, 20:59
Сообщение #37


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

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

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




Репутация:   44  


Цитата(PunX @ 11.4.2010, 21:55) *
Если делать таким вариантом то выдаёт error: no matching function for call to 'MainWindow::MainWindow(QString&, QString&)'

Ну так напиши такой конструктор для MainWindow, который будет принимать эти параметры и сохранять/использовать их.

Для освоения Qt, необходимо знать C++. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 11.4.2010, 21:00
Сообщение #38


Студент
*

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

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




Репутация:   0  


Попробую сделать с файлом конфигурации. Спасибо.

Сообщение отредактировал PunX - 11.4.2010, 22:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PunX
  опции профиля:
сообщение 11.4.2010, 22:33
Сообщение #39


Студент
*

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

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




Репутация:   0  


Работа через файл это конечно хорошо, но решил разобраться с другим вариантом, сдвиги есть, но результата положительного пока нет.
1.Создал конструктор
MainWindow::MainWindow(QString db_l, QString db_n)
{
db_login = db_l;
db_name = db_n;
}
db_name и db_login; объявленны public в классе MainWindow.
2.Создаю объекты
MainWindow db(db_name, db_login);
MainWindow w;
w.show();

3. Чтобы достать переменные, делаю следующее
QString l = MainWindow::db_login;
ui->label_3->setText(l);
Компиляция проходит без ошибок, но в label_3 ничего нет. Пока не могу понять в чём ошибка.
P.S. Извините за глупые вопросы, стараюсь во всём разобраться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.4.2010, 8:32
Сообщение #40


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(PunX @ 12.4.2010, 2:33) *
QString l = MainWindow::db_login;
а вот это что за запись? как ты её понимаешь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

7 страниц V  « < 2 3 4 5 6 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 28.12.2024, 17:40