Russian Qt Forum

Qt => Вопросы новичков => Тема начата: TmYAG от Ноябрь 05, 2013, 21:56



Название: Не видно член класса из другого класса
Отправлено: TmYAG от Ноябрь 05, 2013, 21:56
Здравствуйте, добрые люди! Я работаю над проектом. GUI в котором отображаются данные с COM порта.
Есть класс MainWindow (это меню и консоль), а так же есть SetDelay- окошко для задания параметра задержки, который отправляется перед приемом данных.
setdelay.h
Код:
#ifndef SETDELAY_H
#define SETDELAY_H

#include <QDialog>

namespace Ui {
class SetDelay;
}

class SetDelay : public QDialog
{
    Q_OBJECT
private slots:
    void apply();

public:
    explicit SetDelay(QWidget *parent = 0);
    ~SetDelay();
private:
    void getData();


private:
    Ui::SetDelay *ui;
public:
    QString delayms;
};

#endif // SETDELAY_H
setdelay.cpp
Код:
#include "setdelay.h"
#include "ui_setdelay.h"
#include <QLineEdit>
#include <QMessageBox>
SetDelay::SetDelay(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SetDelay)
{
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(apply()));
}

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


void SetDelay::apply()
{

    bool ok;
    getData();
    int val = delayms.toInt(&ok);
    if (!ok)
    {
        QMessageBox::critical(this,tr("Delay error"), "Set valid delay");
    }
    ui->lineEdit->setText(delayms);
    hide();
}

void SetDelay::getData()
{
  delayms = ui->lineEdit->text();
}
Мне необходимо получить delayms (или то что я ввел в lineEdit) и сделать его доступным в классе MainWindow
Кроме того, хотел реализовать, чтобы в lineEdit после первой правки сохранялось введенной значение после закрытия окна.
Помогите, пожалуйста.  :(


Название: Re: Не видно член класса из другого класса
Отправлено: gil9red от Ноябрь 05, 2013, 23:21
Код:
void SetDelay::apply()
{

    bool ok;
    getData();
    int val = delayms.toInt(&ok);
    if (!ok)
    {
        QMessageBox::critical(this,tr("Delay error"), "Set valid delay");
    }
    ui->lineEdit->setText(delayms);
    hide();
}

void SetDelay::getData()
{
  delayms = ui->lineEdit->text();
}

А для чего вы при выполнении функции apply(), вызываете функцию getData(), в которой в переменную delayms заносите, то что находится в lineedit, после чего, не измененную строку в переменной delayms заносите обратно в lineedit? :)

Если вам нужно какое то число взять, используйте стандартные диалоги ))

Объявляете:
Код:
#include <QInputDialog>

http://harmattan-dev.nokia.com/docs/library/html/qt4/qinputdialog.html

И используйте одну из статичных функций :)
В вашем случаи, нужно выбрать число, а значит:
Код:
bool ok;
int i = QInputDialog::getInt(this,
                             tr("QInputDialog::getInteger()"), // заголовок диалога
                             tr("Percentage:"), // описание того, для чего нам число
                             25, // текущее значение
                             0, // минимальное значение
                             100, // максимальное значение
                             1, // шаг
                             &ok); // проверка на закрытие диалога (false если диалог был отменен или закрыт)
if (ok)
   integerLabel->setText(tr("%1%").arg(i));


Название: Re: Не видно член класса из другого класса
Отправлено: TmYAG от Ноябрь 06, 2013, 10:00
Цитировать
А для чего вы при выполнении функции apply(), вызываете функцию getData(), в которой в переменную delayms заносите, то что находится в lineedit, после чего, не измененную строку в переменной delayms заносите обратно в lineedit? Улыбающийся
А там ведь по коннекту видно, что apply должна сохранить значение из lineEdit в переменную delayms. А раз это переменная public, то поидее я имею к ней доступ из другого класса.
Функция getData() собсно помещает значение из lineEdit в delayms понимаю, что огород. Далее я хотел, чтобы lineEdit запомнила значение delayms
Код:
ui->lineEdit->setText(delayms)
, после изменения (ввода) этого значения
 Просто сначала я пытался делать так:
Код:
QString SetDelay::getData()
{
    delayms = ui->lineEdit->text();
    return delayms
}
и эту функцию вызывать в mainwindow.cpp
Про <QInputDialog> не знал. Попробую. Однако теперь мне хочется понять в чем причина ошибки, тут?)
Кстати при дебагинге переменная delayms в workspace не показывается и я не могу посмотреть ее значения почему так?


Название: Re: Не видно член класса из другого класса
Отправлено: TmYAG от Ноябрь 09, 2013, 22:25
Ларчик просто открывался. Я пользовался "перейти к слоту" и у меня создавалась функция. когда же я реализовал это через сигналы и слоты то все получилось.