• 6417阅读
  • 9回复

[讨论]编写 Qt desinger plugin [复制链接]

上一主题 下一主题
离线zwleopard
 

只看楼主 正序阅读 楼主  发表于: 2011-06-26
最近在用 Qt designer 为 Maya 设计一个 UI,要求窗口是透明并且是无边框的,摸索了一下 designer,发现本身的功能好象无法达到要求,于是想写一个 designer 的 plug-in。

plugin 从 QMainWindow 中派生出来,编译成功,也能 load 到 Maya 中,但发现 窗口可以被覆盖,比如说可以被 Maya 的主窗口覆盖,我如何设置才能让它一直浮在 Maya 的主窗口上呢?并且可以被其它程序窗口覆盖。

也试过从 QWidget 和 QDialog 派生,但不解决问题。哪位大侠知道哪里出了问题吗? 先谢谢了。
离线zwleopard

只看该作者 9楼 发表于: 2011-06-27
应该是,Maya 的 UI 都是 Qt 做的。

在Maya 里,我可以用一个命令 loadUI,把一个 .ui 文件 load 到 Maya 中。但我不知道这个命令到底做了些什么。
离线XChinux

只看该作者 8楼 发表于: 2011-06-27
你maya主窗口是QDialog或QMainWindow派生类吗?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zwleopard

只看该作者 7楼 发表于: 2011-06-27


晕,这怎么做啊。。。。。

为什么 designer 里的 QDialog 和 QMainWindow 可以,而它的派生类就不可以啊,奇怪啊
离线XChinux

只看该作者 6楼 发表于: 2011-06-27
要获取maya主窗口的指针,设置成你的MyWidget的parent。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zwleopard

只看该作者 5楼 发表于: 2011-06-27
嗯,前面两条语句

setWindowFlags(Qt::Widget | Qt::FramelessWindowHint);
setStyleSheet("MyWidget {background:transparent;}

可以使窗口无边框和透明,但还是没有办法使窗口浮在Maya主窗口上,鼠标点一下Maya主窗口,会被覆盖掉,但我用 Designer 中的 QDialog 生成一个窗口,就不会这样,真是奇怪, 头痛,搞了好几天了。
离线XChinux

只看该作者 4楼 发表于: 2011-06-27
pmainwindow是父对象指针啊。
你既然是用做designer中的插件的 ,那就不需要它了,你在designer生成的.ui对应的ui_xxxx.h文件中就调用了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zwleopard

只看该作者 3楼 发表于: 2011-06-27
还有 MyWidget *mywidget = new MyWidget(pmainwindow); 里的 pmainwindow 是哪里来的?直接写上就可以了吗?
离线zwleopard

只看该作者 2楼 发表于: 2011-06-27
谢谢大侠 Xchinux,不过还有一个问题

这条语句

MyWidget *mywidget = new MyWidget(pmainwindow);

应该放在哪里啊? 是 MyWidgetPlugin 的 createWidget 函数里吗? 还是 MyWidget 的构造函数?

谢谢
离线XChinux

只看该作者 1楼 发表于: 2011-06-26
从QDialog派生,然后设置,假设叫MyWidget:

setWindowFlags(Qt::Widget | Qt::FramelessWindowHint);
setStyleSheet("MyWidget {background:transparent;}

MyWidget *mywidget = new MyWidget(pmainwindow);

二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个