Linux中QToolButton上的事件处理问题

时间:2009-09-04 07:21:47

标签: c++ linux qt

我正在开发一个应用程序,我在其中添加了一个QToolBar对象,并在其上添加了QToolButton对象,我还将clicked()事件连接到那个但是问题是鼠标单击事件没有在QToolButton上工作但是当我使用Tab将焦点放在那里时,那么空格按钮工作正常,但我想用鼠标点击它...任何想法?这是代码。

pToolBar = new QToolBar(this);

pToolBar->setAllowedAreas(Qt::NoToolBarArea);//NoToolBarAreaAllToolBarAreas
pToolBar->setFloatable(false);
pToolBar->setGeometry(300,0,160,30);

QToolButton *playButton=new QToolButton(pToolBar);

playButton->setIcon(QIcon("/images/play.png"));

playButton->setGeometry(10,0,40,30);

playButton->setToolTip("Play/Pause");

connect(playButton, SIGNAL(clicked()),SLOT(playButtonClicked()));

3 个答案:

答案 0 :(得分:1)

工具按钮通常在使用 QToolBar :: addAction()创建新 QAction 实例时创建,或者使用 QToolBar将现有操作添加到工具栏中: :的addAction()的。

示例:

QAction *newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
newAct->setShortcut(tr("Ctrl+N"));
newAct->setStatusTip(tr("Create a new file"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);

您可以使用触发的信号,触发给定操作时会发出此信号。

你的例子:

QToolButton *playButton=new QToolButton(pToolBar);
connect(playButton, SIGNAL(triggered()),SLOT(playButtonClicked()));

答案 1 :(得分:0)

尝试将工具按钮显式添加到工具栏。以下代码对我来说非常适合:

QToolBar *pToolBar = new QToolBar(this);

QToolButton *playButton=new QToolButton(pToolBar);
playButton->setIcon(QIcon("/images/play.png"));
playButton->setText("Play");
playButton->setToolTip("Play/Pause");
playButton->setGeometry(10,0,40,30);

QAction *a = pToolBar->addWidget(playButton);
a->setVisible(true);

connect(playButton, SIGNAL(clicked()),SLOT(playButtonClicked()));

您应该将QAction指针保存在某处,因为这是分配键盘快捷键,启用/禁用按钮等的最简单方法。让我知道这是否适合您。如果没有,也许在这里发布一个完整的可编辑示例将帮助我们帮助您。您应该能够获得一个小型演示程序,在一个或两个文件中显示您的问题。

干杯,

答案 2 :(得分:0)

正如jordenysp间接解释的那样,API是以QAction为中心的