前面說了幾個標準對話框,下面不打算繼續說明一些組件的使用,因爲這些使用很難講完,很多東西都是與實際應用相關的。實際應用的複雜性決定了我們根本不可能把所有組件的所有使用方法都說明白。這次來說說Qt相對高級一點的特性:事件。
keyPressEvent()
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QMouseEvent>
class EventLabel : public QLabel
{
protected:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
};
void EventLabel::mouseMoveEvent(QMouseEvent *event)
{
this->setText(QString("<center><h1>Move: (%1, %2)</h1></center>")
.arg(QString::number(event->x()), QString::number(event->y())));
}
void EventLabel::mousePressEvent(QMouseEvent *event)
{
this->setText(QString("<center><h1>Press: (%1, %2)</h1></center>")
.arg(QString::number(event->x()), QString::number(event->y())));
}
void EventLabel::mouseReleaseEvent(QMouseEvent *event)
{
QString msg;
msg.sprintf("<center><h1>Release: (%d, %d)</h1></center>",
event->x(), event->y());
this->setText(msg);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
EventLabel *label = new EventLabel;
label->setWindowTitle("MouseEvent Demo");
label->resize(300, 200);
label->show();
return app.exec();
}
這裏我們繼承了QLabel類,重寫了mousePressEvent、mouseMoveEvent和MouseReleaseEvent三個函數。我們並沒有添加什麼功能,只是在鼠標按下(press)、鼠標移動(move)和鼠標釋放(release)時把座標顯示在這個Label上面。注意我們在mouseReleaseEvent函數裏面有關QString的構造。我們沒有使用arg參數的方式,而是使用C語言風格的sprintf來構造QString對象,如果你對C語法很熟悉(估計很多C+++程序員都會比較熟悉的吧),那麼就可以在Qt中試試熟悉的C格式化寫法啦!