読み込んでいます...
2009年07月26日

Qt里面的事件响应不那么复杂,也就不需要用大量的笔墨去描述Qt的事件了,Qt的事件比较简单,但是也远非没有C#简单,C#一个+=,-=就注册事件和注销事件,但是在Qt就要复杂一点,不过相比VC++来说,那要简单多了。

在了解Qt的事件的时候,我们要了解SIGNAL和SLOT。其实SIGNAL和SLOT在Qt里面和在Windows里面的事件和消息是一样的,SIGNAL和SLOT被称作信号和槽,我知道一开始会难以理解一点,因为我们长期都是在通过事件响应消息的思考方式来思考问题,其实SIGNAL和SLOT和事件和消息在概念上也没有太大的区别,我们只需要当作是一个事件链接即可。

我们可以从设计器中添加事件,比如下面的图。

我们可以在设计器中很轻便的添加信号和槽,不过可惜的是,我们在设计器中添加的事件和槽并不能自定义,例如上图我们中间发送者是pushButton,信号是clicked(点击),然后接受者是mainToolBar,我们接受者响应的一些事件,只能在列表里面选择,这根本无法满足我们的要求,所以我们就要在文件中自己编写响应的信号槽。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(
new Ui::MainWindow)
{
    
//初始化ui
    ui->setupUi(this);
    
//创建信号槽
    QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(Dosomething()));
}

上面的代码即我们在主窗体初始化的时候编写的,这个时候我们在主窗体中编写了相应的信号槽,上面的意思就是pushButton按下后,响应Dosomething事件。参数是发送者的对象,响应的方法,接受者的对象和响应的方法。这里值得注意的就是,并不是所有的方法都能够添加到信号槽中并响应,这里还需要声明一个方法为SLOT。 

在头文件中,我们需这样声明。 

public slots:
    
void Dosomething();

申明SLOT事件之后,我们才能够在信号槽中添加响应的事件响应了,然后你再在cpp文件里面写这个方法就可以了。

void MainWindow::Dosomething()
{
    
//在这里编写代码即可
}

这样就搞定了一个事件响应了,Qt里面的事件响应相比之下还是非常容易的。对于ui里面编写的事件响应,会生成到响应的ui_classname头文件中,不过无论在ui的代码中还是在主窗体的代码中,都没有太大的区别。

445路过 0评论 QT 阅读全文..

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »