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 ) 这样。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值