多窗体的实现我们可以在
1:在一个创体内控制另一个窗体显示(信号,槽的使用)
2:在一个窗体内触发另一个窗体内的信号,槽,函数
(信号,槽的使用)
3,在一个创体内修改另一个创体内部件的属性,值等
(指针使用)
方法
1----------main函数中控制 a.show b.show(通过accept判断,下面将不再介绍此方法)
2-----------也可以用一个窗体的信号或槽来控制另一个窗体的显示和部件属性以及值
实例1---------------
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "Form1.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void hide_main();
void show_main();
private:
Ui::MainWindow *ui;
Form1 form1;
};
#endif // MAINWINDOW_H
mainwindow.cpp
..............
....
void MainWindow::hide_main()
{
form1.show();
this->hide();
}
void MainWindow::show_main()
{
this->show();
}
......
...
#ifndef Form1_H
#define Form1_H
#include <QWidget>
namespace Ui {
class Form1;
}
class Form1 : public QWidget
{
Q_OBJECT
public:
explicit Form1(QWidget *parent = 0);
~Form1();
public slots:
void hide_form1();
signals:
void t();
private:
#endif
form1.cpp
......
.........
void Two::hide_form1()
{
emit t();
this->hide();
}
...........
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "Form1.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void hide_main();
void show_main();
private:
Ui::MainWindow *ui;
Form1 form1;
};
#endif // MAINWINDOW_H
mainwindow.cpp
..............
....
void MainWindow::hide_main()
{
form1.show();
this->hide();
}
void MainWindow::show_main()
{
this->show();
}
......
...
#ifndef Form1_H
#define Form1_H
#include <QWidget>
namespace Ui {
class Form1;
}
class Form1 : public QWidget
{
Q_OBJECT
public:
explicit Form1(QWidget *parent = 0);
~Form1();
public slots:
void hide_form1();
signals:
void t();
private:
Ui::Form1 *ui;
};#endif
form1.cpp
......
.........
void Two::hide_form1()
{
emit t();
this->hide();
}
...........
实例2-----------------------
1.建立一个工程
2.新建一个mainForm对话框
向其中添加几个按钮,其中的一个按钮show的功能是在mainForm中点击一个该按钮就能弹出另外一个窗体
showForm
3.创建一个main.cpp,将其主要窗体选为mainForm,则会自己创建一个已经写好了相关语句的main.cpp。
3.新建另外一个对话框showForm,将其属性中的name改为showForm,将该对话框保存为showForm.ui
4.在mainForm的member项中的includes(in declaration)中加入"showForm.h",在Class varible中添加showForm *showForm;
5.将show按钮的click()信号与mainForm的一个新建的slot(showSlot)连接起来;
6.为showSlot()添加代码如下:
void mainForm::showSlot()
{
showform=new showForm(this);
showform->show();
}
7.qmake
make
这样就会生成可执行文件。
实例3-----------------------
Qt中不允许定义全局变量,我们无法简单地实现窗体之间的传值,例如 弹出式登录框.. 可以利用信号槽机制实现传值,QInputDialog 貌似也是这么实现的。
http://blog.sina.com.cn/s/blog_511cc1eb0100t00i.html
先载入child.h
class Parent : public QDialog
{
public:
public slots:
};
//parent.cpp
Parent::Parent()
{
}
void Parent::childCreate()
{
}
void Parent::infoRecv(const QString &str)
{
}
//child.h
class Child : public QDialog
{
public:
signals:
public slots:
};
//child.cpp
Child::Child()
{
}
void Child::emit_signal_infosend()
{
}
结果如下图