乌秋博客
梦想在左,生活在右。   

2.3 快速设计对话框(Rapid Dialog Design)
通常程序员们都是用c++源代码编写Qt应用程序,Qt也是很容易用来编写的。然而,许多程序员更喜欢用可视化的方法设计对话框,这样能更快速更容易对对话框进行修改。
Qt Designer满足了程序员的这一要求,提供了可视化设计对话框的方法。它可以给一个应用程序提供全部或者部分对话框。用Qt Designer设计的对话框和用c++代码写成的对话框是一样的,可以用做一个常用的工具,并不对编辑器产生影响。
在这一节中,我们使用Qt Designer创建Go-to-Cell对话框,无论用编写代码的方式还是用Qt Designer,创建对话框都有如下基本的步骤:
1、创建和初始化子控件。
2、把子控件放到布局管理器中。
3、设置tab顺序。
4、创建信号和槽。
5、实现对话框的自己的槽函数。
在windows平台Qt的安装目录的bin目录下,点击desinger.exe,或者在unix平台,在命令行上输入designer。当Qt Designer启动后,它会列出一个控件模板的列表,选择一个模板,进入设计。
阅读全文..
posted at 09/06/21 17:57 | 技术文摘 - Qt | 浏览(429) | 引用(1) | 评论(1)

2.2 深入信号和槽(Signals and Slots in Depth)
信号和槽是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。在前几个例程中,我们已经连接了信号和槽,声明了控件自己的信号和槽,并实现了槽函数,发送了信号。现在来更深入了解这个机制。

槽和普通的c++成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的(protective),也可是私有的(private),它们可以象任何c++成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和一个信号相连接,只要信号发出了,这个槽函数就会自动被调用。

connect函数语法如下:
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender和receiver是QObject对象指针,signal和slot是不带参数的函数原型。SIGNALE()和SLOT()宏的作用是把他们转换成字符串。

在目前有的例子中,我们已经连接了不同的信号和槽。实际使用中还要考虑如下一些规则:
1、一个信号可以连接到多个槽:
connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int)));
当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。

阅读全文..
posted at 09/06/02 11:27 | 技术文摘 - Qt | 浏览(350) | 引用(1) | 评论(1)

2.1 派生对话框类(Subclassing QDialog)
第一个例子是一个用C++实现的查找对话框。我们把这个对话框实现为一个类,这样它就是一个独立的控件,并有自己的信号(signal)和slot函数

类的源代码分别放在finddialog.h和finddialog.cpp中。首先看finddialog.h的代码
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QDialog>
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;
class FindDialog : public QDialog
{
	Q_OBJECT
	public:
		FindDialog(QWidget *parent = 0);
	signals:
		void findNext(const QString &str, Qt::CaseSensitivity cs);
		void findPrevious(const QString &str, Qt::CaseSensitivity cs);
	private slots:
		void findClicked();
		void enableFindButton(const QString &text);
	private:
		QLabel *label;
		QLineEdit *lineEdit;
		QCheckBox *caseCheckBox;
		QCheckBox *backwardCheckBox;
		QPushButton *findButton;
		QPushButton *closeButton;
};
#endif
阅读全文..
posted at 09/05/26 22:34 | 技术文摘 - Qt | 浏览(209) | 引用(1) | 评论

1.3 控件的几何排列-Laying Out Widgets
在这个小节中,我们说明在一个窗口中如何排列多个控件。学习利用signal和slot的方法使控件同步。程序要求用户通过spin box或者slider输入年龄。
程序中使用了三个控件:QSpinBox,QSlider和QWidget。QWidget是这个程序的主窗口。QSpinBox和QSlider被放在QWidget中;他们是QWidget的children。反过来,我们也可以称QWidget是QSpinBox和QSlider的parent。QWidget没有parent,因为它是程序的顶层窗口。在QWidget及其子类的构造函数中,都有一个QWidget*参数,用来指定它们的父控件。
源代码如下:
#include <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();
}
阅读全文..
posted at 09/05/24 14:33 | 技术文摘 - Qt | 浏览(107) | 引用(1) | 评论

1.2 Qt学习笔记之连接信号和响应函数
这个例子用来说明怎么响应信号,和hello程序的源代码相似,原来的Label用一个按钮代替,点击时退出程序。
源程序如下:
#include <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的控件会发出消息(signal),例如,当点击按钮时,按钮会发送clicked()消息,这个消息可以连接到一个函数上(这个函数在这里成为slot)。这样,当一个消息发送时,slot函数可以自动执行。在这个例子中,我们连接了按钮的clicked信号和QApplication的quit函数,语法如第七,八行所示。
编译以上程序,将以上代码放在quit.cpp文件中,保存。
依次运行
# qmake -project
# qmake quit.pro
# make(unix or linux) or nmake(windows)
然后运行程序,点击Quit按钮,程序将会中止。

原文地址:
http://blog.csdn.net/iamdbl/archive/2007/02/07/1504373.aspx
posted at 09/05/23 19:45 | 技术文摘 - Qt | 浏览(203) | 引用(1) | 评论



      << prev    1  2    next >>