Portál AbcLinuxu, 7. května 2025 00:49

Dotaz: Qt Creator

26.1.2012 15:26 hanysl
Qt Creator
Přečteno: 390×
Odpovědět | Admin
Ahoj chci se naučit programovat v Qt. Mám stáhnuté nejnovější prostředí s Designerem. Studuji informatiku a programování mi není úplně cizí.

Vždyž jsem zkoušel udělat aplikaci s více okny tak jsem narazil na problém. Nevím jak pomocí kliknutí např. z lišty v okně, př. Nápověda ->otevřu druhé okno. Dočetl jsem se že se to dělá pomocí funkce connect(). předpokládám, že když vložím nové okno pomocí Qt->Novy->... tak musím do ostatních souboru vložit includy hlaviček ostatních souborů.

Nevím si rady teda jak propojit signály a sloty těch dvou oken popř. widgetů

Mohl bych kdyžtak poprosit o vzorový řádek s kódem...

Děkuji za odpověď
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

skunkOS avatar 26.1.2012 19:05 skunkOS | skóre: 27 | blog: Tak nějak
Rozbalit Rozbalit vše Re: Qt Creator
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://developer.qt.nokia.com/doc/qt-4.8/signalsandslots.html
http://martinrotter.github.io
26.1.2012 19:30 hanysl
Rozbalit Rozbalit vše Re: Qt Creator
Díval jsem se na to ale stále mám stejný problém. Mám projekt a v něm 2 formuláře takže 2 hlavičkové soubory 2soubory cpp a main a 2 ui soubory

QWidget::connect(ui->actionNapoveda,SIGNAL(triggered()),Help,SLOT(show()));

u tohodle mi to háže chybu: Chyba:expected primary-expression before ',' token

Nevíte co s tím ?? Nebo kde by mohl být problém?
26.1.2012 20:46 MadCatX
Rozbalit Rozbalit vše Re: Qt Creator
Jste si jistý, že Help je instance třídy(=objekt), která odpovídá oknu s nápovědou. Např. tohle mi funguje dobře
connect(ui->actionExit, SIGNAL(triggered()), qApp, SLOT(exit()));
26.1.2012 21:19 hanysl
Rozbalit Rozbalit vše Re: Qt Creator
Vím že si mi chtěl pomoct ale pokud se nemýlím tak tohle zavře celou aplikaci

Mám soubor mainwindow.cpp:
#include "mainwindow.h"
#include "help.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->actionNapoveda,SIGNAL(triggered()),Help::ui,SLOT(show())); 
 // tady je problém
}

MainWindow::~MainWindow()
{
    delete ui;
}
Help.cpp
#include "help.h"
#include "mainwindow.h"
#include "ui_help.h"

Help::Help(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Help)
{
    ui->setupUi(this);
    this->hide();
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(hide()));
}

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

void Help::on_pushButton_clicked()
{
    this->close();

}
main.cpp
#include QtGui/QApplication 
#include "mainwindow.h"
#include "help.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}
Vzhledem, že jsem si pročetl kde co nechápu jak propojit 2 okna. Děkuji za pomoc
27.1.2012 03:51 MadCatX
Rozbalit Rozbalit vše Re: Qt Creator

V kódu vidím několik problémů. Pokud je toto celý zdroják, nevidím v něm nic, co by vytvořilo objekt třídy Help. Ten je nutné vytvořit buď v konstruktoru MainWindow, nebo ještě lépe až při požadavku na zobrazení okna s nápovědou.

Program se nepřeloží, protože voláš show() neexistujícího objektu. Bude potřeba upravit zdroják MainWindow např. takto

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->actionNapoveda, SIGNAL(triggered()), helpWindow, SLOT(show())); 
}
V hlavičce MainWindow bude potřeba vytvořit "Help helpWindow".

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.