QT中对主窗口的引用

时间:2017-01-09 20:14:54

标签: c++ qt class

我在QT角色创作者中制作了允许你绘制服装的各个部分,但我想为用户添加一个选项,他自己可以选择外观,例如可用的鞋子,所以我创建了一个新的鞋子窗口和在那里我设置了6个按钮,这些只是这些鞋子的图像,我希望用户可以点击主窗口中的按钮,在qlabel中收到他的有趣照片,但不太了解如何连接。我会请求帮助!我真的很感激!!!对不起我的英语,但我来自波兰。

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 = 0);
    ~MainWindow();

private slots:
    void on_przycisk_zamykania_clicked();

    void on_przycisk_informacje_clicked();

    void on_przycisk_powrotu_clicked();

    void on_przycisk_graj_clicked();

    void on_powrot_clicked();

    void on_losuj7_clicked();

    void on_losuj6_clicked();

    void on_losuj5_clicked();

    void on_losuj4_clicked();

    void on_losuj3_clicked();

    void on_losuj2_clicked();

    void on_losuj1_clicked();

    void on_wybierz7_clicked();

private:
    Ui::MainWindow* ui;

};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QPixmap"
#include "QPalette"
#include "buty.h"
#include "QObject"

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

    ui->opis->setTextFormat(Qt::RichText);
    ui->opis->setTextInteractionFlags(Qt::TextBrowserInteraction);
    ui->opis->setOpenExternalLinks(true);

    ui->copyright->setTextFormat(Qt::RichText);
    ui->copyright >setTextInteractionFlags(Qt::TextBrowserInteraction);
    ui->copyright->setOpenExternalLinks(true);

    QPalette *palette1 = new QPalette();
    palette1->setColor(QPalette::Text,Qt::white);
    ui->imie->setPalette(*palette1);

    QPalette *palette2 = new QPalette();
    palette2->setColor(QPalette::Text,Qt::white);
    ui->nazwisko->setPalette(*palette2);

    QPalette *palette3 = new QPalette();
    palette3->setColor(QPalette::Text,Qt::white);
    ui->wiek->setPalette(*palette3);

    QPalette *palette4 = new QPalette();
    palette4->setColor(QPalette::Text,Qt::white);
    ui->info->setPalette(*palette4);

    QPalette *palette5 = new QPalette();
    palette5->setColor(QPalette::Text,Qt::white);
    ui->ocena->setPalette(*palette5);

    //Buty = new Buty(this);
         //connect(Buty,SIGNAL(on_buty1_clicked()),this,SLOT(on_buty1_clicked));
}

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

void MainWindow::on_przycisk_zamykania_clicked()
{
    close();
}

void MainWindow::on_przycisk_informacje_clicked()
{
    ui->stackedWidget->setCurrentIndex(1);
}

void MainWindow::on_przycisk_powrotu_clicked()
{
    ui->stackedWidget->setCurrentIndex(0);
}

void MainWindow::on_przycisk_graj_clicked()
{
    ui->stackedWidget->setCurrentIndex(2);
}

void MainWindow::on_powrot_clicked()
{
    ui->stackedWidget->setCurrentIndex(0);
}

void MainWindow::on_losuj7_clicked()
{
    ui->pytajnik7->setStyleSheet("background-color:#040f1e;");

    int losowanie7;

    srand (time(NULL));

    losowanie7 = rand() % 6 + 1;

    if (losowanie7 == 1)
    {
        QPixmap     b1(":/pliki_buty/img/losowanie_img/buty_img/buty1_wynik.png");
        ui->pytajnik7->setPixmap(b1);
    }

if (losowanie7 == 2)
{
    QPixmap b2(":/pliki_buty/img/losowanie_img/buty_img/buty2_wynik.png");
    ui->pytajnik7->setPixmap(b2);
}

if (losowanie7 == 3)
{
    QPixmap b3(":/pliki_buty/img/losowanie_img/buty_img/buty3_wynik.png");
    ui->pytajnik7->setPixmap(b3);
}

if (losowanie7 == 4)
{
    QPixmap b4(":/pliki_buty/img/losowanie_img/buty_img/buty4_wynik.png");
    ui->pytajnik7->setPixmap(b4);
}

if (losowanie7 == 5)
{
   QPixmap b5(":/pliki_buty/img/losowanie_img/buty_img/buty5_wynik.png");
   ui->pytajnik7->setPixmap(b5);
}

if (losowanie7 == 6)
{
    QPixmap b6(":/pliki_buty/img/losowanie_img/buty_img/buty6_wynik.png");
    ui->pytajnik7->setPixmap(b6);
}
}

void MainWindow::on_losuj6_clicked()
{
ui->pytajnik6->setStyleSheet("background-color:#040f1e;");

int losowanie6;

srand (time(NULL));

losowanie6 = rand() % 6 + 1;

if (losowanie6 == 1)
{
    QPixmap s1(":/pliki_spodnie/img/losowanie_img/spodnie_img/spodnie1_wynik.png");
    ui->pytajnik6->setPixmap(s1);
}

if (losowanie6 == 2)
{
    QPixmap s2(":/pliki_spodnie/img/losowanie_img/spodnie_img/spodnie2_wynik.png");
    ui->pytajnik6->setPixmap(s2);
}

if (losowanie6 == 3)
{
    QPixmap s3(":/pliki_spodnie/img/losowanie_img/spodnie_img/spodnie3_wynik.png");
    ui->pytajnik6->setPixmap(s3);
}

if (losowanie6 == 4)
{
    QPixmap s4(":/pliki_spodnie/img/losowanie_img/spodnie_img/spodnie4_wynik.png");
    ui->pytajnik6->setPixmap(s4);
}

if (losowanie6 == 5)
{
    QPixmap s5(":/pliki_spodnie/img/losowanie_img/spodnie_img/spodnie5_wynik.png");
    ui->pytajnik6->setPixmap(s5);
}

if (losowanie6 == 6)
{
    QPixmap s6(":/pliki_spodnie/img/losowanie_img/spodnie_img/spodnie6_wynik.png");
    ui->pytajnik6->setPixmap(s6);
}
}

void MainWindow::on_losuj5_clicked()
  {
    ui->pytajnik5->setStyleSheet("background-color:#040f1e;");

int losowanie5;

srand (time(NULL));

losowanie5 = rand() % 6 + 1;

if (losowanie5 == 1)
{
    QPixmap k1(":/pliki_korpus/img/losowanie_img/korpus_img/korpus1_wynik.png");
    ui->pytajnik5->setPixmap(k1);
}

if (losowanie5 == 2)
{
    QPixmap k2(":/pliki_korpus/img/losowanie_img/korpus_img/korpus2_wynik.png");
    ui->pytajnik5->setPixmap(k2);
}

if (losowanie5 == 3)
{
    QPixmap k3(":/pliki_korpus/img/losowanie_img/korpus_img/korpus3_wynik.png");
    ui->pytajnik5->setPixmap(k3);
}

if (losowanie5 == 4)
{
    QPixmap k4(":/pliki_korpus/img/losowanie_img/korpus_img/korpus4_wynik.png");
    ui->pytajnik5->setPixmap(k4);
}

if (losowanie5 == 5)
{
    QPixmap k5(":/pliki_korpus/img/losowanie_img/korpus_img/korpus5_wynik.png");
    ui->pytajnik5->setPixmap(k5);
}

if (losowanie5 == 6)
{
    QPixmap k6(":/pliki_korpus/img/losowanie_img/korpus_img/korpus6_wynik.png");
    ui->pytajnik5->setPixmap(k6);
}
}

void MainWindow::on_losuj4_clicked()
{
ui->pytajnik4->setStyleSheet("background-color:#040f1e;");

int losowanie4;

srand (time(NULL));

losowanie4 = rand() % 6 + 1;

if (losowanie4 == 1)
{
    QPixmap w1(":/pliki_wlosy/img/losowanie_img/wlosy_img/wlosy1_wynik.png");
    ui->pytajnik4->setPixmap(w1);
}

if (losowanie4 == 2)
{
    QPixmap w2(":/pliki_wlosy/img/losowanie_img/wlosy_img/wlosy2_wynik.png");
    ui->pytajnik4->setPixmap(w2);
}

if (losowanie4 == 3)
{
    QPixmap w3(":/pliki_wlosy/img/losowanie_img/wlosy_img/wlosy3_wynik.png");
    ui->pytajnik4->setPixmap(w3);
}

if (losowanie4 == 4)
{
    QPixmap w4(":/pliki_wlosy/img/losowanie_img/wlosy_img/wlosy4_wynik.png");
    ui->pytajnik4->setPixmap(w4);
}

if (losowanie4 == 5)
{
    QPixmap w5(":/pliki_wlosy/img/losowanie_img/wlosy_img/wlosy5_wynik.png");
    ui->pytajnik4->setPixmap(w5);
}

if (losowanie4 == 6)
{
    QPixmap w6(":/pliki_wlosy/img/losowanie_img/wlosy_img/wlosy6_wynik.png");
    ui->pytajnik4->setPixmap(w6);
}
}

void MainWindow::on_losuj3_clicked()
{
ui->pytajnik3->setStyleSheet("background-color:#040f1e;");

int losowanie3;

srand (time(NULL));

losowanie3 = rand() % 6 + 1;

if (losowanie3 == 1)
{
    QPixmap o1(":/pliki_oczy/img/losowanie_img/oczy_img/oczy1_wynik.png");
    ui->pytajnik3->setPixmap(o1);
}

if (losowanie3 == 2)
{
    QPixmap o2(":/pliki_oczy/img/losowanie_img/oczy_img/oczy2_wynik.png");
    ui->pytajnik3->setPixmap(o2);
}

if (losowanie3 == 3)
{
    QPixmap o3(":/pliki_oczy/img/losowanie_img/oczy_img/oczy3_wynik.png");
    ui->pytajnik3->setPixmap(o3);
}

if (losowanie3 == 4)
{
    QPixmap o4(":/pliki_oczy/img/losowanie_img/oczy_img/oczy4_wynik.png");
    ui->pytajnik3->setPixmap(o4);
}

if (losowanie3 == 5)
{
    QPixmap o5(":/pliki_oczy/img/losowanie_img/oczy_img/oczy5_wynik.png");
    ui->pytajnik3->setPixmap(o5);
}

if (losowanie3 == 6)
{
    QPixmap o6(":/pliki_oczy/img/losowanie_img/oczy_img/oczy6_wynik.png");
    ui->pytajnik3->setPixmap(o6);
}
}

void MainWindow::on_losuj2_clicked()
{
ui->pytajnik2->setStyleSheet("background-color:#040f1e;");

int losowanie2;

srand (time(NULL));

losowanie2 = rand() % 6 + 1;

if (losowanie2 == 1)
{
    QPixmap u1(":/pliki_usta/img/losowanie_img/usta_img/usta1_wynik.png");
    ui->pytajnik2->setPixmap(u1);
}

if (losowanie2 == 2)
{
    QPixmap u2(":/pliki_usta/img/losowanie_img/usta_img/usta2_wynik.png");
    ui->pytajnik2->setPixmap(u2);
}

if (losowanie2 == 3)
{
    QPixmap u3(":/pliki_usta/img/losowanie_img/usta_img/usta3_wynik.png");
    ui->pytajnik2->setPixmap(u3);
}

if (losowanie2 == 4)
{
    QPixmap u4(":/pliki_usta/img/losowanie_img/usta_img/usta4_wynik.png");
    ui->pytajnik2->setPixmap(u4);
}

if (losowanie2 == 5)
{
    QPixmap u5(":/pliki_usta/img/losowanie_img/usta_img/usta5_wynik.png");
    ui->pytajnik2->setPixmap(u5);
}

if (losowanie2 == 6)
{
    QPixmap u6(":/pliki_usta/img/losowanie_img/usta_img/usta6_wynik.png");
    ui->pytajnik2->setPixmap(u6);
}
}

void MainWindow::on_losuj1_clicked()
{
ui->pytajnik1->setStyleSheet("background-color:#040f1e;");

int losowanie1;

srand (time(NULL));

losowanie1 = rand() % 6 + 1;

if (losowanie1 == 1)
{
    QPixmap a1(":/pliki_akcesoria/img/losowanie_img/akcesoria_img/akcesoria1_wynik.png");
    ui->pytajnik1->setPixmap(a1);
}

if (losowanie1 == 2)
{
    QPixmap a2(":/pliki_akcesoria/img/losowanie_img/akcesoria_img/akcesoria2_wynik.png");
    ui->pytajnik1->setPixmap(a2);
}

if (losowanie1 == 3)
{
    QPixmap a3(":/pliki_akcesoria/img/losowanie_img/akcesoria_img/akcesoria3_wynik.png");
    ui->pytajnik1->setPixmap(a3);
}

if (losowanie1 == 4)
{
    QPixmap a4(":/pliki_akcesoria/img/losowanie_img/akcesoria_img/akcesoria4_wynik.png");
    ui->pytajnik1->setPixmap(a4);
}

if (losowanie1 == 5)
{
    QPixmap a5(":/pliki_akcesoria/img/losowanie_img/akcesoria_img/akcesoria5_wynik.png");
    ui->pytajnik1->setPixmap(a5);
}

if (losowanie1 == 6)
{
    QPixmap a6(":/pliki_akcesoria/img/losowanie_img/akcesoria_img/akcesoria6_wynik.png");
    ui->pytajnik1->setPixmap(a6);
}
}

void MainWindow::on_wybierz7_clicked()
{
Buty buty;
buty.setModal(true);
buty.exec();
}

buty.h

#ifndef BUTY_H
#define BUTY_H

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

namespace Ui {
class Buty;
}

class Buty : public QDialog
{
    Q_OBJECT

public:
    explicit Buty(QWidget *parent = 0);
    ~Buty();

private slots:
    void on_wroc_do_gry_clicked();

public slots:
    void on_buty1_clicked();

private:
    Ui::Buty* ui;

};

#endif // BUTY_H

buty.cpp

#include "buty.h"
#include "ui_buty.h"
#include "mainwindow.h"
#include "QObject"

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

//QDialog::connect(ui->buty1, SIGNAL(clicked()), QMainWindow, SLOT(pytajnik7()));
connect(ui->buty1, SIGNAL(clicked()), this, SLOT(pytajnik7()));
}

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

void Buty::on_wroc_do_gry_clicked()
{
close();
}

void Buty::on_buty1_clicked()
{
QPixmap b1(":/pliki_buty/img/losowanie_img/buty_img/buty1_wynik.png");
ui->pytajnik7->setPixmap(b1);
}

2 个答案:

答案 0 :(得分:0)

我解释的问题如下:

  

如何从我的其他窗口小部件代码更新主窗口小部件   应用?

好吧,你需要指向QMainWindow的指针,它通常是基于小部件的应用程序中唯一的主窗口。您可以创建一个全局指针变量QMainWindow或尝试找到它:

// TODO: make it template to resolve specific type?
QMainWindow* findMainWindow()
{
    for(QWidget* pWidget : QApplication::topLevelWidgets())
    {
        QMainWindow pMainWnd = qobject_cast<QMainWindow*>(pWidget);
        if (pMainWnd)
           return pMainWnd;
    }
    return nullptr;
}


// UI receives an event that needs to pass the data to main window
void MyWidget::onItemsSelected(const QList<Item>& goods)
{
    MyMainWindow* pMainWindow = qobject_cast<MyMainWindow*>(findMainWindow());
    if (!pMainWindow)
    {
        qWarning() << "Cannot find this app main window!";
        return;
    }
    // make it specific to your data
    pMainWindow->updateGoodsView( goods );
}

答案 1 :(得分:0)

回答标题

  

QT中对主窗口的引用

在您的代码中,您需要在构造函数中将mainwindow传递给子窗口,然后通过parent()parentWidget()使用它。

所以在你的代码中:

void MainWindow::on_wybierz7_clicked()
{
Buty buty(this);  //pay attention to this
buty.setModal(true);
buty.exec();
}
...
Buty::Buty(QWidget *parent) :
QDialog(parent),
ui(new Ui::Buty)
{
ui->setupUi(this);

connect(ui->buty1, SIGNAL(clicked()), parent(), SLOT(pytajnik7()));
}

但是,当儿童对话&#34;知道&#34;关于父槽。更好的做法是在主窗口代码中建立连接。 对于子对话框中的声明信号,例如mySignal()。然后将按钮的clicked()信号连接到新信号,然后在主窗口中进行最终连接:

void MainWindow::on_wybierz7_clicked()
{
Buty buty(this);  //pay attention to this
buty.setModal(true);
connect(&buty, SIGNAL(mySignal()), this, SLOT(pytajnik7()));
buty.exec();
}
...

class Buty : public QDialog
{
Q_OBJECT
...
signals:
void mySignal();
...
};

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

connect(ui->buty1, SIGNAL(clicked()), this, SIGNAL(mySignal()));
}

希望我理解你的问题是正确的。