Russian Qt Forum
Ноябрь 26, 2024, 20:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не видно член класса из другого класса  (Прочитано 2856 раз)
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 после первой правки сохранялось введенной значение после закрытия окна.
Помогите, пожалуйста.  Грустный
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Ноябрь 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));
« Последнее редактирование: Ноябрь 05, 2013, 23:26 от gil9red » Записан

TmYAG
Гость
« Ответ #2 : Ноябрь 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 не показывается и я не могу посмотреть ее значения почему так?
Записан
TmYAG
Гость
« Ответ #3 : Ноябрь 09, 2013, 22:25 »

Ларчик просто открывался. Я пользовался "перейти к слоту" и у меня создавалась функция. когда же я реализовал это через сигналы и слоты то все получилось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.