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