学习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:如果学习新知识?
囫囵吞枣比较适合快速学习