实现几个窗口间的交互+一个软键盘
创建一个项目,基类选择QWidget,类名用Widget。创建完成后进入widget.ui界面。
点击主页面,找到右下角的minimumSize大小和geometry里面的大小,都设置800x600。
从左侧栏拖出一个Label控件和四个PushButton控件,Label控件设置窗口最小值和geometry的大小都为300x100,
PushButton控件都设置为200x50。右键Label控件,选择“改变样式表”,在窗口中输入font: 57 36pt "Ubuntu";Label文本更改为“Qt编程示例”,按钮的文本改为”Mykeyboard”、”To Dialog”、”Result”、”Quit”如图所示
从左侧栏拖出一个Vertical Layout,把四个按钮放进去,然后在右下角的vertical layout属性设置修改为如图所示
从左侧栏拖出两个Horizontal Spacer放在左右两边,然后把两个个Horizontal Spacer 和 Label 以及刚才的Vertical Layout框全部选中,点击主页面上面的 这个按钮。右下角的layoutSpacing设置为50,完成后如图
再从左侧拖入两个Vertical Spacer放在上下两边,然后选中两个Vertical Spacer和中间这个Horizontal Spacer大框,点击上面的垂直布局按钮。最后,找块主页面的空白地方,再次点击上面的垂直布局或者水平布局(这步不可少)。完成后如下图
为使中文不显示乱码,可以在main.cpp中加入<QTextCodec>头文件,和代码QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
按前面说过的方法添加资源文件,在widget.cpp中使用如下代码给widget加入图片背景
1.QPixmap pixmap(":/img5.png");
2.QPalette palette = this->palette();
3.palette.setBrush(QPalette::Background,QBrush(pixmap.scaled(QApplication::desktop()->size())));
4.this->setPalette(palette);
第三行用到了desktop的函数要引入<QDesktopWidget>头文件。
运行
在刚才的项目中添加新文件,选择Qt设计师界面类,界面模板选择Dialog without Buttons,类名用Dialog,拖入一个Label,然后按照前面的方法进行格式设置(窗口大小,布局,字体等),完成后如下图
按照前面的代码在dialog.cpp中也加入一个图片背景。
在widget.h中加入#include "dialog.h"和一个成员Dialog *mydialog,在widget.cpp的构造函数中加入mydialog = new Dialog(this) ;代码
然后进入widget.ui中,右键To Dialog按钮,选择转到槽,选择clicked(),确定后在跳转的函数体中加入mydialog->show();
此时我们运行程序,点击To Dialog按钮就能出现Dialog的窗口了。
继续在widget.ui中,右键Quit按钮,转到槽,选择clicked(),在函数体添加close();
此时运行程序,点击Quit按钮就能关闭窗口了。
软键盘的实现
继续在刚才的项目中添加新文件,选择Qt设计师界面类,界面模板选择Dialog without Buttons,类名用Mykeyboard。
软键盘就是供鼠标点击使用的键盘,整体思想就是信号与槽实现按下某个键时(鼠标按下某个按钮),文本输入框上显示出当前按下的键。
当按下确定键时,将文本显示在Result窗口中。
mykeyboard.h中的代码
1.#ifndef MYKEYBOARD_H
2.#define MYKEYBOARD_H
3.
4.#include <QDialog>
5.#include <QToolButton>
6.#include <QLineEdit>
7.
8.namespace Ui {
9.class Mykeyboard;
10.}
11.
12.class Mykeyboard : public QDialog
13.{
14. Q_OBJECT
15.
16.public:
17. explicit Mykeyboard(QWidget *parent = 0);
18. ~Mykeyboard();
19. friend class Widget ;
20.
21.private:
22. Ui::Mykeyboard *ui;
23. QToolButton *SoftKey[40] ;//所有的软键盘按钮
24. QLineEdit *Line ;//文本输入框
25. QString CurString ;//按下确定后保存再CurString里
26.
27.private slots:
28. void Init() ;
29. void Click1() ;
30. void Click2() ;
31. void Click3() ;
32. void Click4() ;
33. void Click5() ;
34. void Click6() ;
35. void Click7() ;
36. void Click8() ;
37. void&nb