Qt初学者指南

基本概念

  1. 信号和槽
   QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );

在两个Qt对象(直接或间接继承QObject对象的对象)中建立了一种单向的连接。每一个Qt对象都有signals(发送消息)和slots(接收消息)。所有窗口部件都是Qt对象。它们继承QWidget,而QWidget继承QObject。
这里quit的clicked()信号和a的quit()连接起来了,所以当这个按钮被按下的时候,这个程序就退出了。

学习资料

QT教程第三章

//#include "ex_ch1.h"
//#include <QtWidgets/QApplication>
#include <qpushbutton.h>
#include <qfont.h>
#include <qboxlayout.h>
#include<qapplication.h>


int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	//ex_ch1 w;
	//w.show();
	QWidget window;
	window.resize(200,120);
	QVBoxLayout layout;
	QPushButton quit("Quit",&window);
	quit.setFont(QFont("Times",18,QFont::Bold));
	QObject::connect(&quit,SIGNAL(clicked()),&a,SLOT(quit()));
	layout.addWidget(&quit);
	window.setLayout(&layout);
	window.show();
	return a.exec();
}

效果:

在这里插入图片描述

Qt 第四章使用窗口插件

#include<qapplication.h>
#include<qpushbutton.h>
#include<qfont.h>

class MyWidget: public QWidget
{
public:
	MyWidget(QWidget *parent=0, const char *name=0);
};


MyWidget::MyWidget(QWidget *parent, const char *name)
{
	setMinimumSize(200, 120);
	setMaximumSize(400, 1200);
	QPushButton *quit = new QPushButton("Quit", this);
	//QPushButton *quit = new QPushButton(QIcon("Quit"), this, "quit");
	quit->setGeometry(62, 40, 75, 30);
	quit->setFont(QFont("Times", 18, QFont::Bold));
	QPushButton *ui = new QPushButton("UI", this);
	ui->setGeometry(100, 100, 100, 100);
	ui->setFont(QFont("Times", 20, QFont::Bold));
	connect(quit, SIGNAL(clicked()), quit, SLOT(quit()));
}

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	//ex_ch4 w;
	//w.show();
	MyWidget w;
	w.setGeometry(100, 100, 200, 120);
	w.show();
	return a.exec();
}

展示

在这里插入图片描述

第五章:组装积木

#include <qapplication.h>
#include <qpushbutton.h>
#include <qslider.h>
#include <qlcdnumber.h>
#include <qfont.h>

#include <QVBoxLayout>

int main( int argc, char **argv )
{
    QApplication a( argc, argv );

    QWidget window;
    
    QPushButton *quit = new QPushButton( "Quit", &window );
    quit->setFont( QFont( "Times", 18, QFont::Bold ) );

    QObject::connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

    QLCDNumber *lcd  = new QLCDNumber( 2, &window );

    QSlider * slider = new QSlider( Qt::Horizontal, &window );
    slider->setRange( 0, 99 );
    slider->setValue( 0 );

    QObject::connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
    
    QVBoxLayout layout;
    layout.addWidget(quit);
    layout.addWidget(lcd);
    layout.addWidget(slider);
    
    window.setLayout(&layout);
    window.show();
    
    return a.exec();
}

第六章 组装丰富的积木

#include<qapplication.h>
#include<qpushbutton.h>
#include<qslider.h>
#include<qlcdnumber.h>
#include<qfont.h>
#include<qboxlayout.h>
#include<qgridlayout.h>

class LCDRange:public QWidget
{
public:
	LCDRange(QWidget *parent=0, Qt::WindowFlags f=0);
};

LCDRange::LCDRange(QWidget *parent, Qt::WindowFlags f):QWidget(parent, f)
{
	QLCDNumber *lcd = new QLCDNumber(2);
	QSlider *slider = new QSlider(Qt::Horizontal);
	slider->setRange(0, 99);
	slider->setValue(0);
	connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));

	QVBoxLayout* layout = new QVBoxLayout;
	layout->addWidget(lcd);
	layout->addWidget(slider);
	setLayout(layout);
}


class MyWidget:public QWidget
{
public:
	MyWidget(QWidget *parent=0, Qt::WindowFlags f=0);
};

MyWidget::MyWidget(QWidget *parent, Qt::WindowFlags f):QWidget(parent, f)
{
	QVBoxLayout *layout = new QVBoxLayout;
	QPushButton *quit = new QPushButton("Quit");
	quit->setFont(QFont("Times", 18, QFont::Bold));
	connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
	QGridLayout *grid = new QGridLayout;
	for (int r = 0; r < 4; r++)
	{
		for (int c = 0; c < 5; c++)
		{
			grid->addWidget(new LCDRange(this), r, c);
		}
	}
	layout->addWidget(quit);
	layout->addLayout(grid);
	setLayout(layout);
}


int main(int argc, char **argv)
{
	QApplication a(argc, argv);
	MyWidget w;
	w.resize(600, 100);
	w.show();
	return a.exec();
}

展示

在这里插入图片描述

第七章:一个事物领导另一个

main.cpp

//#include "ex_ch6.h"
//#include <QtWidgets/QApplication>

#include<qapplication.h>
#include<qpushbutton.h>
#include<qslider.h>
#include<qlcdnumber.h>
#include<qfont.h>
#include<qboxlayout.h>
#include<qgridlayout.h>
#include<lcdrange.h>


class MyWidget:public QWidget
{
public:
	MyWidget(QWidget *parent=0, Qt::WindowFlags f=0);
};

MyWidget::MyWidget(QWidget *parent, Qt::WindowFlags f):QWidget(parent, f)
{
	QVBoxLayout *layout = new QVBoxLayout;
	QPushButton *quit = new QPushButton("Quit");
	quit->setFont(QFont("Times", 18, QFont::Bold));
	connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
	QGridLayout *grid = new QGridLayout;
	LCDRange *previous = 0;
	for (int r = 0; r < 4; r++)
	{
		for (int c = 0; c < 5; c++)
		{
			LCDRange *lr = new LCDRange(this);
			grid->addWidget(lr, r, c);
			if (previous)
			{
				connect(lr, SIGNAL(valueChanged(int)), previous, SLOT(setValue(int)));
			}
			previous = lr;
		}
	}
	layout->addWidget(quit);
	layout->addLayout(grid);
	setLayout(layout);
}


int main(int argc, char **argv)
{
	QApplication a(argc, argv);
	MyWidget w;
	w.resize(600, 100);
	w.show();
	return a.exec();
}

lcdrange.h

#ifndef LCDRANGE_H
#define LCDRANGE_H

#include<qboxlayout.h>
#include<qwidget.h>
#include<qslider.h>
#include<qlcdnumber.h>

class QSlider;

class LCDRange:public QWidget
{
	Q_OBJECT
public:
	LCDRange(QWidget *parent=0, Qt::WindowFlags=0);
	int value() const;

public slots:
	void setValue(int);

signals:
	void valueChanged(int);

private:
	QSlider *slider;

};

#endif

lcdrange.cpp

#include "lcdrange.h"


LCDRange::LCDRange(QWidget *parent, Qt::WindowFlags f):QWidget(parent, f)
{
	QLCDNumber *lcd = new QLCDNumber(2);
	QSlider *slider = new QSlider(Qt::Horizontal);
	slider->setRange(0, 99);
	slider->setValue(0);
	connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
	QVBoxLayout *layout = new QVBoxLayout;
	layout->addWidget(lcd);
	layout->addWidget(slider);
	setLayout(layout);
}

int LCDRange::value() const
{
	return slider->value();
}

void LCDRange::setValue(int value)
{
	slider->setValue(value);
}

效果

在这里插入图片描述

第八章:准备战斗

几个需要注意的问题

  1. 在qt5.x中#include <qvbox.h>变成了#include <qboxlayout.h>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值