菜单和工具条(二)

首先来添加图标。QAction的图标会显示在菜单项的前面以及工具条按钮上面显示。

为了添加图标,我们首先要使用Qt的资源文件。在QtCreator的项目上右击,选择New File...,然后选择resource file。

然后点击next,选择好位置,Finish即可。为了使用方便,我就把这个文件建在根目录下,建议应该在仔细规划好文件之后,建在专门的rsources文件夹下。完成之后,生成的是一个.qrc文件,qrc其实是Qt Recource Collection的缩写。它只是一个普通的XML文件,可以用记事本等打开。不过,这里我们不去深究它的结构,完全利用QtCreator操作这个文件,

点击Add按钮,首先选择Add prefix,然后把生成的/new/prefix改成/。这是prefix就是以后使用图标时需要提供的前缀,以/开头。添加过prefix之后,然后在工程文件中添加一个图标,再选择Add file,选择那个图标。这样完成之后保存qrc文件即可。

说明一下,QToolBar的图标大小默认是32*32,菜单默认是16*16。如果提供的图标小于要求的尺寸,则不做操作,Qt不会为你放大图片;反之,如果提供的图标文件大于相应的尺寸要求,比如是64*64,Qt会自动缩小尺寸。

图片的路径怎么看呢?可以看出,Qt的资源文件视图使用树状结构,根是/,叶子节点就是图片位置,连接在一起就是路径。比如这张图片的路径就是/Open.png。

注意,为了简单起见,我们没有把图标放在专门的文件夹中。正式的项目中应该单独有一个resources文件夹放资源文件的。

然后回到前面的mainwindow.cpp,在构造函数中修改代码:

openAction = new QAction(tr("&Open"), this); 
openAction->setShortcut(QKeySequence::Open); 
openAction->setStatusTip(tr("Open a file.")); 
openAction->setIcon(QIcon(":/Open.png")); // Add code.

我们使用setIcon添加图标。添加的类是QIcon,构造函数需要一个参数,是一个字符串。由于我们要使用qrc中定义的图片,所以字符串以 : 开始,后面跟着prefix,因为我们先前定义的prefix是/,所以就需要一个/,然后后面是file的路径。这是在前面的qrc中定义的,打开qrc看看那张图片的路径即可。

好了,图片添加完成,然后点击运行,看看效果吧!

瞧!我们只需要修改QAction,菜单和工具条就已经为我们做好了相应的处理,还是很方便的!

下一步,为QAction添加事件响应。还记得Qt的事件响应机制是基于信号槽吗?点击QAction会发出triggered()信号,所以,我们要做的是声名一个slot,然后connect这个信号。

mainwindow.h

class MainWindow : public QMainWindow 

        Q_OBJECT 
 
public: 
        MainWindow(QWidget *parent = 0); 
        ~MainWindow(); 
 
private slots: 
        void open();         
 
private: 
        QAction *openAction; 
};

因为我们的open()目前只要在类的内部使用,因此定义成private slots即可。然后修改cpp文件:

MainWindow::MainWindow(QWidget *parent) 
        : QMainWindow(parent) 

        openAction = new QAction(tr("&Open"), this); 
        openAction->setShortcut(QKeySequence::Open); 
        openAction->setStatusTip(tr("Open a file.")); 
        openAction->setIcon(QIcon(":/Open.png")); 
        connect(openAction, SIGNAL(triggered()), this, SLOT(open())); 
 
        QMenu *file = menuBar()->addMenu(tr("&File")); 
        file->addAction(openAction); 
 
        QToolBar *toolBar = addToolBar(tr("&File")); 
        toolBar->addAction(openAction); 

 
void MainWindow::open() 

        QMessageBox::information(NULL, tr("Open"), tr("Open a file")); 
}

注意,我们在open()函数中简单的弹出一个标准对话框,并没有其他的操作。编译后运行,看看效果:

好了,关于QAction的动作也已经添加完毕了!

至此,QAction有关的问题先告一段落。最后说一下,如果你还不知道怎么添加子菜单的话,看一下QMenu的API,里面会有一个addMenu函数。也就是说,创建一个QMenu然后添加就可以的啦!

时间: 2024-08-25 23:09:32

菜单和工具条(二)的相关文章

菜单与工具条的同步 APP_STANDARD.SYNCHRONIZE

初始情况下,菜单与工具条的状态是一致的,但程序中动态改变某一属性时,工具条并不能相应地改变,所以必须编写代码完成同步.通过调用以下函数来完成同步:APP_STANDARD.SYNCHRONIZE需要注意的是,当触发以下TRIGGER 以后,同步将自动完成,无需人工完成.WHEN–NEW–RECORD–INSTANCEWHEN–NEW–BLOCK–INSTANCEWHEN–NEW–ITEM–INSTANCE在FORM的开发过程中,我们在代码中设置了块的可修改.可删除属性时,但是却菜单栏上的工具条并

QT学习之路--菜单、工具条、状态栏

下面一些是 Menu Bar,用于显示菜单;再下面一点事 Toolbar areas,用于显示工具条,Status Bar,就是状态栏. Qt 提供了一个 QStatusBar 类来实现状态栏. Qt 里面也有一个类似的类,叫做 QAction QAction 能够根据添加的位置来改变自己的样子 ——如果添加到菜单中,就会显示成一个菜单项;如果添加到工具条,就会显示成一个按钮. Qt提供的颜色选择对话框:QColorDialog. QColor color = QColorDialog::get

设置菜单和工具条

代码: 可任选一套方法进行显示和隐藏,如果决定有动画的那套,那么一开始初始化时就必须用set方法进行控制 -(void) setBar { UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:nil]; UIBarButtonItem *searchButton = [[UIBarButtonIte

2014年8月24日 菜单 工具条 右键菜单(上下文菜单)

今天说说菜单 工具条 右键菜单吧,总的来说这些东西其实就是同一个东西.以前我们在做插件的时候遇到右键菜单啊,菜单什么的都会习惯性地去用actionSets这个拓展点.不过现在官方却把这个扩展点已经被deprecated弃用了..官方的说明: Do not use this extension point, it will be removed in future versions of this product. Instead, use the extension point org.ecli

窗体皮肤实现 - 在标题栏上增加快速工具条(四)

前面做的工作就是想在标题区域增加快速工具条.前续的基础工作完成,想要在标题区域增加特殊区域都非常方便.只要在绘制时控制自定义区域需要占用标题区域多少空间,然后直接在所占位置绘制.做这个事情前,稍微把代码规整了下.所以界面皮肤处理放到一个单元中. 主要处理步骤 1.划出一个新区域(整个工具条作为一个区域) 2.处理区域检测(HitTest) 3.如果是新区域,把相应消息传给这个区域处理. 4.响应鼠标点击,执行Action 通过上述步骤就能扩展出所想要的标题区快速工具条的. 标题按钮区域是作为一个

侧栏工具条开发

我们能学到什么 1.使用Sass更好的书写CSS 2.使用RequireJS进行模块化开发,编写出方便复用的代码 3.使用CSS3实现简单的动画效果 ########################################################################################## 使用Sass编写css Sass的基础知识 将sass编译成css -- koala工具的使用 http://koala-app.com/index-zh.html 在

iOS开发项目篇—29自定义工具条

iOS开发项目篇—29自定义工具条 一.简单说明 1.实现效果: 2.实现思路: (1)尝试: 1 //添加子控件 2 -(void)setupTextView 3 { 4 //1.创建输入控件 5 YYTextView *textView=[[YYTextView alloc]init]; 6 //设置frame 7 textView.frame=self.view.bounds; 8 [self.view addSubview:textView]; 9 self.textView=textV

第12章-Swing编程 --- 使用JToolBar创建工具条

Swing提供了JToolBar类来创建工具条,创建JToolBar对象时可以指定如下两个参数: -->name: 该参数指定该工具条的名称. -->orientation:该参数指定该工具条的方法. JToolBar对象还有如下几个常用方法: -->JButton add(Action a): 通过Action对象为JToolBar添加对应的工具按钮. -->void addSeparator(Dimension size):向工具条中添加指定大小的分隔符. -->void

积累的VC编程小技巧之工具条和状态条

1.工具条和状态条中控件的添加: 方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上). 其次,新创建一个类CMainToolBar,要从CToolBar继承(创建过程大概如下:选择工程/增加到工程/新的类:也可以选择工程的根,然后点击右键,选择新的类:或者CTL+W,选择增加类/新的类 --- 然后在class type里选择Generic Class,在Name栏里输入新类的名