Qt进修之路(13):菜单和东西条(续)
当前位置:以往代写 > C/C++ 教程 >Qt进修之路(13):菜单和东西条(续)
2019-06-13

Qt进修之路(13):菜单和东西条(续)

Qt进修之路(13):菜单和东西条(续)

副标题#e#

前面一节我们已经把QAction添加到菜单和东西条上面。此刻我们要添加一些图片美化一下,然后把信号槽加上,这样,我们的action就可以相应啦!

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

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

Qt学习之路(13):菜单和对象条(续)

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

Qt学习之路(13):菜单和对象条(续)

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

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

Qt学习之路(13):菜单和对象条(续)


#p#副标题#e#

图片的路径怎么看呢?可以看出,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看看那张图片的路径即可。

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

Qt学习之路(13):菜单和对象条(续)

瞧!我们只需要修改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()函数中简朴的弹出一个尺度对话框,并没有其他的操纵。编译后运行,看看结果:

Qt学习之路(13):菜单和对象条(续)

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

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

出处http://devbean.blog.51cto.com/448512/205958

    关键字:

在线提交作业