Qt教程 使用窗口部件 (4)
创始人
2024-07-31 06:40:31
0

继续Qt教程第三章的讲解,本文章这个例子显示了如何创建一个你自己的窗口部件,描述如何控制一个窗口部件的最小大小和***大小,并且介绍了窗口部件的名称。

  1. #include  
  2. #include  
  3. #include  
  4. class MyWidget : public QWidget  
  5. {  
  6. public:  
  7.     MyWidget( QWidget *parent=0, const char *name=0 );  
  8. };  
  9. MyWidget::MyWidget( QWidget *parent, const char *name )  
  10.         : QWidget( parent, name )  
  11. {  
  12.     setMinimumSize( 200, 120 );  
  13.     setMaximumSize( 200, 120 );  
  14.     QPushButton *quit = new QPushButton( "Quit", this, "quit" );  
  15.     quit->setGeometry( 62, 40, 75, 30 );  
  16.     quit->setFont( QFont( "Times", 18, QFont::Bold ) );  
  17.     connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );  
  18. }  
  19. int main( int argc, char **argv )  
  20. {  
  21.     QApplication a( argc, argv );  
  22.  
  23.     MyWidget w;  
  24.     w.setGeometry( 100, 100, 200, 120 );  
  25.     a.setMainWidget( &w );  
  26.     w.show();  
  27.     return a.exec();  

解说

  1. class MyWidget : public QWidget  
  2.    {  
  3.    public:  
  4.        MyWidget( QWidget *parent=0, const char *name=0 );  
  5.    }; 

这里我们创建了一个新类。因为这个类继承了QWidget,所以新类是一个窗口部件,并且可以最为一个顶层窗口或者子窗口部件(像第三章里面的按钮)。

这个类只有一个成员函数,构造函数(加上从QWidget继承来的成员函数)。这个构造函数是一个标准的Qt窗口部件构造函数,当你创建窗口部件时,你应该总是包含一个相似的构造函数。

***个参数是它的父窗口部件。为了生成一个顶层窗口,你指定一个空指针作为父窗口部件。就像你看到的那样,这个窗口部件默认地被认做是一个顶层窗口。

第二个参数是这个窗口部件的名称。这个不是显示在窗口标题栏或者按钮上的文本。这只是分配给窗口部件的一个名称,以后可以用来查找这个窗口部件,并且这里还有一个方便的调试功能可以完整地列出窗口部件层次。

  1. MyWidget::MyWidget( QWidget *parent, const char *name )  
  2.  : QWidget( parent, name ) 

构造函数的实现从这里开始。像大多数窗口部件一样,它把parent和name传递给了QWidget的构造函数。 

  1. {  
  2.       setMinimumSize( 200, 120 );  
  3.       setMaximumSize( 200, 120 ); 

因为这个窗口部件不知道如何处理重新定义大小,我们把它的最小大小和***大小设置为相等的值,这样我们就确定了它的大小。在下一章,我们将演示窗口部件如何响应用户的重新定义大小事件。

  1. QPushButton *quit = new QPushButton( "Quit", this, "quit" );  
  2.         quit->setGeometry( 62, 40, 75, 30 );  
  3.         quit->setFont( QFont( "Times", 18, QFont::Bold ) ); 

这里我们创建并设置了这个窗口部件的一个名称为“quit”的子窗口部件(新窗口部件的父窗口部件是this)。这个窗口部件名称和按钮文本没有关系,只是在这一情况下碰巧相似。

注意quit是这个构造函数中的局部变量。MyWidget不能跟踪它,但Qt可以,当MyWidget被删除的时 候,默认地它也会被删除。这就是为什么MyWidget不需要一个析构函数的原因。(另外一方面,如果你选择删除一个子窗口部件,也没什么坏处,这个子窗 口部件会自动告诉Qt它即将死亡。)

  1. setGeometry()调用和上一章的move()和resize()是一样的。   
  2.         connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );  
  3.     } 

因为MyWidget类不知道这个应用程序对象,它不得不连接到Qt的指针,qApp。

一个窗口部件就是一个软件组件并且它应该尽量少地知道关于它的环境,因为它应该尽可能的通用和可重用。

知道了应用程序的名称将会打破上述原则,所以在一个组件,比如MyWidget,需要和应用程序对象对话的这种情况下,Qt提供了一个别名,qApp。

  1. int main( int argc, char **argv )  
  2.   {  
  3.       QApplication a( argc, argv );  
  4.       MyWidget w;  
  5.       w.setGeometry( 100, 100, 200, 120 );  
  6.       a.setMainWidget( &w );  
  7.       w.show();  
  8.       return a.exec();  
  9.   } 

这里我们举例说明了我们的新子窗口部件,把它设置为主窗口部件,并且执行这个应用程序。

行为

这个程序和上一章的在行为上非常相似。不同点是我们实现的方式。无论如何它的行为还是有一些小差别。试试改变它的大小,你会看到什么?

【编辑推荐】

用Qt为Symbian开发应用程序

QML教程:Qt-Quick六大开源组件

QML教程:构建和安装QtComponents

开源软件是基于JVM 平台之Qt移植QtJambi

Qt开发者系列之一:来自瑞典的QML狂热爱好者

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...