Q_OBJECT宏的作用

Q_OBJECT宏的作用

 

The Q_OBJECT macro at the beginning of the class definition is necessary for all classes that define signals or slots

只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。
比如编写事件接口等程序时,有时会出现如下问题:
class Widget : public QWidget
{
    Q_OBJECT        

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private slots:

    void mountMessage();
    void umountMessage();
    void saveMessage();
    void adjustMessage();
    void touchMessage();
    void about_usMessage();
    void stop_saveMessage();
    void exitMessage();

private:
    bool is_mount();
    bool have_video();
    bool have_udisk();
    bool mount_u();
    Ui_Widget ui;
};

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QMessageBox::StandardButton message;

    QApplication::setStyle(QStyleFactory::create("plastique"));
    QApplication::setPalette(QApplication::style()->standardPalette());
    ui.setupUi(this);
    connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(mountMessage()));    //只有上面定义了Q_OBJECT才有效
    connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(umountMessage()));
    connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(saveMessage()));
    connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(adjustMessage()));
    connect(ui.pushButton_7, SIGNAL(clicked()), this, SLOT(about_usMessage()));
    connect(ui.pushButton_4, SIGNAL(clicked()), this, SLOT(stop_saveMessage()));
    connect(ui.pushButton_6, SIGNAL(clicked()), this, SLOT(touchMessage()));
    connect(ui.pushButton_8, SIGNAL(clicked()), this, SLOT(exitMessage()));


    mount_u();     //¹ÒÔØUÅ̳ɹ¦£¡

    if( !have_video() ) {   //if have WebCam?
        message = QMessageBox::information(this, tr("ÉãÏñͷδÁ¬½Ó"),
                                         tr("ÉãÏñͷδÁ¬½Ó£¬ÇëÁ¬½ÓÉãÏñÍ·¡£") );
    }
    setWindowFlags(Qt::FramelessWindowHint);
    setWindowTitle(tr("»¶Ó­Ê¹ÓÃÃÔÄã¼à¿ØÆ÷£¡"));
}

你可能感兴趣的:(qt/qtopia)