學習QT的一個原因是貌似QT做出來的界面比較絢麗
我倒想看看能做出來啥樣子的
從QT窗體布局說起
凡是窗體布局無非就是如何擺放的問題
1.想當然如果擺放有2個方式一個是所見即所得,一個是使用布局管理器
先說后者吧
2.QT有好幾種布局管理器無非就是啥子流式布局,格子布局等等
從這個層級上說軟件界面都是布局嵌套的
3.布局和控件的關系
一般是一個布局對應于一個控件容器(或者頂層控件)
使用當前布局管理器加掛子控件(容器)即可
然后給當前控件掛上布局管理器即可
下面是一個簡單的QT Layout的例子(從QT例子改的)
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog();
private:
void createHorizontalGroupBox();
enum {button_number = 4};
QGroupBox *groupbox;
QPushButton *buttons[button_number];
QDialogButtonBox *buttonBox;
};
實現如下:
#include <QtGui>
#include "dialog.h"
//! [0]
Dialog::Dialog()
{
createHorizontalGroupBox();
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(groupbox);
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
setWindowTitle(tr("LayoutTest"));
}
void Dialog::createHorizontalGroupBox()
{
groupbox = new QGroupBox(tr("Layout Test"));
QHBoxLayout *layout = new QHBoxLayout;
buttons[0] = new QPushButton(tr("Button1"));
buttons[1] = new QPushButton(tr("Button2"));
buttons[2] = new QPushButton(tr("Button3"));
buttons[3] = new QPushButton(tr("Button4"));
for(int i = 0;i<button_number;i++)
layout->addWidget(buttons[i]);
groupbox->setLayout(layout);
}
幾個知識點:
1.groupbox
= new QGroupBox(tr
("Layout Test"));
Layout Test 是個文本這個無須解釋
那tr呢?查查資料知道是為了支持多語言
先知道即可以后使用的話在具體查查吧
2.QDialogButtonBox是個什么東西
看看最終的程序界面吧
原來是對話框的確認和取消按鈕
再看信號槽函數無非就是綁定按鈕到操作函數
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
那accepted和accept函數有啥區別?
看看文檔
accept函數的解釋是:Hides the modal dialog and sets the result code to Accepted
accpeted函數的解釋是:This signal is emitted when the dialog has been accepted either
在說說QT皮膚
學習QT的主要目的就是想做做臉蛋好看好的軟件界面
那就試試看吧
查到的QT有一個名叫QSS(CSS?)的文件可以原來換膚
那就改改看吧
#include <QApplication>
#include <QFile>
#include <QStyleFactory>
#include <QTextStream>
#include "dialog.h"
void setSkin(QApplication* const app, QString const &skinFile);
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
setSkin(&app ,"skin.qss");
Dialog dialog;
dialog.show();
return app.exec();
}
void setSkin(QApplication* const app, QString const &skinFile)
{
QFile qss(skinFile);
qss.open(QFile::ReadOnly);
app->setStyleSheet(qss.readAll());
qss.close();
}
相應的QSS文件如下:
QPushButton
{
color:red;
background:url(setting.png)
}
這里把PushButton的文本顏色設置為紅色
同時把它的背景設置為圖片stting.png
完了
PS:如果學習新知識?
囫圇吞棗比較適合快速學習