zoukankan      html  css  js  c++  java
  • 学习Qt,Getting started

    在界面的设计中。如今用的比較多的是Qt和WPF(C#),曾经的MFC已出现衰老趋势。本人近期在学习Qt,认为非常实用,遂决定将学习历程记录下来。也许有感于后之来者。不亦乐哉。

    一、Hello Qt

    #include "try_qt.h"
    #include <QtGui/QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
    	QLabel *label = new QLabel("Hello Qt!");
    	label->show();
    	return app.exec();
    }
    	
    
    QApplication app(argc, argv);
    创建一个QApplication的对象app,管理程序的资源。

    QLabel *label = new QLabel("Hello Qt!");
    创建一个QLabel的widget,用于显示括号的内容。

    label->show();
    使label的内容显示。

    return app.exec();
    退出Qt,操作系统对资源进行又一次分配。

    二、QPushButton

    #include "try_qt.h"
    #include <QtGui/QApplication>
    #include <QPushButton>
    
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
    	QPushButton *button = new QPushButton("Quit");
    	QObject::connect(button, SIGNAL(clicked()),
    		&app, SLOT(quit()));
    	button->show();
    	return app.exec();
    }
    	
    

    Qt的widgets发出信号,表示用户的行为后者状态的改变。当用户点击button时。QPushButton会发出clicked()信号。一个信号能够和一个函数关联起来,当一个信号被发送时。其相应的slot自己主动运行。

    QObject::connect(button, SIGNAL(clicked()),
    		&app, SLOT(quit()));
    当用户点击button时,QPushButton会发出clicked()信号,导致其关联的quit()函数自己主动运行。



    三、widgets布局

    #include "try_qt.h"
    #include <QtGui/QApplication>
    #include <QHBoxLayout>
    #include <qslider>
    #include <qspinbox>
    
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
    
    	QWidget *window = new QWidget;
    	window->setWindowTitle("Enter your age");
    
    	QSpinBox *spinBox = new QSpinBox;
    	QSlider *slider = new QSlider(Qt::Horizontal);
    	spinBox->setRange(0,130);
    	slider->setRange(0,130);
    
    	QObject::connect(spinBox,SIGNAL(valueChanged(int)),
    		slider,SLOT(setValue(int)));
    	QObject::connect(slider,SIGNAL(valueChanged(int)),
    		spinBox,SLOT(setValue(int)));
    	spinBox->setValue(35);
    
    	QHBoxLayout *layout = new QHBoxLayout;
    	layout->addWidget(spinBox);
    	layout->addWidget(slider);
    	window->setLayout(layout);
    
    	window->show();
    	
    	return app.exec();
    }
    
    该程序由三个widgets组成,各自是QSpinBox。QSlider和QWidget。QWidget是程序的主窗体,子窗体是QSpinBox和QSlider。

    <span style="white-space:pre">	</span>QWidget *window = new QWidget;
    	window->setWindowTitle("Enter your age");
    建立QWidget作为程序的主窗体。调用setWindowTitle()设置主窗体的名称。

    	QSpinBox *spinBox = new QSpinBox;
    	QSlider *slider = new QSlider(Qt::Horizontal);
    	spinBox->setRange(0,130);
    	slider->setRange(0,130);
    创建QSpinBox和QSlider。并设置他们的有效范围
    <pre name="code" class="cpp">	QObject::connect(spinBox,SIGNAL(valueChanged(int)),
    		slider,SLOT(setValue(int)));
    	QObject::connect(slider,SIGNAL(valueChanged(int)),
    		spinBox,SLOT(setValue(int)));
    确保spin-box和slider是同步的。无论是信号valueChanged(int)发出还是setValue(int)对slot的值进行设置,他们的值都是一样的。

    
    
    	spinBox->setValue(35);
    设置spinBox的值为35。

    	QHBoxLayout *layout = new QHBoxLayout;
    	layout->addWidget(spinBox);
    	layout->addWidget(slider);
    	window->setLayout(layout);
    

    使用布局管理器layout,布局spinBox和slider。调用QWidget::setLayout将布局管理器安装在窗体上。





  • 相关阅读:
    ArrayList用法
    Delegate比较全面的例子(原创)
    一个登陆页面,包含了初始化用户,输入检测,错误处理等
    C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
    ASP.Net防止刷新自动触发事件的解决方案
    存储过程编写经验和优化措施 (转)
    [转]数据库开发21条军规
    [转]Ajax简单客户登陆验证
    用SqlBulkCopy进行大批量数据迁移
    什么时候使用哪个数据绑定控件(asp.net)
  • 原文地址:https://www.cnblogs.com/llguanli/p/6814371.html
Copyright © 2011-2022 走看看