qt學習筆記(二)之佈局管理器&信號與槽(簡介)

我們在上節的程序中加點小應用。主要是用到了佈局管理器和信號與槽。在這裏我也只是簡單介紹一下~~隨着後續的深入研究,接下來會具體介紹~

一、佈局管理器

#include <QtGui>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

    QWidget *pwidget = new QWidget; //create a new widget

    QLabel label(pwidget);  //label's parent is pwidget
    // QLabel *label = new QLabel(pwidget);
    label.setText(QObject::tr("Hello world"));  //set the label text
    QPushButton closeBtn(pwidget);
    closeBtn.setText(QObject::tr("關閉"));

    QVBoxLayout layout;         //垂直佈局
    layout.addWidget(&label);   //添加部件
    layout.addWidget(&closeBtn);
    pwidget->setLayout(&layout);//佈局應用到pwidget

    pwidget->show();

    return a.exec();
}
在這裏我們定義一個垂直佈局管理器layout ,每個佈局管理器設計後,都必須調用QWidget::setLayout(QLayout*layout)。否則界面會顯示不是很正常。

因爲你定義的Qt部件其的起始座標、寬度、高度都是一致的。

我們可以從簡單的測試代碼得到驗證。

    qDebug() << closeBtn.pos() << label.pos();
    qDebug() << closeBtn.width() << closeBtn.height();
    qDebug() << label.width() << label.height();

顯然,在文件頭我們要添加#include <QDebug>,執行效果如下圖所示。

qDebug()經常用於調試信息輸出。

/*

感謝dbzhang800提出的觀點

確實是頂級layout才需要設置到應用窗口部件

parent_layout->addlayout(child_layout);

對於子layout我們可以調用addlayout添加到父layout中

*/



程序的正常執行效果圖如下

我們再上面的基礎上加上信號與槽,在16行後加上

QObject::connect(&closeBtn, SIGNAL(clicked()), pwidget, SLOT(close()));

效果就是當我們點擊窗口的關閉按鈕,整個窗口將被關閉。

QObject::connect(const QObject *asender, const char *asignal, const char *amember, Qt::ConnectionType atype)
由於clicked()和close()已經有Qt定義了,所以我們無需實現。SIGNAL()和SLOT()是Qt定義的2個宏,它們返回其參數的字符串(const char *)

在這裏附上程序源代碼下載鏈接:http://download.csdn.net/detail/fzu_dianzi/3703745

以上純屬個人學習筆記,如果哪裏錯了,希望提出。願和大家一起共同學習,一起進步。我的郵箱地址是:[email protected]



發佈了40 篇原創文章 · 獲贊 9 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章