• 8680阅读
  • 2回复

Practical Qt系列1.2:双击时不触发单击事件 [复制链接]

上一主题 下一主题
离线myer
 

只看楼主 倒序阅读 楼主  发表于: 2006-06-15
1.2 双击时不触发单击事件

为了避免双击时触发单击事件,在单击处理函数clicked()中启动一timer,延时qApp->doubleClickInterval(),而在此timer的timeout()中处理单击事件,在双击处理函数停止此timer,一个完整的例子代码如下:(for Qt3,Qt4的也差不多,省略)

class Test :public QListBox {
  Q_OBJECT

public:
  Test( QWidget* parent, const char* name = 0 )
    : QListBox( parent, name ) {
    connect( this, SIGNAL( clicked( QListBoxItem* ) ),
          this, SLOT( seeingSingleClick() ) );
    connect( this, SIGNAL( doubleClicked( QListBoxItem* ) ),
          this, SLOT( handleDoubleClick() ) );

    _timer = new QTimer( this );
    connect( _timer, SIGNAL( timeout() ),
          this, SLOT( handleSingleClick() ) );

    insertStringList( QStringList() << "Item 1" << "Item 2"
                << "Item 3" << "Item 4" );
  }

protected slots:
  void seeingSingleClick() {
    _timer->start( qApp->doubleClickInterval(), true );
  }
  void handleSingleClick() {
    qDebug("This was a single click!");
  }
  void handleDoubleClick() {
    qDebug("This was a double click!");
    _timer->stop();
  }
private:
  QTimer* _timer;
};
[ 此贴被XChinux在2006-06-15 11:56重新编辑 ]
http://user.qzone.qq.com/56430808
离线myer

只看该作者 1楼 发表于: 2006-06-15
一个完整的例子代码:
附件: main.rar (1 K) 下载次数:78
http://user.qzone.qq.com/56430808
离线spscc1008

只看该作者 2楼 发表于: 2010-07-21
像你这样 单击会有延时
快速回复
限100 字节
 
上一个 下一个