crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
gvenihvivar
  опции профиля:
сообщение 6.12.2013, 15:48
Сообщение #1


Студент
*

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

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




Репутация:   0  


В MainWindow создала mdiarea. В mdi вывожу новые созданные mainwindow.

Проблема в следующем. В главном окне результаты расчета меняются раз в секунда, как должны. А вот в окне в мди нет. Хотя туда выводится такой же класс с расчетами.

Как заставить обновляться виджет в mdiarea.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 6.12.2013, 16:55
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


А можно на код взглянуть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gvenihvivar
  опции профиля:
сообщение 6.12.2013, 17:09
Сообщение #3


Студент
*

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

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




Репутация:   0  


это создается виджет. Метод запускается по нажатию кнопки.
void MainWindow::leakf()
{
    leakwindow* lkf = new  leakwindow;
    lkf->setWindowTitle(tr(" Утечка "));
   // lkf->setMinimumSize(500,300);
    ui->mdiarea->addSubWindow(lkf);
    lkf->show();
 }


сам класс окна реализован так
Раскрывающийся текст

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


    QDateTime dt;
    QDateTime dt1;
    QTime t (0,0,0);
    int dtsec (0);
    dt1 = dt.currentDateTime().addDays(-1);

    time_b = dt1.toString("dd/MM/yy hh:mm:ss");

    dtsec = dt1.secsTo(dt.currentDateTime());

    cont=QString::number(dtsec /3600)+ ":"+
            QString::number(dtsec %3600/60)+":"+
            QString::number(dtsec %3600%60);

    place = 10;
    diam = 0.02;
    flow = 0.2;
    amount = 20;
 

    ui->label_2->setText(time_b);
    ui->label_4->setText(cont);
    ui->label_6->setText(QString::number(place));
    ui->label_8->setText(QString::number(diam));
    ui->label_10->setText(QString::number(flow));
    ui->label_12->setText(QString::number(amount));
    ui->label_14->setText(QString::number(x04));
    ui->label_17->setText(QString::number(q04));
    ui->label_19->setText(QString::number(d04));

    ui->label_27->setText(QString::number(x02));
    ui->label_29->setText(QString::number(q02));
    ui->label_31->setText(QString::number(d02));

    ui->label_21->setText(QString::number(x03));
    ui->label_23->setText(QString::number(q03));
    ui->label_25->setText(QString::number(d03));

    ui->label_45->setText(QString::number(x01));
    ui->label_47->setText(QString::number(q01));
    ui->label_49->setText(QString::number(d01));



}

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

void leakwindow::leakcalc(float strPb, float strQb, float strRob,
                          float strPe, float strQe, float strRoe,
                          bool &pevent1, bool &pevent2, bool &tevent1,
                          bool &tevent2, QTime &prevt1,  QTime &prevt2)

{
    DirectCalc calc;
    calc.pb   = strPb;
    calc.qb   = strQb;
    calc.rob  = strRob;
    calc.pe   = strPe;
    calc.qe   = strQe;
    calc.roe  = strRoe;
    calc.etaCalc();
    float peCalc;
    float peCalcEta;
    calc.pressCalc(peCalc, peCalcEta);

    calc.gidravlic(x01, d01);
    calc.lostpressure(x02, d02, x03);
    calc.lostflow(calc.qb,calc.qe, 0.5 );// disup in t/h
    float dp1;
    float dp2;

    calc.DiffPressure(x04,dp1,dp2,pevent1,pevent2,tevent1,
                      tevent2,prevt1,  prevt2);
    

}
void leakwindow::paintEvent(QPaintEvent* e)
{


}



так вызывается метод с расчетами в файле самого главного окна. Вызывается один раз в секунду.
leakwindow lkwnd;
lkwnd.leakcalc(strPb*98066.55,  strQb*1000/strRob/3600,  strRob,
                strPe*98066.55,  strQe*1000/strRoe/3600,  strRoe,
                pevent1,  pevent2,  tevent1,
                tevent2,  prevt1,   prevt2);



если нажатием кнопки открывать дочернее окно то данные в label изменяются, а вот в реальном времени ни как
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 6.12.2013, 18:05
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


Так, если я правильно понял. Так вы создаете дочернее окно
void MainWindow::leakf()
{
    leakwindow* lkf = new  leakwindow;
    lkf->setWindowTitle(tr(" Утечка "));
   // lkf->setMinimumSize(500,300);
    ui->mdiarea->addSubWindow(lkf);
    lkf->show();
 }


тогда, по идее, чтобы запустить в нем вывод расчетов, надо сделать так:
lkf->leakcalc(strPb*98066.55,  strQb*1000/strRob/3600,  strRob,
                strPe*98066.55,  strQe*1000/strRoe/3600,  strRoe,
                pevent1,  pevent2,  tevent1,
                tevent2,  prevt1,   prevt2);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.12.2013, 9:34
Сообщение #5


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

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

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




Репутация:   94  


gvenihvivar подход в корне не верен.
экземпляр QMainWindow в программе должен быть только один иначе жди глюков - это два
В addSubWindow передаётся указатель на QMdiSubWindow (пример в документации) - это раз

Вообще при работе с MDI нужно оперировать только указателем на QMdiSubWindow вместо указателя на виджет, либо делать наследника сразу от QMdiSubWindow.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 16:08