簡體   English   中英

QT中對主窗口的引用

[英]The reference to the main window in QT

我在 QT 角色創建器中制作,允許您繪制服裝的各個部分,但我想添加一個選項,讓用戶自己可以選擇外觀,例如可用的鞋子,所以我為鞋子創建了一個新窗口並在那里設置6 個按鈕,它們只是這雙鞋的圖像,我希望用戶可以單擊主窗口中的按鈕在 qlabel 中接收他的有趣圖片,但不太知道如何連接。 我會尋求幫助! 我真的很感激!!! 對不起我的英語,但我來自波蘭。

主窗口.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

主窗口.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);
}

我將這個問題解釋為:

如何從我的應用程序中的其他小部件代碼更新主窗口小部件?

好吧,您需要指向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 );
}

回答標題

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()));
}

但是當子對話框“知道”父插槽時,通常是個壞主意。 更好的做法是在主窗口代碼中進行連接。 對於子對話框中的這個聲明信號,例如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()));
}

希望我理解你的問題是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM