QT插槽和信号,显示第二形式/窗口

QT Slots and signals, showing 2nd form/window

本文关键字:窗口 显示 插槽 信号 QT      更新时间:2023-10-16

我有一个QT应用程序,我正在尝试在一个窗口中打开另一个窗口。

我完成窗口对象的方式是这样:

Website control;
control.show();

这可以显示我的第一个窗口,如果我以类似的方式声明我的其他窗口,该窗口也在运行时显示,尽管这不是我想要的

然后在单独的标头文件中:

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

然后在相应的CPP文件中我有:

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

现在所有这些都可以使用,并添加了一个自定义插槽,因此当我单击一个按钮时,它会触发我的另一个CPP文件中的一个插槽。问题是,我不确定如何在我的主体中声明它们时如何显示我的另一个窗口,因此无法访问它们来做.show()?

任何帮助都将不胜感激,我是C 和QT

的新手

我不清楚您想做什么。但是我可能会理解您的斗争,因为我第一次接近这个框架时就有自己的斗争。

因此,假设您有一个控制主窗口视图的MainWindow类。比您想创建一个由网站类控制的第二个窗口。

然后,您想连接两个类,以便当您单击网站窗口上的按钮时,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();
}

网站.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

weblet.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

考虑要组成的UI:

  • 主窗口:称为"文本"的标签和一个称为" OpenButton"的按钮
  • 网站窗口:一个称为" changebutton"的按钮

因此,关键点是信号和插槽之间的连接以及Windows指针或参考的管理。