• 8461阅读
  • 10回复

Qt examples 中的 “Recent Files” 这个例子的疑问 [复制链接]

上一主题 下一主题
离线unlimiteddig
 
只看楼主 正序阅读 楼主  发表于: 2009-02-19
Qt版本:4.4.3
位置: Qt Examples and Demos -> Main Windows -> Recent Files

这个例子没用designer。在初始化menu时用一循环加入了一组Actions:recentFileActs[] 。 这确实完成了 “显示最近打开的文件” 功能。

问题是,如果用designer设计这个UI,该怎么完成这个功能啊? 总不能直接修改UI生成的 ui_xxx.h 吧?

只看该作者 10楼 发表于: 2009-02-20
引用第8楼unlimiteddig于2009-02-19 22:01发表的  :
明白意思了。。。 这样做在目前看来是比较好的。 唯一的缺憾就是比原来的例子多了个二级菜单。 或许例子里的这种menu布局对基于designer的UI设计不合适??

原来那图是你要实现的效果么……之前似乎误解了,原来以为你要做的是折叠菜单

void QMenu::aboutToShow ()  [signal]
在发出这个信号时动态生成菜单好了,webkit的例子里是这么做history的

ls那个方法也不错,方便
离线arm_du

只看该作者 9楼 发表于: 2009-02-19
今天刚刚做完这个功能。designer里按照你想要的顺序添加5个action(一般说来,需要显示的最近文件数目不会太多)属性里设置为隐藏。其余的在程序代码中操作就行了。
离线unlimiteddig
只看该作者 8楼 发表于: 2009-02-19
引用第7楼都市无名者于2009-02-19 20:04发表的  :
void QAction::setMenu ( QMenu * menu )
用这个函数可以让QAction拥有一个二级菜单,你再在这个二级菜单里添加你的Recent Files


明白意思了。。。 这样做在目前看来是比较好的。 唯一的缺憾就是比原来的例子多了个二级菜单。 或许例子里的这种menu布局对基于designer的UI设计不合适??
只看该作者 7楼 发表于: 2009-02-19
void QAction::setMenu ( QMenu * menu )

用这个函数可以让QAction拥有一个二级菜单,你再在这个二级菜单里添加你的Recent Files
离线unlimiteddig
只看该作者 6楼 发表于: 2009-02-19
引用第4楼都市无名者于2009-02-19 18:28发表的  :
qaction也是可以addmenu还不知道setmenu的,就是二级菜单了


呃,不好意思,没能读懂
离线unlimiteddig
只看该作者 5楼 发表于: 2009-02-19
引用第3楼weizhy于2009-02-19 18:10发表的  :
那可以使用designer生成action,再在代码里构成menu,这样你就可以控制顺序了,,,


hmm。。。designer生成actions,而把下面这些弄到外面?
    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAction);
    fileMenu->addAction(openAction);
    fileMenu->addAction(saveAction);
    fileMenu->addAction(saveAsAction);
    separatorAction = fileMenu->addSeparator();
    for (int i = 0; i < MaxRecentFiles; ++i)
        fileMenu->addAction(recentFileActions);
    fileMenu->addSeparator();
    fileMenu->addAction(exitAction);

这样似乎还不如不用designer,直接敲代码。。。况且,好像在designer里只能一个个加action。。。若recentFileActions长度为100。。。
只看该作者 4楼 发表于: 2009-02-19
qaction也是可以addmenu还不知道setmenu的,就是二级菜单了
离线weizhy
只看该作者 3楼 发表于: 2009-02-19
那可以使用designer生成action,再在代码里构成menu,这样你就可以控制顺序了,,,
离线unlimiteddig
只看该作者 2楼 发表于: 2009-02-19
引用第1楼破烂石头于2009-02-19 14:43发表的  :
在自己写的类里面加。。。
class xxx : public QMainwindow
{
...
.......


谢谢回贴!

1. 我也这么想过,但似乎只能加到menu的最后(Exit 之后)?不知怎样才能像例子那样加到中间?



2. 另外这样做我觉得不太理想, UI部分混入代码中了,自己得手工维护部分connection和action。不知大家怎么想?
[ 此贴被unlimiteddig在2009-02-19 16:15重新编辑 ]
离线破烂石头
只看该作者 1楼 发表于: 2009-02-19
在自己写的类里面加。。。

class xxx : public QMainwindow
{
...
private:
    Ui::xxx ui;
    QAction *recentFileActs;
}
快速回复
限100 字节
 
上一个 下一个