`
javasogo
  • 浏览: 1821997 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

QT(2)Widget的小例子

阅读更多

  在上一次我们处理好了QT学习的环境,现在可以安安静静地去学习QT,可以参考http://doc.qt.nokia.com/latest/tutorials.html 。下面是step by step,创建我们的第一个QT小程序。

一、搭建一个QT程序

#include <QtGui>

/* In this example, we will test QApplication usage. */
int main(int argc, char *argv[])
{
/* 对于一个使用QT的GUI应用,无论是0个或者N个窗口,必须有一个QApplication的对象,而一个非GUI的QT应用,则使用QCoreApplication。他们之间的继承关系:QApplication -> QCoreApplication -> QObject */
QApplication app (argc, argv);

// ... 这里是程序的主体,我们在后面慢慢填充之...

return app.exec();
}

  创建一个QAppcliation对象,可以将命令行的参数传递过去。QApplication::exec()将唤起QT事件loop,这也是我们在main最后调用的函数。

二、创建一个窗口Windows

#include <QtGui>

/* In this example, we will test QApplication usage. */

int main(int argc, char *argv[])
{

QApplication app(argc, argv);
//如果一个widget创建是没有parent,这样将作为一个window或者一个top-level widget
QWidget window;

// Test 1: 显示Window,对于设置resize的情况,在MeeGo Handset IA32模拟器中是不生效的,Handset中认为所有的windows都是满屏,后面我将视这个window为panel,在上面加上其他组件。
window.resize (240,120);
window .setWindowTitle ("Test 1: Show Windows");
window.show();

return app.exec();
}

三、在Windows上加载Widget

#include <QtGui>

/* In this example, we will test QApplication usage. */

int main(int argc, char *argv[])
{

QApplication app(argc, argv);
QWidget window;

window.setWindowTitle("Test 2: Child Widgets");
window.show();


//我们采用QPushButton为例子:和不带parent创建windows不一样,button是一个windows的child,当windows destroy时,也将会被删除。注意隐藏和关闭windows是不会导致windows destroy的,但是程序结束可以。
QPushButton * button = new QPushButton ("Hello,world!",&window );
button -> move (100,100); //指定button的精确位置
button -> show ();

return app.exec();
}

四、采用layout加载Widget

  一般而言,在程序中,很少直接采用指定精确位置,一般layout的方式。

#include <QtGui>

/* In this example, we will test QApplication usage. */
int main(int argc, char *argv[])

{

QApplication app(argc, argv);
QWidget window;

window.setWindowTitle("Test 3: Using Layouts");
window.show();

//通常,子widget通过一个layout的对象进行排版,而不是直接精确地指定位置或者大小。这里我们采用QLable和输入框为例子,在创建的过程中,没有作为windows的子widget。
QLabel * label = new QLabel("Name:");
QLineEdit * lineEdit = new QLineEdit ();
QHBoxLayout * layout = new QHBoxLayout();

//Layout对象将管理在其上面的widget的位置和大小,通过addWidget()将widget加上。QHBBoxLayout的H表示水平方向。.
layout->addWidget (label);
layout->addWidget (lineEdit);

//而layout本身加入window通过调用setLayout()。windows加入layout后,则layout上的widget成为window的子widget.
window.setLayout(layout);

return app.exec();
}

五、多层次layout(同时演示QDebug和QList的使用方法)

#include <QtGui>
#include <QDebug> //QDebug是很重要的,可以打印QString(不能使用printf)

/* In this example, we will test QApplication usage. */
int main(int argc, char *argv[])
{

QApplication app(argc, argv);
QWidget window;

window.setWindowTitle("Test 4: Nested Layouts");
window.show();


//layout有QHBoxLayout和QVBoxLayout,分别是横向或者纵向。此外Qt还提供比较复杂的QGridLayout和QFormLayout。
QLabel * label = new QLabel("Name:");
QLineEdit * lineEdit = new QLineEdit ();

QTableView * resultView = new QTableView();

//上面的layout放置一个输入框,如同上一个例子。
QHBoxLayout * layout = new QHBoxLayout();
layout->addWidget(label);
layout->addWidget(lineEdit);

//创建一个纵向的layout, 上面放置一个layout(一 个输入框),通过addLayout (),下面放一个widget(表格)
QVBoxLayout * mainLayout = new QVBoxLayout();
mainLayout->addLayout (layout);
mainLayout->addWidget (resultView);
window.setLayout(mainLayout);


//下面这一部分,在表格(
QStandardItemModel) 中加入 内容,并且学习一下QT的一些语句用法,学习QList的使用。QList 在内存方对象,这这个例子中,存放QStringList数组。在QT中在一个数组中加入一个entry采用“<<"的方式,如果继续加入,则继续“<<"。在表格中,每行有两个元素,放置在QStringList数组中,采用QStringList << "1" << "2" 。
QStandardItemModel * model = new QStandardItemModel();
model->setHorizontalHeaderLabels (QStringList() << "Name" << "Office"); //设置title
QList rows = QList()
<< (QStringList() << "Verne Nilsen" << "123")
<< (QStringList() << "Carlos Tang" << "77")
<< (QStringList() << "David Bradley" << "42")
<< (QStringList() << "Knut Walters" << "25")
<< (QStringList() << "Andrea Jones" << "34") ;

//从Qlist中取出数据,加入table中。每行使用append(),通过foreach从QList中依此读入 元素。由于每个元素是一个QStringList,因此两层嵌套的foreach来获取。
foreach (QStringList row, rows ) { //将rows的每个元素读入row
QList items;
printf("---------\n");
//用于对比QDebug的使用方式。
foreach(QString text, row){
qDebug() << "debug : " << text ;
//显示qDebug的用法
items.append (new QStandardItem(text)); //在List中加入entry
}
model->appendRow (items);
}

resultView->setModel(model);
resultView->verticalHeader()->hide(); //如果不设置行列的名称,缺省为1,2,3,...,这个可以隐藏这些行列的名称
resultView->horizontalHeader()->setStretchLastSection(true); //将每行最后一个entry,填满空间

return app.exec();
}

相关链接:我的MeeGo/Moblin相关文章

分享到:
评论

相关推荐

    Qt Openglwidget 显示图片纹理贴图

    在本文中,我们将深入探讨如何在Qt环境中使用QOpenGLWidget显示图片并实现纹理贴图,主要涉及Qt、OpenGL Widget、QImage以及纹理贴图等关键概念。首先,我们需要理解Qt库是一个跨平台的应用程序开发框架,它提供了...

    qt widget控件拖放示例

    在Qt框架中,Widget控件是构建用户界面的基础元素,它们可以是按钮、文本框、标签等。拖放(Drag and Drop)功能是GUI应用程序中常见的交互方式,允许用户通过鼠标将一个对象从一处移动到另一处。在Qt中,我们可以...

    qt实现opengl简单例子

    在本文中,我们将深入探讨如何使用Qt框架来实现OpenGL的基本功能,特别关注如何在Qt环境中创建一个OpenGLWidget,展示一个简单的OpenGL渲染实例。Qt是一个强大的跨平台应用开发框架,而OpenGL则是一种广泛应用的图形...

    Widget例子

    Widget例子。 本地IP地址的显示,以及自定义按钮。

    qtListwidget控件使用实例

    2. **创建ListWidget** - 在Qt Designer(UI设计工具)中,你可以直接拖放ListWidget到你的界面布局中。 - 在代码中,可以通过`QListWidget* listWidget = new QListWidget(parent);`创建一个新的ListWidget实例。...

    Qt的Widgets布局实战例子 经典QT布局例子

    分别是 QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)、QFormLayout(表单布局)和 QStackedLayout(分组布局)实战例子 除Qt Designer支持可视化设计和布局界面之外,Qt 提供了代码...

    Qt放大镜例子

    在本文中,我们将深入探讨如何使用Qt库来创建一个简单的放大镜功能,正如"Qt放大镜例子"这个标题所描述的。Qt是一个跨平台的应用程序开发框架,它提供了丰富的图形用户界面(GUI)工具和功能,使开发者能够构建高效...

    十二、Qt自定义Widget组件、静态库与动态库.zip

    2. **体积较小**:程序只包含必要的代码,不包括库代码,使得程序体积减小。 3. **共享资源**:多个程序可以共享同一动态库,减少系统资源占用。 4. **版本管理**:易于更新和维护,只需要替换库文件,不影响已编译...

    Qt+QListWidget实现列表数据添加删除(源码+详细注释)

    首先,我们看到文件列表中有`widget.ui`,这是一个使用Qt Designer设计的用户界面文件。在Qt Designer中,我们可以拖放QListWidget到布局中,并设置其属性,如大小、样式等。设计完成后,我们需要将UI文件转换为C++...

    QT 窗体、控件、字体自适应分辨率

    在这个例子中,`referenceScreenWidth`是你定义的参考分辨率宽度,`scaleFactor`计算了当前分辨率与参考分辨率的比例。然后,对所有子控件应用这个比例来改变它们的大小,同时调整字体大小。 在压缩包中的`Adapter_...

    我们选择动画Qt属性的一个主要理由是Qt属性为我们提供了自己动画已存在的类的自由度。尤其是QWidget类(我们也可以把它嵌入到

    让我们看一个小例子:我们选择动画Qt属性的一个主要理由是Qt属性为我们提供了自己动画已存在的类的自由度。尤其是QWidget类(我们也可以把它嵌入到一个QGraphicsView中)具有很多属性表示其bounds,colors等等。让...

    qt 表格多行表头,复杂表头

    这个例子中,横向表头的第0列被设置为了一个两行的表头,而垂直表头的第0行也有相同的效果。通过调整QHeaderView的resize模式和文本的换行,我们成功地创建了一个复杂的多行表头。 在实际项目中,你可能还需要处理...

    QT的stack widget 控件应用示例,测试已经通过

    2. 为每个要展示的界面创建单独的窗口小部件,并将它们作为子窗口小部件添加到Stack Widget中。 3. 使用`addWidget()`函数将子窗口小部件添加到Stack Widget的堆栈中,每个小部件都会有一个相应的索引。 4. 配置信号...

    Qt对话框美化(含TableWidget)

    下面是一个按钮样式的例子: ```cpp QPushButton { background-color: #3498DB; /* 按钮默认颜色 */ color: #FFFFFF; /* 文字颜色 */ border: 1px solid #2980B9; /* 边框颜色和宽度 */ border-radius: 4px; /*...

    Qt之控件双击重命名操作

    首先,我们需要理解Qt中的控件(Widget)系统。Qt提供了丰富的控件类,如QLabel、QPushButton、QLineEdit等,这些控件是构建用户界面的基本元素。当用户双击一个控件时,我们通常希望这个行为触发一个编辑模式,允许...

    Qt控件拖拽最简实践

    Qt拖拽的基本实践,从QListWidget上拖动一个Item,拖的过程中绘制矩形框,拖到目标Widget中,创建Button,该Button在Widget内部可随意拖动; 这个例子主要是理解Qt的拖拽事件怎么使用,事件怎么被接受,数据怎么传递

    Qt实现半透明不规则窗体的示例

    在这个例子中,我们创建了一个无边框的窗体(`Qt::FramelessWindowHint`),并且设置了窗体背景为半透明(`Qt::WA_TranslucentBackground`)。 然而,半透明仅仅是第一步,实现不规则形状则需要自定义窗体的形状。...

    QT编写的案例

    QT编程是一种广泛应用于桌面应用开发、嵌入式系统和跨平台UI设计的开源框架。它由Qt Company维护,基于C++语言,提供了丰富的API来简化图形用户界面(GUI)的创建和管理。在这个"QT编写的案例"中,我们可以看到一...

    Qt 实现抽屉式菜单

    在本文中,我们将深入探讨如何使用Qt框架实现抽屉式菜单。Qt是一个强大的跨平台应用程序开发框架,广泛用于创建...对于那些想要学习Qt界面设计或者需要在旧项目中添加抽屉菜单功能的人来说,这个例子是一个宝贵的资源。

    Qt TCP/UDP通讯封装示例

    `widget.ui`文件是Qt Designer生成的用户界面布局描述,用于构建GUI应用的界面元素。 `MyNetwork.pro`和`MyNetwork.pro.user`是Qt项目的构建文件,`pro`文件定义了项目依赖、编译选项和目标设置,`.user`文件则存储...

Global site tag (gtag.js) - Google Analytics