簡體   English   中英

QT插槽和信號,顯示第二個窗體/窗口

[英]QT Slots and signals, showing 2nd form/window

我有一個QT應用程序,我正試圖在我的一個窗口中打開一個按鈕打開另一個窗口。

我到目前為止主要完成窗口對象的方式是這樣的:

Website control;
control.show();

這顯示我的第一個窗口很好,如果我以類似的方式聲明我的其他窗口也在運行時顯示,雖然這不是我想要的

然后在一個單獨的頭文件中:

class Website: public QWidget, public Ui::Website
{
public:
Website();
}

然后在相應的Cpp文件中我有:

Website::Website()
{
setupUi(this);
}

現在所有這一切都有效,並添加了一個自定義插槽,以便當我單擊一個按鈕時,它會在我的其他cpp文件中觸發一個插槽。 問題是我不知道如何顯示我的其他窗口,因為我在我的主要聲明它們所以無法訪問它們來做.show()?

任何幫助將不勝感激,我是C ++和QT的新手

我不清楚你想做什么。 但我可能理解你的斗爭,因為我第一次接觸這個框架時就有了自己的斗爭。

因此,假設您有一個MainWindow類來控制主窗口視圖。 比想要創建由Website類控制的第二個窗口。

然后,您希望連接這兩個類,以便當您單擊“網站”窗口上的按鈕時,MainWindow中會發生某些事情。

我為你做了一個簡單的例子,也是在GitHub上

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "website.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

public slots:
    void changeText();

private slots:
    void on_openButton_clicked();

private:
    Ui::MainWindow *ui;

    //You want to keep a pointer to a new Website window
    Website* webWindow;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

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

void MainWindow::changeText()
{
    ui->text->setText("New Text");
    delete webWindow;
}

void MainWindow::on_openButton_clicked()
{
    webWindow = new Website();
    QObject::connect(webWindow, SIGNAL(buttonPressed()), this, SLOT(changeText()));
    webWindow->show();
}

website.h

#ifndef WEBSITE_H
#define WEBSITE_H

#include <QDialog>

namespace Ui {
class Website;
}

class Website : public QDialog
{
    Q_OBJECT

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

signals:
    void buttonPressed();

private slots:
    void on_changeButton_clicked();

private:
    Ui::Website *ui;
};

#endif // WEBSITE_H

website.cpp

#include "website.h"
#include "ui_website.h"

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

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

void Website::on_changeButton_clicked()
{
    emit buttonPressed();
}

項目組成:

SOURCES += main.cpp\
        mainwindow.cpp \
    website.cpp

HEADERS  += mainwindow.h \
    website.h

FORMS    += mainwindow.ui \
    website.ui

考慮組成Uis:

  • 主窗口:一個名為“text”的標簽和一個名為“openButton”的按鈕
  • 網站窗口:一個名為“changeButton”的按鈕

因此,關鍵點是信號和插槽之間的連接以及窗口指針或引用的管理。

暫無
暫無

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

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