Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Tom_as 10. 09. 2012, 13:05:26

Název: C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: Tom_as 10. 09. 2012, 13:05:26
Ahojte,

můj problém je v tom že mám mainwindow.cpp (hlavni dialogvé okno) a addvirtualhosts.cpp (druhé dialogové okno). V mainwindow mám ListWidget, který naplním při spuštění programu. Potom chci přidat novou položku přes dialogové okno addvirtualhosts.cpp. Vše se provede jak má ale když v addvirtualhosts.cpp volám:

Kód: [Vybrat]
void addVirtualHosts::on_buttonBox_accepted()
{
.............
MainWindow *mMainWindow = new MainWindow ;
mMainWindow->refreshVirtualHostsList();

}

ve kterém je

Kód: [Vybrat]
void MainWindow::refreshVirtualHostsList(){

    this->ui->listVirtualHosts->clear();

}

tak se sice podle qDebugu funkce zavolá ale ListWidget nevyprázdní. Nevíte někdo jak tohle vyřešit? Napadá mě jen jedna věc a to je refresh Listu každou sekundu ale to se mě zdá moc náročné.
Název: Re:C++ Qt, Nerefreshuje se druhy formular
Přispěvatel: krabicezpapundeklu 10. 09. 2012, 13:52:04
Citace
MainWindow *mMainWindow = new MainWindow

Tohle vytvoří novou instanci.
Změň addvirtualhosts asi nějak takhle:

class AddVirtualHosts : public ...
{
public:
    AddVirtualHosts(..., MainWindow *mainWindow) : ..., mainWindow_(mainWindow)
    ...
private:
    MainWindow *mainWindow_;
    ...
}


Potom

void addVirtualHosts::on_buttonBox_accepted()
{
    ...
    mainWindow_->refreshVirtualHostsList();
}


Při vytváření addvirtualhosts z mainwindow potom:

... = new AddVirtualHosts(..., this);
Název: Re:C++ Qt, Nerefreshuje se druhy formular
Přispěvatel: Tom_as 10. 09. 2012, 14:59:09
Prosím tímto o trpělivost ale mám tohle:

addvirtualhosts.h >

Kód: [Vybrat]
#ifndef ADDVIRTUALHOSTS_H
#define ADDVIRTUALHOSTS_H

#include <QDialog>
#include <QSqlDatabase>
#include "mainwindow.h"

a v mainwindow.h

Kód: [Vybrat]
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "hosts.h"
#include "server.h"
#include "QLabel"
#include "QPlainTextEdit"
#include "QGridLayout"
#include "addvirtualhosts.h"

Samozrejmne se krizi include ale bez toho tezko muzu nastavit to co me pises nebo jsem neco prehledl?
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: krabicezpapundeklu 10. 09. 2012, 15:34:50
addvirtualhosts.h:

#ifndef ADDVIRTUALHOSTS_H
#define ADDVIRTUALHOSTS_H

#include <QDialog>
#include <QSqlDatabase>
#include "mainwindow.h" <--- odstranit
class MainWindow;<--- přidat


addvirtualhosts.cpp:

#include "mainwindow.h" <--- přidat
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: Tom_as 10. 09. 2012, 20:43:40
Mockrát děkuji za tvoji pomoc a trpělivost učím se to na projektu, který si dělám pro sebe a v hlavičkách ještě plavu. Chtěl bych se tě zeptat co přesně označuje

 AddVirtualHosts(..., MainWindow *mainWindow) : ..., mainWindow_(mainWindow)

Bohuzel me t Qt creator nebere
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: Tom_as 10. 09. 2012, 21:01:16
Tak uz se me to povedlo presne tak jak jsi psal. Problem je v tom ze jak kliknu na tlacitko Edit tak program spadne. Zjistil jsem ze to delat this, ... = new AddVirtualHosts(..., this);
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: krabicezpapundeklu 10. 09. 2012, 21:26:31
Můžeš poslat zdrojáky?
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: Tom_as 10. 09. 2012, 21:33:50
To nebude v zadnem pripade problem, docela bych rad vedel kde delam chybu. Na jaky email?
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: Tom_as 10. 09. 2012, 21:40:01
popripade muj email thmixcz@gmail.com nebo skype kocourcz
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: Tom_as 10. 09. 2012, 21:40:36
oprava thomixcz@gmail.com
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: jozeg 10. 09. 2012, 21:41:25
Skus ist na pokec.sk -> tam su vacsi odbornici, tito tu nestoja za nic! Ti poradia lepsie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: krabicezpapundeklu 10. 09. 2012, 21:59:27
krabicezpapundeklu@gmail.com
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: krabicezpapundeklu 11. 09. 2012, 08:52:14
Dík za zdrojáky.
Pokud jsem to správně pochopil, tak bude stačit když vrátíš změny co jsem ti radil a kód v void addVirtualHosts::on_buttonBox_accepted() změníš z:

MainWindow *mMainWindow = new MainWindow ;
mMainWindow->refreshVirtualHostsList();


na:

if(MainWindow *mainWindow = qobject_cast<MainWindow *>(parent()))
  mainWindow->refreshVirtualHostsList();
else
  qDebug("Parent neni MainWindow!"); // nemělo by nastat


Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: Tom_as 11. 09. 2012, 09:30:38
Skvele, tohle je naprosto ono co tomu chybelo. Mockrat ti dekuji za pomoc a trpělivost.
Název: Re:C++ Qt: nerefreshuje se druhý formulář
Přispěvatel: krabicezpapundeklu 11. 09. 2012, 10:04:42
V poho.