vs2005集成qt后产生的qt项目文件结构分析

原创 2007年09月29日 10:52:00
首先,假设我们使用集成了qt4的vc2005开发环境产生了一个ss的qt应用程序。然后双击左边的解决方案资源管理器的ss.ui,看到一个可视化的程序主窗口,可以通过控件窗口向该程序主窗口加入控件,编译。然后我们开始分析项目文件结构。
1、ss.h头文件中有一个私有成员变量 Ui::ssClass ui;这个成员变量ui就是在主窗口上进行的可视化控件操作产生的新主窗口所关联的变量(该主窗口对应于QWidget对象)。然后我们追踪ssClass类定义,在ui_ss.h中可以找到
namespace Ui {
    class ssClass: public Ui_ssClass {};

同样,在该文件中也有完整的Ui_ssClass的类定义,其成员变量包含该对话框包含的所有控件类型。
2、在ss.cpp实现文件中,调用ui.setupUi(this);来生成这个对话框对象,同样在ui_ss.h中我们可以找到该函数的完整定义,分析这段代码,很容易我们可以看出是将所有添加的控件和布局以子窗口的形式放置到一个widget中,然后再以该widget为子对象,而QDialog为父对象生成完整的窗口。
3、采取这种结构最大的好处在于可视化生成窗口的外观,然后将该外观整体作为一个类对象嵌入到对话框主窗口中,因为这样还可以对对话框类进行其他的设计(譬如添加一个成员变量来获得其控件个数等等)。这样就实现的可视化的窗口设计和对(对话框)窗口继承类的重新设计(调价成员,函数,槽等等)的分离。
4、注意Generated Files文件夹下的文件是由可视化窗口直接生成的,所以不能对其进行直接的代码修改。

附上相关代码:
ss.h
#ifndef SS_H
#define SS_H

#include <QtGui/QDialog>
#include "ui_ss.h"

class ss : public QDialog
{
    Q_OBJECT

public:
    ss(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~ss();
signals:
    void findNext(const QString &text, bool matchall);
    void findPrev(const QString &text, bool matchall);

private slots:
     void findClicked();
     void enableFindButton(const QString &text);
     void showNext(const QString &text, bool matchall);
     void showPrev(const QString &text, bool matchall);

private:
    Ui::ssClass ui;

private slots:
//    void on_pushButton_2_clicked();
//    void on_checkBox_2_stateChanged(int);
//    void on_lineEdit_textChanged(const QString &);
};

#endif // SS_H

ss.cpp
#include "ss.h"
#include "ui_ss.h"
#include <QMessageBox>

ss::ss(QWidget *parent, Qt::WFlags flags)
    : QDialog(parent, flags)
{
    ui.setupUi(this);
    QObject::connect(ui.lineEdit, SIGNAL(textChanged(const QString &)),
        this, SLOT(enableFindButton(const QString &)));
    QObject::connect(ui.findButton, SIGNAL(clicked()),
        this, SLOT(findClicked()));
    QObject::connect(this, SIGNAL(findPrev(const QString &, bool)),
        this, SLOT(showPrev(const QString &, bool)));
    QObject::connect(this, SIGNAL(findNext(const QString &, bool)),
        this, SLOT(showNext(const QString &, bool)));
}

void ss::enableFindButton(const QString &text)
{
    ui.findButton->setEnabled(!text.isEmpty());
}
void ss::findClicked()
{
    QString text = ui.lineEdit->text();
    bool matchall = ui.caseCheckBox->isChecked();
    if (ui.backwardCheckBox->isChecked())
    {
        emit findPrev(text, matchall);
    }
    else
    {
        emit findNext(text, matchall);
    }
}

void ss::showNext(const QString &text, bool matchall)
{
    QMessageBox(QMessageBox::NoIcon, tr("Next"), tr("Find Next"));
}
void ss::showPrev(const QString &text, bool matchall)
{
    QMessageBox(QMessageBox::NoIcon, tr("Prev"), tr("Find Prev"));
}

ss::~ss()
{

}


ui_ss.h
/********************************************************************************
** Form generated from reading ui file 'ss.ui'
**
** Created: Tue Sep 25 12:14:19 2007
**      by: Qt User Interface Compiler version 4.2.2
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_SS_H
#define UI_SS_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QCheckBox>
#include <QtGui/QDialog>
#include <QtGui/QHBoxLayout>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QPushButton>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

class Ui_ssClass
{
public:
    QWidget *widget;
    QHBoxLayout *hboxLayout;
    QVBoxLayout *vboxLayout;
    QHBoxLayout *hboxLayout1;
    QLabel *label;
    QLineEdit *lineEdit;
    QCheckBox *caseCheckBox;
    QCheckBox *backwardCheckBox;
    QVBoxLayout *vboxLayout1;
    QPushButton *findButton;
    QPushButton *closeButton;

    void setupUi(QDialog *ssClass)
    {
    ssClass->setObjectName(QString::fromUtf8("ssClass"));
    widget = new QWidget(ssClass);
    widget->setObjectName(QString::fromUtf8("widget"));
    widget->setGeometry(QRect(50, 90, 231, 75));
    hboxLayout = new QHBoxLayout(widget);
    hboxLayout->setSpacing(6);
    hboxLayout->setMargin(0);
    hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
    vboxLayout = new QVBoxLayout();
    vboxLayout->setSpacing(6);
    vboxLayout->setMargin(0);
    vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
    hboxLayout1 = new QHBoxLayout();
    hboxLayout1->setSpacing(6);
    hboxLayout1->setMargin(0);
    hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
    label = new QLabel(widget);
    label->setObjectName(QString::fromUtf8("label"));

    hboxLayout1->addWidget(label);

    lineEdit = new QLineEdit(widget);
    lineEdit->setObjectName(QString::fromUtf8("lineEdit"));

    hboxLayout1->addWidget(lineEdit);


    vboxLayout->addLayout(hboxLayout1);

    caseCheckBox = new QCheckBox(widget);
    caseCheckBox->setObjectName(QString::fromUtf8("caseCheckBox"));

    vboxLayout->addWidget(caseCheckBox);

    backwardCheckBox = new QCheckBox(widget);
    backwardCheckBox->setObjectName(QString::fromUtf8("backwardCheckBox"));

    vboxLayout->addWidget(backwardCheckBox);


    hboxLayout->addLayout(vboxLayout);

    vboxLayout1 = new QVBoxLayout();
    vboxLayout1->setSpacing(6);
    vboxLayout1->setMargin(0);
    vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
    findButton = new QPushButton(widget);
    findButton->setObjectName(QString::fromUtf8("findButton"));
    findButton->setEnabled(false);

    vboxLayout1->addWidget(findButton);

    closeButton = new QPushButton(widget);
    closeButton->setObjectName(QString::fromUtf8("closeButton"));

    vboxLayout1->addWidget(closeButton);


    hboxLayout->addLayout(vboxLayout1);


    retranslateUi(ssClass);

    QSize size(400, 300);
    size = size.expandedTo(ssClass->minimumSizeHint());
    ssClass->resize(size);

    QObject::connect(closeButton, SIGNAL(clicked()), ssClass, SLOT(close()));

    QMetaObject::connectSlotsByName(ssClass);
    } // setupUi

    void retranslateUi(QDialog *ssClass)
    {
    ssClass->setWindowTitle(QApplication::translate("ssClass", "ss", 0, QApplication::UnicodeUTF8));
    label->setText(QApplication::translate("ssClass", "Find", 0, QApplication::UnicodeUTF8));
    caseCheckBox->setText(QApplication::translate("ssClass", "Match &case", 0, QApplication::UnicodeUTF8));
    backwardCheckBox->setText(QApplication::translate("ssClass", "&Backward", 0, QApplication::UnicodeUTF8));
    findButton->setText(QApplication::translate("ssClass", "Find", 0, QApplication::UnicodeUTF8));
    closeButton->setText(QApplication::translate("ssClass", "Close", 0, QApplication::UnicodeUTF8));
    Q_UNUSED(ssClass);
    } // retranslateUi

};

namespace Ui {
    class ssClass: public Ui_ssClass {};
} // namespace Ui

#endif // UI_SS_H

相关文章推荐

出现 “未能创建此平台,因为已存在同名的解决方案平台”提示

VS2010只能按项目配置,而解决方案只需要创建一个,其它各个项目的配置里,选择框只需要勾一次,否则会重复,提示已经存在同名方案...

qt4使用QSettings来保存设置、读取设置

http://www.qtcn.org/bbs/read.php?tid=1101 qt4.0一个非常有用的类QSettingsQSettings是qt4.0提供的一个读取配置文件的类,在window...
  • lanmanck
  • lanmanck
  • 2009年09月22日 15:03
  • 22590

windows下建立QT-VS2005集成开发环境

1.  简述    在 Windows2000/xp 下,安装 VS2005, QT 4.4.3 ;并在 VS2005上建立 QT 的集成开发环境, 利用 VS2005 开发环境开发,调试 QT 程...

windows下建立QT-VS2005集成开发环境

1.  简述    在 Windows2000/xp 下,安装 VS2005, QT 4.5.2 ;并在 VS2005上建立 QT 的集成开发环境, 利用 VS2005 开发环境开发,调试 QT 程...

QT4.4.3与VS2005集成开发环境

参考博客:http://blog.csdn.net/yyingwei/article/details/3703450   今天在VS2005中安装了QT4.4.3,由于目前的QT版本已经很高了,很难...

Windows下搭建QT4.7-VS2005集成开发环境

1.  简述   在 Windows2000/xp/vista 下,安装 VS2005, QT 4.7.2 ;并在 VS2005上建立 QT 的集成开发环境, 利用 VS2005 开发环境开发,调试 ...

Qt4 SDK(mingw编译版)与VS2008/VS2005的集成开发环境的安装配置

在Windows下用QT做开发,编译器可以用mingw的gcc/g++,也可以用VS。使用mingw开发QT程序基本不用配置。由于我这的工作IDE是VS,所以需要搭建VS+Qt的工作环境。 ...

qt + vs2005 + wince环境搭建

1. 推荐安装环境 Windows XP SP3 + VS2005(SP1) 2. 载Qt for WinCE(eg. qt-everywhere-opensource-src-4.8.3.zi...

VS2005中使用Qt4.8.5遇到的问题

这两天项目组搭建了一个VS2005+Qt4.8.5的开发环境,在同事的机器上都已经搭建好了,并且编译,运行一切顺利。 如果是使用VS2008或者VS2010的话,Qt官方网站已经有了对应的编译好的Qt...
  • e5Max
  • e5Max
  • 2013年10月30日 17:45
  • 2787

win32 搭建QT和VS2005开发平台

http://blog.csdn.net/friendbaby/article/details/6822664     在Visual Studio 2005中安装Qt 4.3.2 1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vs2005集成qt后产生的qt项目文件结构分析
举报原因:
原因补充:

(最多只允许输入30个字)