`
schi
  • 浏览: 203863 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Working with Qt maya2011

阅读更多
  maya2011使用了Qt框架,10年来几乎一成不变的maya界面,现今变成了黑糊糊的界面,虽然只是随便的玩弄了一下,感觉比以前的界面好多了。
  Ok,感叹到此为止,进入我们今天的话题"Working with Qt",主要介绍如何使用Qt的Designer来给maya制作UI,有了Designer不管你是程序员还是非程序员,都能轻松给maya制作UI。
  先给出Qt的下载地址,Maya 2011 使用的是 Qt 4.5,版本4.5.X的X是无关紧要的,如果你只是用来制作UI我认为版本应该不重要,但如果你是想要写基于Qt的maya插件,那版本就十分重要了。

Win
ftp://ftp.qt.nokia.com/qt/source/qt-win-opensource-4.5.3-mingw.exe

Linux 请参考http://download.autodesk.com/us/maya/2011help/files/Setting_up_your_build_environment_Linux_environments_32bit_and_64bit.htm

Mac
ftp://ftp.qt.nokia.com/qt/source/qt-mac-cocoa-opensource-4.5.3.dmg

  安装好Qt后就可以使用Designer了,在开始制作UI前我简单的给你们说一下maya是如何读取.ui文件的。虽然maya2011使用了Qt框架,但据我所知maya不是像Qt那样的读取.ui文件,而是通过loadUI命令来读取的,再通过MQtUtil类来进行(已识别的)maya的脚本和Qt的插件(widgets)的连接来完成的,简单的说就是通过loadUI命令读取.ui文件,将读取的内容给MQtUtil进行过滤,如果能识别就会转化成对应mel命令来实现UI。所以虽然你使用Designer制作的UI,实际用起来还是基于mel的UI。可见maya还是在力挺mel啊,都撑了10年了。
  打开Designer,我们要开始制作UI了,选择"Dialog without Buttons",点击"Create"



  给窗口一个独一无二的名称,如"QtDialog",就像你在用mel写UI时一样给窗口一个独一无二的名称是一个很安全的做法,这样你以后就能用mel后python来对其进行访问了,如果你像更改窗口的标题可以在"windowTitle"那里更改



  加入我们需要的控件两个"Label",一个"Combo Box"和一个"Line Edit",在Widget Box中找到后直接拖到窗口中就行



  双击"Label"就可以编辑它们的显示内容,因为我们不需要对其进行访问,所以不需要给它们一个独一无二的名称,你也可以编辑它们的字体等属性,但"Combo Box"和"Line Edit"就需要了,如图Object列是它们在maya里的名称,Class是控件的类型,我把"Combo Box"命名为"objTypeOM","OM"是optionMenu的缩写,这样命名是因为"Combo Box"就是optionMenu,可以推论"Line Edit"就是textField,所以我命名为"objNameTF"



  右键"Combo Box"来编辑它的项目



  并加入"Sphere","Cube","Cylinder","Cone","Plane"



  现在我们来添加两个按钮,也许你会问为什么不在一开始就选择一个有按钮的UI来创建呢,原因很简单,Qt里默认的带按钮的窗口都是使用QDialogButtonBox插件(widgets),这是maya不能识别的,因为mel没有按钮组,只有按钮(button)命令,所以我们只能使用PushButton,双击就能更改显示名称



  到这里我们的UI就完成了,接下来就是对相应的控件进行命令绑定,当objTypeOM(Combo Box)的项目发生变化时,我希望objNameTF(Line Edit)里的内容是objTypeOM所选的项目的名称,mel_changeType()就是用来完成这些的命令
global proc mel_changeType()
{
    string $objType = `optionMenu -q -v objTypeOM`;
    textField -e -tx $objType objNameTF;
}

   而当objNameTF里的内容是objTypeOM中的项目名称时,按下回车后objTypeOM会把该项目设置为当前所选的项目,我们需要mel_changeName()
global proc mel_changeName()
{
    string $objTypes[] = {"Sphere","Cube","Cylinder","Cone","Plane"};
    string $text = `textField -q -tx objNameTF`;
    for($i in $objTypes)
    {
        if ($text == $i)
            optionMenu -e -v $i objTypeOM;
    }
}

  最后是Ok按钮的命令,在按下Ok按钮时我希望能根据objTypeOM所选的项目来创建相应的物体,物体的名称则是objNameTF里的内容,这就需要mel_btnCmd()
global proc mel_btnCmd()
{
    string $objType = `optionMenu -q -v objTypeOM`;
    string $objName = `textField -q -tx objNameTF`;
    switch($objType)
    {
        case "Sphere":
            polySphere -n $objName;
            break;
        case "Cube":
            polyCube -n $objName;
            break;
        case "Cylinder":
            polyCylinder -n $objName;
            break;
        case "Cone":
            polyCone -n $objName;
            break;
        case "Plane":
            polyPlane -n $objName;
            break;
    }
}

  现在我们把这些方法和对应的控件进行绑定,选择objTypeOM在Property Editor里点击加号图标并选择"String"来添加动态属性



  因为"Combo Box"就是optionMenu,所以我们只要加入optionMenu命令的标签maya就能识别,需要注意的是在标签前面是"-"的代表使用mel,是"+"的代表使用python,我为什么给上面的方法都加一个"mel"前缀,就是为了区分mel和python。我们需要的是"changeCommand"标签,所以我们要输入"-changeCommand"



  然后在"-changeCommand"属性中加入"mel_changeType()"(包括双引号),来完成绑定



  同样我们也给objNameTF添加"-changeCommand"属性,并将它和"mel_changeName()"绑定;而Ok按钮就添加"-command"属性并将它和"mel_btnCmd()"绑定;最后是Close按钮,也给它添加"-command"属性,并输入"deleteUI QtDialog",这样在点击Close时就会关闭窗口。
  把UI保存为createDialog.ui(可以是其它名称),我们可以转到maya来了,因为我的本本无法使用maya2011,所以就无法截图了。在脚本编辑器(mel面板)中执行下面的脚本
// 请根据你的createDialog.ui文件路径进行修改
// 如果使用的是win系统,请使用\\来代替\
string $dialog = `loadUI  -uiFile "/home/schi/createDialog.ui"`;
showWindow $dialog;

// objTypeOM command
global proc mel_changeType()
{
    string $objType = `optionMenu -q -v objTypeOM`;
    textField -e -tx $objType objNameTF;
}

// objNameTF command
global proc mel_changeName()
{
    string $objTypes[] = {"Sphere","Cube","Cylinder","Cone","Plane"};
    string $text = `textField -q -tx objNameTF`;
    for($i in $objTypes)
    {
        if ($text == $i)
            optionMenu -e -v $i objTypeOM;
    }
}

// Ok button command
global proc mel_btnCmd()
{
    string $objType = `optionMenu -q -v objTypeOM`;
    string $objName = `textField -q -tx objNameTF`;
    switch($objType)
    {
        case "Sphere":
            polySphere -n $objName;
            break;
        case "Cube":
            polyCube -n $objName;
            break;
        case "Cylinder":
            polyCylinder -n $objName;
            break;
        case "Cone":
            polyCone -n $objName;
            break;
        case "Plane":
            polyPlane -n $objName;
            break;
    }
}



  这个窗口就会出现在你的面前,当然是黑色的UI,你可以选择不同的物体类型来查看效果,或是在物体名称栏中输入"Sphere","Cube","Cylinder","Cone","Plane"(不包括双引号),最后点击按钮,你都会看到相应的动作。

  你还可以将这个窗口和maya的主窗口进行整合,这样可以使你的窗口像Attribute Editor和Channel Box一样可以随便移动到maya的主窗口的任何位置,你只需要使用这一行命令
dockControl -content $dialog;

  要使用python命令,就是把控件的属性添加成"+"的就行,其它都是一样的,需要注意的是你不能给控件同时添加"-"和"+"的属性,因为这样做并不能同时使用mel和python反而会造成无法识别方法而发生错误。

最后附上python的方法并附上.ui文件
# 请根据你的createDialog.ui文件路径进行修改
# 如果使用的是win系统,请使用\\来代替\
dialog = cmds.loadUI(uiFile='C:\\mack\\qt\\createDialog_py.ui')
cmds.showWindow(dialog)

# 如需要整合到maya主界面,可以使用该行
cmds.dockControl( area='left', content=dialog )

# objTypeOM command
def py_changeType():
    objType = cmds.optionMenu('objTypeOM_py',q=1,v=1)
    cmds.textField('objNameTF_py',e=1,tx=objType)

# objNameTF command
def py_changeName():
    objTypes = ("Sphere","Cube","Cylinder","Cone","Plane")
    name = cmds.textField('objNameTF_py',q=1,tx=1)
    [cmds.optionMenu('objTypeOM_py',e=1,v=i) for i in objTypes if name == i]
    
# Ok button command
def py_btnCmd():
    objType = cmds.optionMenu('objTypeOM_py',q=1,v=1)
    name = cmds.textField('objNameTF_py',q=1,tx=1)
    
    if objType == "Sphere": cmds.polySphere(n=name)
    elif objType == "Cube": cmds.polyCubee(n=name)
    elif objType == "Cylinder": cmds.polyCylinder(n=name)
    elif objType == "Cone": cmds.polyCone(n=name)
    elif objType == "Plane": cmds.polyPlane(n=name)
  • 大小: 50 KB
  • 大小: 42.5 KB
  • 大小: 56.4 KB
  • 大小: 18.1 KB
  • 大小: 38.6 KB
  • 大小: 48.3 KB
  • 大小: 63.6 KB
  • 大小: 21.4 KB
  • 大小: 58.6 KB
  • 大小: 55.8 KB
  • 大小: 108.8 KB
  • 大小: 22.6 KB
0
1
分享到:
评论

相关推荐

    Introduction to Design Patterns in C++ with Qt, 2nd

    Qt is a cross-platform application framework and widget toolkit for creating classic and embedded graphical user interfaces, and applications that run on various software and hardware platforms with ...

    Working with Ruby Threads

    《Working with Ruby Threads》这本书深入探讨了Ruby语言中的线程机制,对于希望利用Ruby进行高效并发编程的开发者来说是一本不可多得的资源。 #### Ruby为什么值得关注? Ruby作为一种动态类型、解释型语言,在...

    Working With Microsoft Dynamics CRM 2011

    下面,我们将深入探讨《Working With Microsoft Dynamics CRM 2011》这一资料中的核心知识点。 ### 一、Microsoft Dynamics CRM 2011概述 Microsoft Dynamics CRM 2011是微软推出的一款全面的客户关系管理软件,它...

    Working with ms crm 2011

    在IT行业中,Microsoft Dynamics CRM 2011是一款强大的客户关系...而“Working With Microsoft Dynamics CRM 2011.pdf”这份文档很可能是关于这个主题的详细指南,涵盖了上述知识的实践应用和案例分析,值得深入学习。

    Retrofit Love Working with APIs on Android

    这个主题“Retrofit Love Working with APIs on Android”深入探讨了如何利用Retrofit来构建强大的网络功能。 Retrofit是由Square公司开发的一个类型安全的HTTP客户端,它允许开发者通过简单的接口定义来创建网络...

    Prentice.Hall.C++.GUI.Programming.with.Qt.4.2nd.Edition.2008.chm

    Working with Unicode Making Applications Translation-Aware Dynamic Language Switching Translating Applications Chapter 19. Look and Feel Customization Using Qt Style Sheets Subclassing ...

    Working with XML (ppt)

    在“Working with XML”这个PPT中,我们可以期待深入学习XML的基础概念、结构以及它在ASP.NET中的应用。 XML的核心是其自描述性,这意味着每个元素和属性都有明确的含义。它的结构由开始标签 `和结束标签 `>` 包围...

    working with unix process

    Unix进程是Unix操作系统中的核心概念,它代表一个正在执行的程序。了解Unix进程的细节对于任何需要在Unix环境下工作的开发者或系统管理员来说至关重要。本知识点将详细介绍Unix进程的不同方面,包括进程的属性、资源...

    Pro ADO.NET Data Services: Working with RESTful Data

    Pro ADO.NET Data Services: Working with RESTful Data Paperback: 336 pages Publisher: Apress; 1 edition (December 2, 2008) Language: English ISBN-10: 143021614X ISBN-13: 978-1430216148 Format: PDF You...

    西门子SCL编程语言指导手册S7-SCL - Working with S7-SCL.rar

    在"西门子SCL编程语言指导手册S7-SCL - Working with S7-SCL"中,你将学习到以下关键知识点: 1. **SCL基本概念**:了解SCL的编程环境,包括源代码编辑器、编译器和调试工具的使用。 2. **数据类型与变量声明**:...

    Working with Linux Quick Hacks for the Command Line epub

    Working with Linux Quick Hacks for the Command Line 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Working with Ruby Threads(完整版)

    "Working With Ruby Threads"这本书全面深入地探讨了这个主题,提供了关于Ruby线程的详尽知识。 在Ruby中,线程允许程序同时执行多个任务,从而提高了效率。Ruby的线程模型基于两种主要实现:MRI(Matz's Ruby ...

    Working Effectively With Legacy Code

    Working Effectively With Legacy Code

    Working with Odoo 英文版

    odoo 教您自定义. odoo 教您自定义. odoo 教您自定义.

    Python Data Science Handbook Essential Tools for Working with Data epub 0分

    Python Data Science Handbook Essential Tools for Working with Data 英文epub

Global site tag (gtag.js) - Google Analytics