Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2655018
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2009-10-29 10:21:13


有类似增加菜单的程序,看上去有很多重复类似的代码,
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QMenu *editMenu = menuBar()->addMenu(tr("Edit"));
    QMenu *newObjectMenu = editMenu->addMenu(tr("New Object"));

QAction *newRectangleAction = new QAction(tr("Rectangle"), this);
    connect(newRectangleAction, SIGNAL(triggered(bool)), this, SLOT(newRectangle()));
    newObjectMenu->addAction(newRectangleAction);

QAction *newLineAction = new QAction(tr("Line"), this);
    connect(newLineAction, SIGNAL(triggered(bool)), this, SLOT(newLine()));
    newObjectMenu->addAction(newLineAction);
   
QAction *newEllipseAction = new QAction(tr("Ellipse"), this);
    connect(newEllipseAction, SIGNAL(triggered(bool)), this, SLOT(newEllipse()));
    newObjectMenu->addAction(newEllipseAction
 
QAction *newTextAction = new QAction(tr("Text"), this);
    connect(newTextAction, SIGNAL(triggered(bool)), this, SLOT(newText()));
    newObjectMenu->addAction(newTextAction);*/
...........................
}
 
下面定义宏来实现上面的功能,更有利于维护
#define ADD_MENU_ACTION(AAA, menuObj, actObj, menuName, menuAct) \
 QAction *newAct##AAA = new QAction(menuName, actObj); \
 connect(newAct##AAA , SIGNAL(triggered(bool)), actObj, SLOT(menuAct)); \
 menuObj->addAction(newAct##AAA);
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QMenu *editMenu = menuBar()->addMenu(tr("Edit"));
    QMenu *newObjectMenu = editMenu->addMenu(tr("New Object"));
 
  ADD_MENU_ACTION(1, newObjectMenu, this, tr("Rectangle"), newRectangle());
  ADD_MENU_ACTION(2, newObjectMenu, this, tr("Line"), newLine());
  ADD_MENU_ACTION(3, newObjectMenu, this, tr("Ellipse"), newEllipse());
  ADD_MENU_ACTION(4, newObjectMenu, this, tr("Text"), newText());
 
 ...........................
 
 }
 
 
阅读(2081) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-02-18 10:18:39

不错,值得借鉴

chinaunix网友2010-03-23 14:13:31

Qt4中自定义菜单项的方法:http://cuteqt.wordpress.com/2009/07/page/2/