窗口部件
QT提供的默认基类只有QMainWindow、QWidget、和QDialog这三种,这三种窗体也是用的最多的,QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,而他们全部继承自QWidget。不仅如此,所以的窗口部件都继承自QWidget,继承关系如图所示。
2.多窗口切换
Qt使用信号与槽机制来完成对象之间的协同操作,简单来说,信号与槽都是函数,比如单击窗口上一个按钮弹出一个对话框,那么可以将这个按钮的单击信号和自定义的槽函数关联起来,在这个槽中创建一个对话框来显示他。
void Widget::on_pushButton_clicked()
{
QDialog *dialog =new QDialog();
dialog->exec();
}
3.自定义对话框
这里可以自定义一个对话框,来实现与主界面的切换,比如先弹出来登录界面,之后点击按钮来实现切换到主界面。
第一步,添加登录框,首先添加QT设计师界面类,界面模版和类名选好后,加入控件,如图
第二步,设计信号与槽,在退出程序的按钮上实现信号与槽,如图:
F4进入信号与槽编辑模式,然后左键拖动到要关联的控件,之后在弹出的对话框中选择信号与槽,之后可以按F3退出。之后是进入主界面按钮的信号与槽,右键转到槽,在里面写上accept(),这个accept()函数就是QDialog类的一个槽,对于一个使用exec函数实现的模态对话框,执行这个槽就会隐藏这个模态对话框,并返回QDialog::Accepted值,这里就是要使用这个值来判断是哪个按钮被按下了,与其对应的还有一个reject()槽,它可以返回一个QDialog::Rejected值,前面的“退出程序”按钮也可以关联这个槽。
第三步,设置主界面 main.cpp函数如下:
#include "widget.h"
#include <QApplication>
#include "mydialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
MyDialog dialog; //新建自定义MyDialog对象
if(dialog.exec() == QDialog::Accepted) //判断dialog执行结果
{
w.show(); //如果按下了“进入主界面”按钮,则进入主界面
return a.exec();
}
else return 0; //否则退出程序
}
dialog.exec()先显示模态对话框,如果点击了按钮,由于设置了进入主界面的槽是acccept(),所以返回值= QDialog::Accepted是符合要求的,就会消失登陆界面转到显示主界面正常执行。
在主界面.ui文件里加上重新登录按钮和退出。退出的信号与槽和前面的退出一样,F4关联close()即可;重新登录的按钮先创建clicked()的槽,并改成如下:
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
#include "mydialog.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{ //按下重新登录先隐藏当前界面
close();
MyDialog dlg;
//显示登陆界面,如果返回值等于这个,也就是点击了登录,那么程序显示主界面,如果不是,由于此时没有可以显示的界面就会完全退出程序
if(dlg.exec() ==QDialog::Accepted)show();
}
!