简单的窗口控件功能
在Qt中我们新建立一个项目时,可以见到有如下的界面,其中界面文件(.ui)是Qt中极有特色的界面设计使用的工具,可以简化整个软件的设计流程,并且吻合MVC的软件设计思路。
先不使用.ui这一工具直接使用代码进行一些窗口控件的创建,并且实现简单的界面切换的功能。而在Qt中,很多的功能都是通过信号与槽来传递实现的。
我们在新建了项目后,可以发现会自动生成main.cpp文件,我们在实际操作的过程中不会更改main()函数,main函数只是起到界面启动的功能,其余功能而是在其他类中进行实现的。
在主界面上创建几个按钮:
“Hidden”关闭界面;
“Lambda"用于验证Lambda表达式传递信号与槽;
”Exchange“用于切换子界面与主界面。
- “Hidden”按钮控件
通过槽函数与信号,将主界面关闭。
HideButton.setParent(this);//将该按钮固定到界面上
HideButton.setText("Hidden");
HideButton.move(100,100);
connect(&HideButton, &QPushButton::released, this, &MainWidget::close);
Qt4和Qt5中信号和槽的传递方式稍微有一些变化
- “Lambda”按钮控件
//使用lambda表达式
connect(b4,&QPushButton::clicked,
// = :把外部所有局部变量、类中所有成员以值传递的方式传进来,安全但效率低
// this :类中的所有成员以值传递方式
// & :外部所有局部变量
// 直接输入外部变量以及成员名称
// 此时为只读,不能修改参数 要加mutable
[=]() mutable
{
b4 ->setText("111111");
qDebug() << "1234567";
}
);
- “Exchange”按钮控件
注意要将子窗口的头文件添加到主窗口的程序中
*b3.setParent(this);
b3.setText("Exchange");
b3.move(200,200);
//显示子窗口
//w.show();
connect(&b3, &QPushButton::clicked, this, &MainWidget::changewindow);
//处理子窗口信号
void (SubWidget::*funSignal)() = &SubWidget::MySignal;
connect(&subWin, funSignal, this, &MainWidget::dealSub);
void MainWidget::changewindow()
{
//子窗口显示,自身隐藏
subWin.show();
this->hide();
}
void MainWidget::dealSub()
{
subWin.hide();
this->show();
}