我有一个 QT 应用程序,我试图让我的一个窗口中的按钮打开另一个窗口。
到目前为止,我在主窗口中完成窗口对象的方式是这样的:
Website control;
control.show();
这会很好地显示我的第一个窗口,如果我以类似的方式声明我的另一个窗口,该窗口也会在运行时显示,尽管这不是我想要的
然后在单独的头文件中:
class Website: public QWidget, public Ui::Website
{
public:
Website();
}
然后在对应的cpp文件中我有:
Website::Website()
{
setupUi(this);
}
现在所有这一切都有效并添加了一个自定义插槽,这样当我单击一个按钮时它会触发我的另一个 cpp 文件中的一个插槽。问题是我不确定如何显示我的其他窗口,因为我在主窗口中声明了它们,所以无法访问它们来执行 .show()?
任何帮助将不胜感激,我是 C++ 和 QT 的新手
最佳答案
我不清楚你想做什么。但我可能理解你的挣扎,因为我自己在第一次接触这个框架时就有过这样的经历。
假设您有一个控制主窗口 View 的 MainWindow 类。比您想创建第二个由网站类控制的窗口。
然后您想要连接这两个类,以便当您单击网站窗口上的按钮时,主窗口中会发生一些事情。
我为你做了一个简单的例子,也在 GitHub 上:
主窗口.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
主窗口.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
网站.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
考虑要组合的用户界面:
- 主窗口:一个名为“text”的标签和一个名为“openButton”的按钮
- 网站窗口:一个名为“changeButton”的按钮
所以重点是信号和槽之间的连接以及窗口指针或引用的管理。
关于c++ - QT 插槽和信号,显示第二个窗体/窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983377/