标签:parent about QT testDialog ui 窗体 操作 include
在界面操作中打开窗体关闭窗体,以及在窗体与窗体之间传递数据,这些是我们常常遇到的问题。这了我们首先来熟悉窗体的打开。
一、自己新建一个窗体
比如,我们在建立工程的时候选择了Qt Designer Form那么,系统则会自动为我们生成一个mainwindow.ui,那么我们不可能只有这么一个窗体来回折腾,我们需要新建一个自己的窗体
这个时候我们可以通过项目编辑栏中的form右键,来选择add new来添加一个新form
我们默认添加一个无按钮的对话框
这样就直接生成了对应的UI和cpp,如果你不小心选择了下面的纯UI了
这个时候,我们的对话框窗体是没有办法使用的,这里仅仅完成了UI,没有对应的程序代码文件cpp
这时,我们要为它手动添加代码C++文件,这里我们选择C++ Class,它包含了头文件.h和代码文件.cpp,并选择Widget为基类:
不过,生成的文件可能不能直接给dialog用,我们还必须修改一下,原始的是这样:
#include "about.h"
about::about(QWidget *parent) : QWidget(parent)
{
}
我们修改后为:
#include "about.h"
#include "ui_about.h"
about::about(QWidget *parent) :
QDialog(parent),
ui(new Ui::about)
{
ui->setupUi(this);
}
//增加一个自动销毁的函数
about::~about()
{
delete ui;
}
虽然可以通过改进得到,但还是不建议这么做。太麻烦了。
二、选择并打开自己定义启动窗体
按照我们默认的习惯,我们也许会在这个主窗体(MainWindow.ui)上创建菜单,主要数据展示区等,反正一切主要的设计都在这个窗体中展开了,但事后我们会想,是不是应该在这个主窗体之前先显示一个加载或者登录的窗体呢(比如像微信或者QQ,或者某些收费软件那样)
这个时候我们就要来看看main.cpp,
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
从代码中我们很清晰的发现,其实只要在这里将我们自己的启动窗体的头文件包含进来,并将MainWindow对象替换成我们需要的启动窗体即可,如(添加一个StartFrom.ui),并将上方的代码但凡有MainWindow的地方修改为你要启动的类:
#include"startform.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StartForm w;
w.show();
return a.exec();
}
这个窗体显示完毕再进入主窗体。
二、利用按钮打开新窗体
在按钮下,通过go slot建立对应的事件,调用即可
void StartForm::on_pushButton_clicked()
{
this->hide(); //隐藏登录界面
testDialog *sf=new testDialog();
sf->exec();
}
三、窗体之间的数据传递
窗体之间传递数据,有两种,一种是通过main.cpp在其中设置全局变量。还有一种,在窗体构造函数中增加传递参数,我们必须在头文件声明和cpp中都声明,如:
头文件h
#ifndef TESTDIALOG_H
#define TESTDIALOG_H
#include <QDialog>
namespace Ui {
class testDialog;
}
class testDialog : public QDialog
{
Q_OBJECT
public:
explicit testDialog(QWidget *parent = 0,QString tname,int tflag);
cpp文件
testDialog::testDialog(QWidget *parent,QString tname,int tflag) :
QDialog(parent),
ui(new Ui::testDialog)
{
this->windowTitle()=tname;
ui->setupUi(this);
}
最后,我们在事件中的代码:
void StartForm::on_pushButton_clicked()
{
this->hide();
testDialog *sf=new testDialog(this,QString("传递窗体数值"),9);
sf->exec();
}
在testDialog中,就可以获取到传递过来的值了。
标签:parent,about,QT,testDialog,ui,窗体,操作,include 来源: https://blog.csdn.net/haigear/article/details/120398567
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。