QIconView类clicked()信号问题的解决
Posted zieckey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QIconView类clicked()信号问题的解决相关的知识,希望对你有一定的参考价值。
假如我们想用QIconView类,并在其中放置了很多图标按钮,
我们怎么才能捕捉到鼠标点击某个图标按钮而响应一件事情呢?
这里我选择 void QIconView::clicked ( QIconViewItem * item ) [signal] 该信号来实现这个想法。
假设我们有这个类:
class mainForm : public QDialog
{
Q_OBJECT
public:
mainForm( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
~mainForm();
QIconView* navigateIconView;
QIconViewItem *mpfindIconViewItem;
public slots:
virtual void iconClickedSlot( QIconViewItem * );
};
构造函数为:
mainForm::mainForm( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl )
{
QPixmap image0( ( const char** ) image0_data );
QPixmap image1( ( const char** ) image1_data );
if ( !name )
setName( "mainForm" );
resize( 596, 480 );
setCaption( tr( "Signal Icon View" ) );
navigateIconView = new QIconView( this, "navigateIconView" );
mpfindIconViewItem = new QIconViewItem( navigateIconView, tr( "find" ), image0 );
// signals and slots connections
connect( navigateIconView, SIGNAL( clicked( QIconViewItem *) ), this, SLOT( iconClickedSlot( QIconViewItem* ) ) );
}
我们想捕捉到鼠标点击 mpfindIconViewItem 按钮图标的信号,可以像上那样连接一个信号和曹。
该曹的内容该怎么写呢?
这里我给出一个比较好的写法
void mainForm::iconClickedSlot( QIconViewItem * tempIconViewItem )
{
qDebug( "Entering into mainForm::iconClickedSlot( )" );
if( tempIconViewItem == mainForm::mpfindIconViewItem )
{
static int count = 0;
printf("This is the %dth time you clicked the mpfindIconViewItem item!/n",count++);
}
else
{
printf("You clicked other area instead of the mpfindIconViewItem !! Please try again!!/n");
}
qDebug( "Leaving out of mainForm::iconClickedSlot( )" );
}
这里说明一下,当有鼠标点击QIconView类对象的区域时,就发出clicked( QIconViewItem *)该信号,
如果鼠标点击(无论是右键还是左键)到了某一 item ,item 就为该被点击到的 QIconViewItem 类图标,否则为空。
该信号将QIconViewItem * 这个参数传递给iconClickedSlot这个曹。为了捕捉到我们需要的信号,
我们就在对应的SLOT函数里添加判断语句,如程序中: if( tempIconViewItem == mainForm::mpfindIconViewItem ) 这样。
我们怎么才能捕捉到鼠标点击某个图标按钮而响应一件事情呢?
这里我选择 void QIconView::clicked ( QIconViewItem * item ) [signal] 该信号来实现这个想法。
假设我们有这个类:
class mainForm : public QDialog
{
Q_OBJECT
public:
mainForm( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
~mainForm();
QIconView* navigateIconView;
QIconViewItem *mpfindIconViewItem;
public slots:
virtual void iconClickedSlot( QIconViewItem * );
};
构造函数为:
mainForm::mainForm( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl )
{
QPixmap image0( ( const char** ) image0_data );
QPixmap image1( ( const char** ) image1_data );
if ( !name )
setName( "mainForm" );
resize( 596, 480 );
setCaption( tr( "Signal Icon View" ) );
navigateIconView = new QIconView( this, "navigateIconView" );
mpfindIconViewItem = new QIconViewItem( navigateIconView, tr( "find" ), image0 );
// signals and slots connections
connect( navigateIconView, SIGNAL( clicked( QIconViewItem *) ), this, SLOT( iconClickedSlot( QIconViewItem* ) ) );
}
我们想捕捉到鼠标点击 mpfindIconViewItem 按钮图标的信号,可以像上那样连接一个信号和曹。
该曹的内容该怎么写呢?
这里我给出一个比较好的写法
void mainForm::iconClickedSlot( QIconViewItem * tempIconViewItem )
{
qDebug( "Entering into mainForm::iconClickedSlot( )" );
if( tempIconViewItem == mainForm::mpfindIconViewItem )
{
static int count = 0;
printf("This is the %dth time you clicked the mpfindIconViewItem item!/n",count++);
}
else
{
printf("You clicked other area instead of the mpfindIconViewItem !! Please try again!!/n");
}
qDebug( "Leaving out of mainForm::iconClickedSlot( )" );
}
这里说明一下,当有鼠标点击QIconView类对象的区域时,就发出clicked( QIconViewItem *)该信号,
如果鼠标点击(无论是右键还是左键)到了某一 item ,item 就为该被点击到的 QIconViewItem 类图标,否则为空。
该信号将QIconViewItem * 这个参数传递给iconClickedSlot这个曹。为了捕捉到我们需要的信号,
我们就在对应的SLOT函数里添加判断语句,如程序中: if( tempIconViewItem == mainForm::mpfindIconViewItem ) 这样。
以上是关于QIconView类clicked()信号问题的解决的主要内容,如果未能解决你的问题,请参考以下文章
被 qt 4 信号和槽中的 clicked() 和 clicked(bool) 混淆