搜档网
当前位置:搜档网 › Qt 编写多窗口程序

Qt 编写多窗口程序

Qt  编写多窗口程序
Qt  编写多窗口程序

编写多窗口程序

版权声明

该文章原创于Qt爱好者社区(https://www.sodocs.net/doc/64574187.html,),作者yafeilinux,转载请注明出处!

导语

程序要实现的功能是:程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。

程序里我们先建立一个工程,设计主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。

在这一篇还会涉及到代码里中文字符串显示的问题。

目录

一、添加主窗口

二、代码中的中文显示

三、添加登录对话框

四、使用自定义的对话框类

正文

一、添加主窗口

1.我们打开Qt Creator,新建Qt Gui应用,项目名称设置为“nWindows”,在类信息界面保持基类为QMainWindow,类名为MainWindow,这样将会生成一个主窗口界面。

2.完成项目创建后,打开mainwindow.ui文件进入设计模式,向界面上拖入一个Push Button,然后对其双击并修改显示文本为“按钮”,如下图所示。

3.现在运行程序,发现中文可以正常显示。在设计模式可以对界面进行更改,那么使用代码也可以完成相同的功能,下面就添加代码来更改按钮的显示文本。

二、代码中的中文显示

1.我们点击Qt Creator左侧的“编辑”按钮进入编辑模式,然后双击mainwindow.cpp文件对其进行编辑。在构造函数MainWindow()中添加代码:

MainWindow::MainWindow(QWidget*parent):

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

ui->pushButton->setText("新窗口");//将界面上按钮的显示文本更改为“新窗口”}

这里的ui对象就是界面文件对应的类的对象,在mainwindow.h文件中对其进行了定义,我们可以通过它来访问设计模式添加到界面上的部件。前面添加的按钮部件Push Button,在其属性面板上可以看到它的objectName属性的默认值为pushButton,这里就是通过这个属性来获取部件对象的。

我们使用了QPushButton类的setText()函数来设置按钮的显示文本,现在运行程序,效果如下图所示。

2.我们发现,在代码中来设置按钮的中文文本出现了乱码。这个可以有两种方法来解决,一个就是在编写程序时使用英文,当程序完成后使用Qt语言家来翻译整个软件中的显示字符串;还有一种方法就是在代码中设置字符串编码,然后使用函数对要在界面上显示的中文字符串进行编码转换。因为翻译一个软件很麻烦,对于这些小程序,我们希望中文可以立即显示出来,所以下面来讲解第二种方法。

3.设置字符串编码,可以使用QTextCodec类的setCodecForTr()函数,一般的使用方法就是在要进行编码转换之前调用该函数,下面我们在main.cpp文件中添加代码:

#include

#include"mainwindow.h"

#include //添加头文件

int main(int argc,char*argv[])

{

QApplication a(argc,argv);

QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //设置编码

MainWindow w;

w.show();

return a.exec();

}

因为我们要在MainWindow类中进行编码转换,所以要在创建w对象以前调用该函数。这里的codecForLocale()函数返回适合本地环境的编码,当然,也可以指定编码,例如要设置为“GB2312”,可以使用下面的代码:

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

当设置完编码后,就要在显示中文字符串的地方使用tr()函数,这里我们需要将修改按

钮显示文本的代码更改为:

ui->pushButton->setText(tr("新窗口"));

现在运行程序,可以发现中文已经可以正常显示了。这里提示一下,如果感觉编辑器中的字体太小,可以使用Ctrl + +(同时按下Ctrl和加号键)来进行放大,使用Ctrl + -可以缩小。

三、添加登录对话框

1.往项目中添加新文件,这里可以在编辑模式的项目目录上点击鼠标右键,然后选择添加新文件菜单,如下图所示。当然也可以在文件菜单中进行添加。

2.模板选择Qt设计师界面类,然后界面模板选择Dialog without Buttons,如下图所示。

如下图所示。

4.当完成后会自动跳转到设计模式,对新添加的对话框进行设计。我们向界面上拖入一个Push Button,然后更改显示文本为“登录到主界面”。为了实现点击这个按钮后可以关闭该

对话框并显示主窗口,我们需要设置信号和槽的关联。点击设计模式上方的图标,或者

按下F4,便进入了信号和槽编辑模式。按着鼠标左键,从按钮上拖向界面,如下图所示。

当放开鼠标后,会弹出配置连接对话框,这里我们选择pushButton的clicked()信号和LoginDlg的accept()槽并按下确定按钮。如下图所示。

设置好信号和槽的关联后,界面如下图所示。

这里简单介绍一下信号和槽,大家可以把它们都看做是函数,比如这里,当单击了按钮以后就会发射单击信号,即clicked();然后对话框接收到信号就会执行相应的操作,即执行accept()槽。一般情况下,我们只需要修改槽函数即可,不过,这里的accept()已经实现了默

认的功能,它会将对话框关闭并返回Accepted,所以我们无需再做更改。下面我们就是要使用返回的Accepted来判断是否按下了登录按钮。

完成后,可以按下或者按下F3来返回控件编辑模式。

四、使用自定义的对话框类

1.按下Ctrl+2返回代码编辑模式,在这里打开main.cpp文件,添加代码:

#include

#include"mainwindow.h"

#include//添加头文件

#include"logindlg.h"//添加头文件

int main(int argc,char*argv[])

{

QApplication a(argc,argv);

//QTextCodec::setCodecForTr(QTextCodec::codecForLocale());//设置编码

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

MainWindow w;

LoginDlg dlg;//建立自己新建的类的对象dlg

if(dlg.exec()==QDialog::Accepted)//利用Accepted返回值判断按钮是否被按下{

w.show();//如果被按下,显示主窗口

return a.exec();//程序一直执行,直到主窗口关闭}

else return0;//如果没被按下,则不会进入主窗口,整个程序结束运行}

在这里,我们先创建了LoginDlg类的对象dlg,然后让dlg运行,即执行exec()函数,并判断对话框的返回值,如果是按下了登录按钮,那么返回值应该是Accepted,这时就显示主窗口,并正常执行程序;如果没有按下登录按钮,那么就结束程序。

现在大家可以运行程序,测试一下效果。

2.上面讲述了一种显示对话框的情况,下面再来讲述一种情况。我们打开mainwindow.ui文件进入设计模式,然后在按钮部件上单击鼠标右键并选择转到槽菜单,如下图所示。

QT习题

QT习题 一、名词解释 1、虚函数: 2、回调函数: 3、内联函数: 4、信号与插槽: 5、私有函数: 6、构造函数: 7、公有函数: 8、内联函数: 9、信号与插槽: 10、析构函数: 二、判断题 1、在QT中Qwidget不可以作为应用程序的窗口()。 2、在创建窗口部件的时候,窗口部件通常不会显示出来()。 3、布局管理器不是一个窗口部件() 4、FindDialog(QWidget *parent = 0);父参数为NULL,说明有父控件。() 5、show()显示的对话框是模式对话框。用exec()显示的对话框是无模式对话框。 () 6、布局管理器派生自QObject。() 7、Q_OBJECT是一个宏定义,如果类里面用到了signal或者slots,就必须要声 明这个宏。() 8、FindDialog(QWidget *parent = 0);父参数为NULL,说明没有父控件。() 9、槽可以是虚函数,可以是公有的,保护的,也可是私有的。() 10、show()显示的对话框是无模式对话框。用exec()显示的对话框是模式对话 框。() 三、简答题 1、简述一下信号与插槽机制。 2、简述布局管理器的功能,列举3个布局管理器。 3、简述使用Qt设计师,在创建对话框时主要包含哪几个基本步骤? 4、GUI程序通常会使用很多图片,请简述3种提供图片的方式。 5、列举几种Qt中会产生绘制事件的情况。 6、Update()与repaint()之间的区别? 7、对窗体上的控件进行布局管理一般有哪几种方式,简述一下其缺点。 8、简述事件和信号的特点和区别。 9、简述主函数中创建QApplication对象功能。 10、简述使用Qt设计师,在创建对话框时总是包含哪几个基本步骤?

Qt Creator 窗体控件自适应窗口大小布局

Qt Creator 窗体控件自适应窗口大小布局 常见的软件窗口大小改变(最大化、手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成,一是所见即所得,而是效率要高不少。 Qt中如果想实现窗体内空间随着窗体大小调整,必须使用布局管理,常用的布局管理有QHBoxLayout、QVBoxLayout、QGridLayout,空的地方使用spacer 控件进行填充,因此首先将窗体空间使用布局管理典型应用如下图所示。 我这里使用QGridLayout,按住Ctrl多选需要布局的窗体控件,右键-布局-栅格化局,根据需要进行调整。 要想是控件根据窗体进行调整,最为重要的一点就是设置窗口部件的大小策略,各控件均有这一项设置,如下图所示。

这部分具体的参数解释摘录如下: 结合控件的SizePolicy属性,来控制布局管理中的控件的尺寸自适应方式。 控件的sizePolicy说明控件在布局管理中的缩放方式。Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合所有的布局,开发人员经常需要改变窗体上的某些控件的sizePolicy。一个QSizePolicy的所有变量对水平方向和垂直方向都适用。下面列举了一些最长用的值: A. Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。 B. Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以 放大。 C. Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小 的允许尺寸。

QT界面开发

1Qt4界面开发 1.1Q t历史 Qt是一个用于桌面系统和嵌入式开发的跨平台应用程序框架。它包括一个直观的API 和一个丰富的类库,以及用于GUI开发和国际化的集成工具,另外它支持Java?和C++开发。Qt让企业无须重新编写源代码,便可以构建运行在不同桌面操作系统和嵌入式设备上的软件应用程序。 Qt框架最早可公开获取是在1995年5月。最初是由Haavard Nord(TrollTech公司的首席执行官)和Eirik Chambe-Eng(TrollTech公司的董事会主席)。Haavard和Eirik 最早在特隆赫姆的挪威技术学院相遇,在那里他们双双获得了计算机科学硕士学位。 早在1991年,Haavard 就开始写一些最终成为Qt的类,并和 Eirik合力设计。在接下来的一年,Eirik提出了“信号和槽”的思想,一个现在已经被一些其他套装工具包含简单但功能强大的GUI编程范式。Haavard 接受了这一思想并手工生成了这一思想的代码实现。到1993年,Haavard和Eirik已经完成了Qt的第一个图形内核的开发并能用它来实现一些他们所需的物件。在这一年的年末,Haavard建议他们一起去经商,创建一个“世上最好的C++ GUI框架”。 字母“Q”被选为类的前缀是因为这个字母在Haavard的Emacs字体中看起来很漂亮。受到Xt(the X toolkit)的启发,字母“t”被追加来表示“toolkit”。公司在1994年5月4日成立,起初被命名为“Quasar Technologies”,之后被改名为“Troll Tech”,今天则被称为奇趣科技(Trolltech)。 1995年5月20日,Qt 0.90被上传到https://www.sodocs.net/doc/64574187.html,。六天后,这一发布在comp.os.linux.announce被宣布。这是Qt的第一个公共发行版。Qt可以被用在Windows 和Unix开发中,在两个系统中提供相同的API。Qt从一开始就可以在两种许可协议下获取:一个是商业开发中需要的商业许可协议,一个用于开源开发的自由软件版。 1996年3月,欧洲航天局成为Qt的第一个客户,一下买了十个Qt商业许可。Qt 0.97在同年的5月底发布,1996年9月24日,Qt 1.0发布。到了同年年底,Qt到达了版本1.1;拥有8个客户,每一个都在不同的国家,他们购买了18个商业许可。 Qt 1.2 在1997年4月发布。Matthias Ettrich利用Qt构建KDE的决定帮助Qt成为Linux C++ GUI 开发的实际标准,1997年9月Qt 1.3发布。 1998年9月,Qt 1的最后一个主要发行版1.40发布。Qt 2.0于1999年7月发布。Qt 2有了一个新的开源许可协议,发布许可协议(QPL),遵守开源的定义。1999年8月,Qt赢得了LinuxWorld的“最佳开发库/工具”大奖。 2000年奇趣科技发布了Qtopia核心(后来成为Qt/Embedded)。它被设计用来运行在嵌入式Linux设备上并提供了自己的窗口系统作为X11的一个轻量级代替。现在Qt/X11和Qtopia核心都可以通过GNU通用许可(GPL)获取。到2000年年底,奇趣科技成立了Trolltech Inc.(USA)并且发布了Qtopia的第一个版本,一个移动电话和PDAs应用程序平台。Qtopia赢得了2001和2002年LinuxWorld的“最佳嵌入式 Linux 解决方案”大奖,

Qt自定义窗口部件

【原创】Qt自定义窗口部件 QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)改进法 1、改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和HexspinBox.cpp文件。把这两个文件拷贝到想要的项目中。 HexspinBox.h HexspinBox.cpp

2、在需要开发的项目中的窗口中, 1、用Qt Designer创建一个新的窗体main.ui,把控件箱里的QSpinBox添加到窗体中。 2、右击微调框,选择“Promote to ”上下文菜单。 3、在弹出的对话框中,类名处填写“HexSpinBox”,头文件填写“hexspinbox.h” 好了。在ui生成的包含有QSpinBox的控件文件中,ui的源代码里面多了一段 HSpinBox QSpinBox

hspinbox.h
包含文件变为"hexspinbox.h"。在Qt Designer中,QSpinBox表示的控件为HexSpinBox,并且可以设置所有的QSpinBox的属性。

可以在VS2008中编译一下main.ui文件,从ui_main.h源代码中可以知道,引入的控件是: 升级法的缺点是不能在Qt Designer中设置自定义控件自己的特有属性,也不能够绘制自己。这些问题可以用插件法解决。 插件法 1.VS中创建Qt4 Design Plugin 工程,名称叫custom 自动建立如下几个文件: 自定义控件:custom.h,custom.cpp 插件:customplugin.h,customplugin.cpp 源代码如下:

Qt界面如何布局

关于Qt界面中对于相关控件进行布局管理 在用Qt进行用户界面应用程序的编程时,建议通过编写相关代码来生成和维护Qt控件,而不要用Qt Designer。这时对相应的Qt控件进行布局管理显得尤为重要。 常见的三种布局方式: 网格布局:QGridLayout 水平布局:QHBoxLayout 垂直布局:QVBoxLayout 步骤: 1)以单个的Qt控件为单位,先进行子块布局,分别对各个子块进行布局。 2)以步骤1)中的子块为单位,进行全局布局。 例如:我们要完成如下样式的Qt界面,整个Qt界面有ABCDEFXYZ共计9个Qt控件。 方法1: 1)用“网格布局”对ABCDEF(子块1)进行布局 QGridLayout *leftLay=new QGridLayout; 用“垂直布局”对XYZ(子块2)进行布局 QVBoxLayout *rightLay=new QVBoxLayout; 2)用“水平布局”对子块1(ABCDEF)、子块2(XYZ)进行全局布局 QHBoxLayout *mainLay=new QHBoxLayout; mainLay->addLayout(leftLay); mainLay->addLayout(rightLay); 方法2: 1)用“水平布局”对AB(子块1)进行布局 用“水平布局”对CD(子块2)进行布局 2)用“垂直布局”对子块1(AB)、子块2(CD)、E、F进行布局,形成子块3(ABCDEF)。3)用“垂直布局”对XYZ(子块4)进行布局 4)用“水平布局”对子块3(ABCDEF)、子块4(XYZ)进行全部布局

方法1: QGridLayout *leftLay=new QGridLayout; leftLay->addWidget(hostLabel,0,0); leftLay->addWidget(hostLineEdit,0,1); leftLay->addWidget(portLabel,1,0); leftLay->addWidget(portLineEdit,1,1); leftLay->addWidget(myCheckBox,2,0,1,2); leftLay->addWidget(myListWidget,3,0,1,2); leftLay->addWidget(msgLabel,4,0,1,2); QVBoxLayout *rightLay=new QVBoxLayout; rightLay->addWidget(logButton); rightLay->addWidget(sendButton); rightLay->addWidget(linkButton); QHBoxLayout *mainLay=new QHBoxLayout; mainLay->addLayout(leftLay); mainLay->addLayout(rightLay); setLayout(mainLay);

如何在Qt中使用自定义数据类型 - zhezhelin - 博客园

如何在Qt中使用自定义数据类型 - zhezhelin - 博 客园 如何在Qt中使用自定义数据类型 Q_DECLARE_METATYPE,Qt自定义类型 这里我们使用下面这个struct来做说明(这里不管是struct还是class都一样): 复制代码 QVariant 为了能在QVariant中使用自定义数据类型做,需要使用 Q_DECLARE_METATYPE()来向Qt的元系统声明这个自定义类型。如下列所示: 复制代码 在作为QVariant传递自定义数据类型时,需要使用QVariant::fromValue()或者qVariantFromValue: 复制代码 为了更方便一点,你可以在自定义类型中定义一个QVariant() 类型转换符: 复制代码 这样我们便可以像下面这样使用了: 复制代码 信号和槽 对于直接连接类型(默认情况下就是直接连接)而言,使用自定义数据类型做信号参数不需要做其他其他处理,就像内置数据类型一样: 复制代码 但在跨线程时如果你还这么做,编译器就会给出警告了: 复制代码 这时我们需要先注册Player: qRegisterMetaType<Player>("Player");

qRegisterMetaType<Player>( ); (上面那个是错误的,除非名字刚好和类名一样) connect(sender, SIGNAL(playerCreated(const Player&)), receiver, SLOT(addPlayer(const Player&))); 复制代码 QDebug 最好是能这样: 复制代码 而不是这样: 复制代码 怎么做呢?我们需要对QDebug<<操作符重载一下: 复制代码 QDataStream 跟上面的QDebug很像,我们也需要重载一下<<操作符: 复制代码 QSettings 为了能在QSettings中使用自定义数据类型,需要让Qt的元系统知道有此类型,就像上面介绍QVariant部分一样,另外还要提供相应的QDataStream操作符,还必须注册这个流操作符: 复制代码 如此处理之后我们就可以像下面这样使用了: 复制代码 复制代码 参考: QString QSettingsPrivate::variantToString(const QVariant &v) { QString result;

Qt 编写多窗口程序

编写多窗口程序 版权声明 该文章原创于Qt爱好者社区(https://www.sodocs.net/doc/64574187.html,),作者yafeilinux,转载请注明出处! 导语 程序要实现的功能是:程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。 程序里我们先建立一个工程,设计主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。 在这一篇还会涉及到代码里中文字符串显示的问题。 目录 一、添加主窗口 二、代码中的中文显示 三、添加登录对话框 四、使用自定义的对话框类 正文 一、添加主窗口 1.我们打开Qt Creator,新建Qt Gui应用,项目名称设置为“nWindows”,在类信息界面保持基类为QMainWindow,类名为MainWindow,这样将会生成一个主窗口界面。 2.完成项目创建后,打开mainwindow.ui文件进入设计模式,向界面上拖入一个Push Button,然后对其双击并修改显示文本为“按钮”,如下图所示。

3.现在运行程序,发现中文可以正常显示。在设计模式可以对界面进行更改,那么使用代码也可以完成相同的功能,下面就添加代码来更改按钮的显示文本。 二、代码中的中文显示 1.我们点击Qt Creator左侧的“编辑”按钮进入编辑模式,然后双击mainwindow.cpp文件对其进行编辑。在构造函数MainWindow()中添加代码: MainWindow::MainWindow(QWidget*parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->pushButton->setText("新窗口");//将界面上按钮的显示文本更改为“新窗口”} 这里的ui对象就是界面文件对应的类的对象,在mainwindow.h文件中对其进行了定义,我们可以通过它来访问设计模式添加到界面上的部件。前面添加的按钮部件Push Button,在其属性面板上可以看到它的objectName属性的默认值为pushButton,这里就是通过这个属性来获取部件对象的。 我们使用了QPushButton类的setText()函数来设置按钮的显示文本,现在运行程序,效果如下图所示。

Qt基础教程之自定义对话框及调用方法

在一个应用程序设计中,为了实现一些特定的功能,必领设计自定义对话框。 自定义对话框的设计一般从 QDialog 继承,并且可以采用UI设计器可视化地设计对话框。对话框的调用一般包括创建对话框、传递数据给对话框、显示对话框获取输入、判断对话框单击按钮的返回类型、获取对话框输入数据等过程。 本节将通过实例 samp6_2 来详细介绍这些原理。图 1 是实例 samp6_2 的主窗口,及其设置表格行列数的对话框。 图 1 实例 samp6_2 主窗口及其设置表格行列数的对话框 主窗口采用 QTableView 和 QStandardltemModel、QltemSelectionModel 构成一个通用的数据表格编辑器,设计了 3 个对话框,分别具有不同的功能,并且展示对话框不同调用方式的特点: ?设置表格行列数对话框 QWDialogSize 该对话框每次动态创建,以模态方式显示(必须关闭此对话框才可以返回主窗口操作),对话框关闭后获取返回值,用于设置主窗口的表格行数和列数,并且删除对话框对象,释放内存。 这种对话框创建和调用方式适用于比较简单,不需要从主窗口传递大量数据做初始化的对话框,调用后删除对话框对象可以节约内存。

?设置表头标题对话框 QWDialogHeaders 图 2 是设置表格表头标题的对话框,该对话框在父窗口(本例中就是主窗口)存续期间只创建一次,创建时传递表格表头字符串列表给对话框,在对话框里编辑表头标题后,主窗口获取编辑之后的表头标题。 图 2 设置表格表头标题对话框 注意,对话框以模态方式显示,关闭后只是隐藏,并不删除对象,下次再调用时只是打开己创建的对话框对象。 这种创建和调用方式适用于比较复杂的对话框,需要从父窗口传递大量数据做对话框初始化。下次调用时不需要重复初始化,能提高对话框调用速度,但是会一直占用内存,直到父窗口删除时,对话框才从内存中删除。 ?单元格定位与文字设置对话框QWDialogLocate 图 3 是单元格定位和文字设置对话框,该对话框以非模态方式调用,显示对话框时还可以对主窗口进行操作,对话框只是浮动在窗口上方。在对话框里可以定位主窗口表格的某个单元格并设置其文字内容,在主窗口上的表格中单击鼠标时,单元格的行号、列号也会更新在对话框中。对话框关闭后将自动删除,释放内存。

QT简答+大题+填空

1、创建一个窗体对象后,要想显示该窗体,需要调用对象的_show()______ 方法,要想隐藏该窗体需要调用对象的__hide()_____方法。 2、MinGW 即Minimalist ____GNU_______For Windows,是将___GNU_开发工具移植到Win32 平台下的产物。 3 、Qt Creator 提供的默认基类只有QMainWindow 、_QWidget__ 和 __QDialog___________三种。 4 、在命令行编译程序时,其中使用命令qmake – project 的作用是: _生成*.pro工程文件_;将.ui 文件编译成.h 文件时,使用了_Qt Designer编译工具。 5、使QTimer 对象开始计时的方法是__start()____。 6、信号与槽机制中,发射信号的关键字是_emit____________。 7、创建一个窗体对象后,要想显示该窗体,需要调用对象的__________方法,要想隐藏该窗体需要调用对象的_________方法。 8、使QTimer 对象开始计时的方法是______________。 9、设置QLabel 对象显示文本内容的方法是__setText()_。 10 、Qt 中的常用标准对话框有_颜色对话框__ 、_消息对话框_ 、 _输入对话框__。 11、Qt 中常用的布局管理器有_垂直布局管理器_、_水平……和_垂直布局管理器等。 12、Qt 的按钮控件是哪个类_QPushButton,标签是哪个类QLabel_,文本控件是哪个类QTextEdit_。 13、当某个事件出现时,通过发送_______信号___,可以将与之相关的_槽函数激活,即执行槽函数代码。 14、使用元对象编译器,将自定义类声明放在头文件中,并在第一句加上宏 __Q_Object________ ,使用qmake 工具生成_makefile_ ,则makefile 会自动调用__moc_工具对自定义信号和槽进行处理。 15、_用show()______显示的对话框是无模式对话框。用_exec()______显示的对话框是模式对话 1、什么是Qt?有哪些优点? Qt是一种跨平台的C++图形用户界面应用程序开发框架 优点: 1.优良的跨平台特性;面向对象;丰富的api; 2.支持2D/3D 图形渲染,支持OpenGL 3.大量的开发文档 2、Qt中有哪些方式对窗体上的控件进行布局管理 绝对位置定位,手工布局,布局管理器 3、Qt有哪些特点? 轻型,占用资源少,高性能,高可靠性,便于移植,可配置

Qt界面布局管理详解

本节再以一个稍微复杂的例子来讲解设计 GUI 的常见功能,包括界面设计时布局的管理,以及程序里如何访问界面组件。 实例程序功能 创建一个 Widget Application 项目 samp2_2,在创建窗体时选择基类QDialog,生成的类命名为 QWDialog,并选择生成窗体。 如此新建的项目 samp2_2 有一个界面文件 qwdialog.ui,一个头文件qwdialog.h 和源程序文件 qwdialog.cpp。此外,还有项目文件 samp2_2.pro 和主程序文件 main.cpp。 qwdialog.ui 界面文件设计时界面如图 1 所示。程序的主要功能是对中间一个文本框的文字字体样式和颜色进行设置。 图 1 实例程序 samp2_2 设计时界面 在界面设计时,对需要访问的组件修改其 objectName,如各个按钮、需要读取输入的编辑框、需要显示结果的标签等,以便在程序里区分。对于不需要程序访问的组件则无需修改其 objectName,如用于界面上组件分组的 GroupBox、Frame、布局等,让 UI 设计器自动命名即可。 对图 1 中几个主要组件的命名、属性设置见表 2。

对于界面组件的属性设置,需要注意以下几点。 1.objectName 是窗体上创建的组件的实例名称,界面上的每个组件需要有一个唯 一的 objectName,程序里访问界面组件时都是通过其 objectName 进行访问,自动生成的槽函数名称里也有 objectName。所以,组件的 objectName 需要在设计程序之前设置好,设置好之后一般不要再改动。若设计程序之后再改动objectName,涉及的代码需要相应的改动。 2.窗体的 objectName 就是窗体的类名称,在 UI 设计器里不要修改窗体的 objectName,窗体的实例名称需要在使用窗体的代码里去定义。 界面组件布局 Qt 的界面设计使用了布局(Layout)功能。所谓布局,就是界面上组件的排列方式,使用布局可以使组件有规则地分布,并且随着窗体大小变化自动地调整大小和相对位置。布局管理是 GUI 设计的必备技巧,下面逐步讲解如何实现图 1 所示的界面设计。 界面组件的层次关系 为了将界面上的各个组件的分布设计得更加美观,经常使用一些容器类,如 QgoupBox、QtabWidget、QFrame 等。 例如,将 3 个 CheckBox 组件放置在一个 GroupBox 组件里,该GroupBox 组件就是这 3 个 CheckBox 的容器,移动这个 GroupBox 就会同时移动其中的 3 个 CheckBox。

Qt界面美工实例

Qt StyleSheet样式表实例 在涉及到Qt 美工的时候首先需要掌握CSS 级联样式表。 下面将通过几个例子来介绍一下怎样使用Qt中的部件类型设计。自定义的前台背景与后台背景的颜色: 如果需要一个文本编辑器的背景变为黄色,下面是代码行: qApp->setStyleSheet("QLineEdit { background-color: yellow }"); 针对一个对话框的内容中使用QLineEdit以及QLineEdit的子类的背景都变成黄色,下面是代码: myDialog ->setStyleSheet("QLineEdit { background-color: yellow }"); 如果只需要制定一个QLineEdit的内容,将使用QObject::setObjectName() 下面是一个实例: myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }"); 同时也可以针对每一个指定的部件做直接的类型设置,下面是一个实例: https://www.sodocs.net/doc/64574187.html,Edit->setStyleSheet("background-color: yellow"); 为了做一个鲜明的对比,将要为文本设置合适的颜色。 nameEdit->setStyleSheet("color: blue; background-color: yellow"); 当然最好的办法还有针对选择的文本来进行设置,下面设置了一个选择文本的类型属性:nameEdit->setStyleSheet("color: blue;" "background-color: yellow;" "selection-color: yellow;" "selection-background-color: blue;"); 在有一些情况下,不需要用户参与,而有软件设计人员来自己制定样式,即使这些是有违审美角度。下面就从应用程序开发角度来设计样式。 *[mandatoryField="true"] { background-color: yellow } 上面的意思是一些强制的区域是需要用Qt 的属性管理来强制设置成为黄色的背景。 这样一些强制的部件,将需要通过函数来设置当前的属性已经被强制设置,下面是实现的代码:

Qt基础教程之登录窗体(Splash窗口)设计

一般的大型应用程序在启动时会显示一个启动画面,即 Splash 窗口。 Splash 窗口是一个无边对话框,一般显示一个图片,展示软件的信息。Splash 窗口显示时,程序在后台做一些比较耗时的启动准备工作,Splash 窗口显示一段时间后自动关闭,然后软件的主窗口显示出来。QT有一个 QSplashScreen 类可以实现 Splash 窗口的功能,它提供了载入图片,自动设置窗口无边框效果等功能。 Splash 窗口和登录界面实质都是对话框,它们在程序启动时显示。本节设计一个基与上节增加了一个 Splash 登录对话框,这个对话框结合了 Splash 窗口和登录界面两者的功能,实例运行时的启动界面如图 1 所示。 图 1 Splash 和登录窗口 这个实例演示如下的一些功能的实现方法: ?如何实现 Splash 特点的无边框对话框; ?如何设计用鼠标拖动无边框的对话框; ?如何使用 QSettings 类存储用户名、密码等信息; ?如何用 QCryptographicHash 类进行字符串加密; ?如何根据登录输入状况确定启动主窗口或终止程序运行。 对话框界面设计和类定义

釆用新建Qt Designer Form Class 的方法创建启动登录对话框,它从 QDialog 继承而来,设置类名称为 QDlgLogin。界面设计在 UI 设计器里进行,主要区域是一个用于显示图片的 QLabel 组件,在资源文件里载入图片,为 QLabel 组件的 pixmap 指定图片。 对话框下方是用于用户名和密码输入的 QLineEdit 组件,两个按钮用于选择用户输入,设置“取消”按钮的 clicked() 信号与对话框的 reject() 槽函数关联。但是“确定”按钮的 clicked() 信号不要设置为与对话框的任何槽函数关联,需要对其编写自定义的槽函数代码,因为需要根据用户输入确定对话框返回结果。为对话框界面上的组件设置好布局。 下面是 qdlglogin.h 文件中 QDlgLogin 类的定义: 1.class QDlgLogin : public QDialog 2.{ 3. Q_OBJECT 4.private: 5. bool m_moving=false;//表示窗口是否在鼠标操作下移动 6. QPoint m_lastPos; //上一次的鼠标位置 7. QString m_user="user"; //初始化用户名 8. QString m_pswd="12345";//初始化密码,未加密的 9. int m_tryCount=0; //试错次数 10. void readSettings(); //读取设置,从注册表 11. void writeSettings();//写入设置,从注册表 12. QString encrypt(const QString& str);//字符串加密 13.protected: 14.//用于鼠标拖动窗口的鼠标事件操作 15. void mousePressEvent(QMouseEvent *event); 16. void mouseMoveEvent(QMouseEvent *event); 17. void mouseReleaseEvent(QMouseEvent *event); 18.public: 19.explicit QDlgLogin(QWidget *parent = 0); 20. ~QDlgLogin(); 21.private slots: 22. void on_btnOK_clicked(); //OK按键 23.private: 24. Ui::dlgLogin *ui; 25.};

相关主题