crossplatform.ru

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


  Ответ в Передача данных от одной формы другой
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
danya Дата 1.11.2010, 23:34
 
Цитата(Litkevich Yuriy @ 22.3.2010, 11:38) *
обычно данные из диалоговых окон передаются в главное, по закрытию диалогового окна.
Для этого в диалоговом окне предусматривают методы чтения данных.
Например, для чтения текста из LoginSysDialog::LineEditName, можно написать метод LoginSysDialog::name, тогда в главном окне после закрытия диалога просто вызываешь этот метод.
Вот у меня диалог ввода имени пользователя и пароля:
class DialogLogin : public QDialog, public Ui::DialogLogin
{
    Q_OBJECT
public:
    DialogLogin(QWidget* parent= 0);
    
    QString    login() const;
    QString    password() const;
};
Вот так используется в главном окне:
DialogLogin    loginDialog(this);

if (loginDialog.exec() == QDialog::Accepted)
{
    login=loginDialog.login();
    pswd=loginDialog.password();
}

можете поподробнее описать мне также необходимо передать значения из диалога в основную форму
в чем у меня ошибка?
Раскрывающийся текст
#ifndef NEWDOG_H
#define NEWDOG_H

#include <QDialog>

namespace Ui {
    class newdog;
}

class newdog : public QDialog
{
    Q_OBJECT

public:
    explicit newdog(QWidget *parent = 0);
    ~newdog();
    QString aname() const;


private:
    Ui::newdog *ui;

private slots:
    void on_buttonBox_accepted();
};

#endif // NEWDOG_H

#include "newdog.h"
#include "ui_newdog.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"

newdog::newdog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::newdog)
{
    ui->setupUi(this);
}


newdog::~newdog()
{
    delete ui;
}

void newdog::on_buttonBox_accepted()
{

}

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "newdog.h"
#include "QDialog"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_2_clicked()
{
    QString name;
    newdog form(this);

    if (form.exec() == QDialog::Accepted)
    {
        name=form.aname();
    }
    ui->label->setText(name);
}

void MainWindow::on_pushButton_2_clicked(bool checked)
{

}

Litkevich Yuriy Дата 12.4.2010, 20:49
  я предлагаю тему переместить из Qt в технику программирования, т.к. тут вопросы только по С/С++
PunX Дата 12.4.2010, 20:45
  Спасибо большое за "разжёвывание" матерьяла и за терпение!
Litkevich Yuriy Дата 12.4.2010, 20:36
 
Цитата(PunX @ 12.4.2010, 23:58) *
вот и получается что создаю 2 объекта.
а почему это вдруг так получается, для создания объекта нужен один конструктор, а какой из нескольких имеющихся выбрать тебе решать. Собственно их и делают несколько (перегружают), чтобы в разных ситуациях использовать. В одной ситуации нужен один, а в другой ситуации - другой




Цитата(PunX @ 13.4.2010, 0:28) *
mainwindow.h:23: warning: 'MainWindow::ui' will be initialized after
подобное сообщение компилятор пишет, для случая, когда ты используешь список инициализации:
Цитата
MainWindow::MainWindow(QString db_l, QString db_n, QWidget *parent ) :
QMainWindow(parent),
ui(new Ui::MainWindow), //
db_login( db_l ), // идёт вторым
db_name( db_n ) // идёт третим
В этом списке последовательность членов класса должна совпадать с последовательностью их объявления:
Цитата
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow::MainWindow( QString db_l, QString db_n, QWidget *parent = 0 );

private:
Ui::MainWindow *ui;
...
QString db_name; //идёт вторым
...
QString db_login; // идёт третим

};
как видишь тут последовательность отличается, а должна совпадать. Переставь либо в заголовочнике либо в списке инициализации. И всё будет путём
BRE Дата 12.4.2010, 20:35
  Покажи, что у тебя в mainwindow.h и mainwindow.cpp.
PunX Дата 12.4.2010, 20:28
  О, заработало :) Спасибо!
Но пока сыплються ворнинги
mainwindow.h:23: warning: 'MainWindow::ui' will be initialized after
на строку Ui::MainWindow *ui;
mainwindow.h:14: warning:   'QString MainWindow::db_login'
на строку QString db_login;
mainwindow.cpp:5: warning:   when initialized here
строка MainWindow::MainWindow(QString db_l, QString db_n, QWidget *parent ) .....
BRE Дата 12.4.2010, 20:21
  В файле mainwindow.h декларируй его так:
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow::MainWindow( QString db_l, QString db_n, QWidget *parent = 0 );
};

PunX Дата 12.4.2010, 20:18
  Я наверное уже замучал всякими вопросами дурацкими, но довести до конца и разобраться хочется, определил такой конструктор вместо тех двух, теперь создаю объект
MainWindow m(db_login,db_name); такой вариант конечно же не пойдёт
но и такой MainWindow m(db_login,db_name,QWidget *parent); тоже не проходит.
BRE Дата 12.4.2010, 20:05
  Первый консруктор тебе не нужен, ведь ты должен обязательно получить db_login и db_name.
MainWindow::MainWindow(QString db_l, QString db_n, QWidget *parent ) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    db_login( db_l ),
    db_name( db_n )
{
    ui->setupUi(this);
}

PunX Дата 12.4.2010, 20:02
 
MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::MainWindow(QString db_l, QString db_n)
{
    db_login = db_l;
    db_name = db_n;
}
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:59