Qt学习之路2--QT窗体布局和皮肤加载

学习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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值