日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Working with Qt maya2011

發(fā)布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Working with Qt maya2011 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
maya2011使用了Qt框架,10年來幾乎一成不變的maya界面,現(xiàn)今變成了黑糊糊的界面,雖然只是隨便的玩弄了一下,感覺比以前的界面好多了。
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
[url]ftp://ftp.qt.nokia.com/qt/source/qt-win-opensource-4.5.3-mingw.exe[/url]

Linux 請參考[url]http://download.autodesk.com/us/maya/2011help/files/Setting_up_your_build_environment_Linux_environments_32bit_and_64bit.htm[/url]

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

安裝好Qt后就可以使用Designer了,在開始制作UI前我簡單的給你們說一下maya是如何讀取.ui文件的。雖然maya2011使用了Qt框架,但據(jù)我所知maya不是像Qt那樣的讀取.ui文件,而是通過loadUI命令來讀取的,再通過MQtUtil類來進行(已識別的)maya的腳本和Qt的插件(widgets)的連接來完成的,簡單的說就是通過loadUI命令讀取.ui文件,將讀取的內容給MQtUtil進行過濾,如果能識別就會轉化成對應mel命令來實現(xiàn)UI。所以雖然你使用Designer制作的UI,實際用起來還是基于mel的UI。可見maya還是在力挺mel啊,都撐了10年了。
打開Designer,我們要開始制作UI了,選擇"Dialog without Buttons",點擊"Create"

[img]http://dl.iteye.com/upload/attachment/237430/8ca111df-b13a-3e05-a4ee-078e254c8fcc.png[/img]

給窗口一個獨一無二的名稱,如"QtDialog",就像你在用mel寫UI時一樣給窗口一個獨一無二的名稱是一個很安全的做法,這樣你以后就能用mel后python來對其進行訪問了,如果你像更改窗口的標題可以在"windowTitle"那里更改

[img]http://dl.iteye.com/upload/attachment/237432/ab309d13-b766-39c0-ba44-042d2c86fdd4.png[/img]

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

[img]http://dl.iteye.com/upload/attachment/237437/f680b080-6bb9-3b04-94bf-b913a216f062.png[/img][img]http://dl.iteye.com/upload/attachment/237440/14c203d3-b39b-35cc-a11f-b34acb60c1f9.png[/img]

雙擊"Label"就可以編輯它們的顯示內容,因為我們不需要對其進行訪問,所以不需要給它們一個獨一無二的名稱,你也可以編輯它們的字體等屬性,但"Combo Box"和"Line Edit"就需要了,如圖Object列是它們在maya里的名稱,Class是控件的類型,我把"Combo Box"命名為"objTypeOM","OM"是optionMenu的縮寫,這樣命名是因為"Combo Box"就是optionMenu,可以推論"Line Edit"就是textField,所以我命名為"objNameTF"

[img]http://dl.iteye.com/upload/attachment/237442/2eeaf617-89d9-334d-b6b1-cdb161998156.png[/img]

右鍵"Combo Box"來編輯它的項目

[img]http://dl.iteye.com/upload/attachment/237446/8c18a779-c3da-3404-9db7-423114085bc2.png[/img]

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

[img]http://dl.iteye.com/upload/attachment/238027/b731caff-66fd-3f6b-9eec-15b9018febb6.png[/img]

現(xiàn)在我們來添加兩個按鈕,也許你會問為什么不在一開始就選擇一個有按鈕的UI來創(chuàng)建呢,原因很簡單,Qt里默認的帶按鈕的窗口都是使用QDialogButtonBox插件(widgets),這是maya不能識別的,因為mel沒有按鈕組,只有按鈕(button)命令,所以我們只能使用PushButton,雙擊就能更改顯示名稱

[img]http://dl.iteye.com/upload/attachment/238040/a06ab2a8-03a2-3104-b541-11957a4c38d2.png[/img]

到這里我們的UI就完成了,接下來就是對相應的控件進行命令綁定,當objTypeOM(Combo Box)的項目發(fā)生變化時,我希望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按鈕時我希望能根據(jù)objTypeOM所選的項目來創(chuàng)建相應的物體,物體的名稱則是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;
}
}
現(xiàn)在我們把這些方法和對應的控件進行綁定,選擇objTypeOM在Property Editor里點擊加號圖標并選擇"String"來添加動態(tài)屬性

[img]http://dl.iteye.com/upload/attachment/238055/a9e4ce67-c36b-343d-b39d-3223ee523228.png[/img]

因為"Combo Box"就是optionMenu,所以我們只要加入optionMenu命令的標簽maya就能識別,需要注意的是在標簽前面是"-"的代表使用mel,是"+"的代表使用python,我為什么給上面的方法都加一個"mel"前綴,就是為了區(qū)分mel和python。我們需要的是"changeCommand"標簽,所以我們要輸入"-changeCommand"

[img]http://dl.iteye.com/upload/attachment/238061/e3a1df83-b411-376b-8731-0310fd9abcc5.png[/img]

然后在"-changeCommand"屬性中加入"mel_changeType()"(包括雙引號),來完成綁定

[img]http://dl.iteye.com/upload/attachment/238070/21e03fe3-5e4d-33f9-b696-e17b43c471fd.png[/img]

同樣我們也給objNameTF添加"-changeCommand"屬性,并將它和"mel_changeName()"綁定;而Ok按鈕就添加"-command"屬性并將它和"mel_btnCmd()"綁定;最后是Close按鈕,也給它添加"-command"屬性,并輸入"deleteUI QtDialog",這樣在點擊Close時就會關閉窗口。
把UI保存為createDialog.ui(可以是其它名稱),我們可以轉到maya來了,因為我的本本無法使用maya2011,所以就無法截圖了。在腳本編輯器(mel面板)中執(zhí)行下面的腳本
// 請根據(jù)你的createDialog.ui文件路徑進行修改
// 如果使用的是win系統(tǒng),請使用\\來代替\
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;
}
}
[img]http://dl.iteye.com/upload/attachment/238096/ece4832b-b2af-37ab-801b-f1cfd02b0a86.png[/img]

這個窗口就會出現(xiàn)在你的面前,當然是黑色的UI,你可以選擇不同的物體類型來查看效果,或是在物體名稱欄中輸入"Sphere","Cube","Cylinder","Cone","Plane"(不包括雙引號),最后點擊按鈕,你都會看到相應的動作。

你還可以將這個窗口和maya的主窗口進行整合,這樣可以使你的窗口像Attribute Editor和Channel Box一樣可以隨便移動到maya的主窗口的任何位置,你只需要使用這一行命令
dockControl -content $dialog;
要使用python命令,就是把控件的屬性添加成"+"的就行,其它都是一樣的,需要注意的是你不能給控件同時添加"-"和"+"的屬性,因為這樣做并不能同時使用mel和python反而會造成無法識別方法而發(fā)生錯誤。

最后附上python的方法并附上.ui文件
# 請根據(jù)你的createDialog.ui文件路徑進行修改
# 如果使用的是win系統(tǒng),請使用\\來代替\
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)

總結

以上是生活随笔為你收集整理的Working with Qt maya2011的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。