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类。比您想创建一个由网站类控制的第二个窗口。
然后,您想连接两个类,以便当您单击网站窗口上的按钮时,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指针或参考的管理。
相关文章:
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 在 GLFW 窗口中显示 FFMPEG 解码帧
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 为什么输出窗口上没有显示输出?
- C++ 窗口显示无框图像
- 如何使用Qt在新窗口中显示视频帧
- 如何以编程方式使窗口全屏显示?
- 强制将以SW_HIDE启动的进程中的窗口显示为STARTUPINFO
- 制作垫子类型对象的数组.输出窗口显示同一帧
- Gtk::在将我的gtkmm2移植到gtkmm3应用程序时,窗口显示并退出
- OpenGL:新窗口显示当前打开的窗口的内容
- WINAPI 创建窗口显示奇怪的结果
- 为什么通过CreateProcess调用的程序的窗口显示为SW_HIDE和CREATE_NO_INDOW
- 输出窗口显示三个图像,而不是一个
- 分窗口显示一个软件,总是在最上面
- WINAPI -窗口显示在调试版本中,而不是在发布版本中
- 在Visual Studio中使用本地Windows调试器运行第一个程序。输出窗口显示大量"Cannot find or open the PDB file"
- 我们如何防止控制台窗口显示在Visual Studio下
- 更新窗口显示OpenGL/GLUT c++