QT编程入门系列文章之十三——菜单和工具条(续)

在这里插入图片描述
 前面一节我们已经把QAction添加到菜单和工具条上面。现在我们要添加一些图片美化一下,然后把信号槽加上,这样,我们的 action就可以相应啦!

首先来添加图标。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的图标大小默认是3232,菜单默认是1616。如果提供的图标小于要求的尺寸,则不做操作,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然后添 加就可以的啦!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习成长分享快乐

您的鼓励是我前进的不竭动力~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值