W jaki sposób odwoływać się do innych elementów w innych oknach?

0

Witam
Jestem tu nowy. Swoją przygodą z programowanie obiektowym rozpocząłem od samouczków internetowych Pana Zelenta. Postanowiłem spróbować swoich sił w programowaniu w środowisku Qt ,którego używa się w mojej pracy.

Program który usiłuję napisać ma dwa okna. Jego działanie jest następujące: w pierwszym oknie znajduje się przycisk i metka , po w ciśnięciu przycisku otwiera nam się drugie okno z przyciskiem po kliknięciu którego metka w pierwszym oknie powinna się zmienić i to pojawia się problem gdyż jestem w stanie zmieniać metki tylko w oknie na którym obecnie działam a nie na poprzednim , chciałbym odwoływać się do elementów w wielu otwartych oknach. Próbowałem napisać publiczną funkcję i do niej się odwołać , na wzór jednego z filmików z internetu ,ale nie działało. Proszę o poradę w jaki sposób odwoływać się do innych elementów, oraz co jeszcze powinienem wiedzieć odnośnie OOP i gdzie mogę szukać info.

po głowie chodzi mi ciągle coś takiego :

ui->label->setText(f.getLabel());

gdzie publiczna funkcja getLabel() ustawia stringa na jakiś tekst

dziękuję za poświęcony czas i odpowiedzi :)

A to kod który napisałem

Klasa okna

#include "dialog1.h"
#include "ui_dialog1.h"
#include <mainwindow.h>

Dialog1::Dialog1(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog1)
{
    ui->setupUi(this);
}

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

void Dialog1::on_pushButton_clicked()
{
        ui->label->setText("dddd");
}


QString Dialog1::getLabel()
{
    QString y = "ssss";
    return y;
   // return ui->label->text();
}

plik Main

#include "mainwindow.h"
#include <QApplication>
#include "dialog1.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Main Window

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <dialog1.h>


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

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

void MainWindow::on_pushButton_clicked()
{
    Dialog1 f;
    f.setModal(false);
    f.exec();

}

plik nagłówkowy dialog1.h

#ifndef DIALOG1_H
#define DIALOG1_H

#include <QDialog>
#include <QString>

namespace Ui {
class Dialog1;
}

class Dialog1 : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog1(QWidget *parent = nullptr);
    ~Dialog1();
    QString getLabel();

    private slots:
    void on_pushButton_clicked();

private:
    Ui::Dialog1 *ui;
};

#endif // DIALOG1_H

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
0
  • Tworzysz w dialogu sygnał z parametrem QString, który emitujesz w funkcji obsługującej QPushButton::clicked.
  • Tworzysz w oknie głównym slot z parametrem QString, zmieniający tekst w metce (co to jest metka?)
  • Przy tworzeniu dialogu łączysz sygnał ze slotem

E: Nie odpowiadaj w komentarzach tylko w postach. Tak, chodzi mi o connect.

1 użytkowników online, w tym zalogowanych: 0, gości: 1