Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
学习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:如果学习新知识?
囫囵吞枣比较适合快速学习

posted on 2011-03-13 12:08 ccsdu2009 阅读(4936) 评论(2)  编辑 收藏 引用 所属分类: 杂项QT编程
Comments
  • # re: QT学习笔记-2.QT窗体布局和皮肤加载
    孙雾
    Posted @ 2011-03-15 09:35
    大家现在在实际开发(c++)中用的哪种IDE比较多呢,  回复  更多评论   
  • # re: QT学习笔记-2.QT窗体布局和皮肤加载
    ccsdu2009
    Posted @ 2011-03-15 10:04
    @孙雾
    之前一直没做过界面编程的
    现在打算学习QT来开发绚丽界面  回复  更多评论   

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理