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 ) 这样。

以上是关于QIconView类clicked()信号问题的解决的主要内容,如果未能解决你的问题,请参考以下文章

给QlineEdit创建简单的clicked 信号方式

被 qt 4 信号和槽中的 clicked() 和 clicked(bool) 混淆

PyQt 中这两个 clicked() 信号有啥区别?

12. 为组件的内建信号编写槽函数

QSerialPort ->write() 或 read() 与 clicked() 信号不同

在 pyQt4 中 QCheckBox 的 clicked() 和 stateChanged() 信号有啥区别?