QT:面向对象的Qt编程
来源:互联网 发布:评定nba历史地位的算法 编辑:程序博客网 时间:2024/05/22 09:47
面向对象的QT编程
1. 基于对象的QT编程 // QT的功能受到限制,不推荐
2. 面向对象的QT编程
《案例》 加法计算器
class CalculateDialog : public QDialog {
// 行为:
构造函数 ( ) { 初始化界面 }
槽函数:当输入左右操作数时,发送信号,检测是否都为有效数字,使能等号按钮;
槽函数:当点击等号按钮时,发送信号,计算结果并显示;
// 属性:
QLineEdit
QLabel
QPushButton
};
int main (int argc, char** argv) {
QApplication app (argc, argv);
CalculateDialog dialog;
dialog.show ();
return app.exec ();
}
QLineEdit输入组件
QLineEdit(QWidget * parent = 0);
QLineEdit(const QString & contents, QWidget * parent = 0);
QString text() const; // 获取输入内容
void setText(const QString &) [slots]; // 设置输入内容
double QString::toDouble(bool * ok = 0) const; // 转换字符为数字
void textChanged(const QString & text) [signals]; // 输入改变检测
<tips>
"拷贝QT工程项目文件夹到虚拟机和windows系统共享文件夹,命令:"
$:cp ../Calculator/ /mnt/hgfs/QT/ -frd
// 工程目录 Calculator
/** 代码演示 - 加法计算器 **/ // CalculatorDialog.h#ifndef _CALCULATORDIALOG_H#define _CALCULATORDIALOG_H#include <QDialog>#include <QLineEdit>#include <QPushButton>#include <QLabel>#include <QDoubleValidator> // 验证器#include <QHBoxLayout> // 水平布局器class CalculatorDialog : public QDialog { Q_OBJECT // moc编译器,将不符合c++标准的变成规范的语法public: CalculatorDialog (void); // 缺省表现为父窗口public slots: // 编译依赖 Q_OBJECT // 使能等号按钮 void enableCalcButton (void); // 计算结果 void calcClicked (void);private: QLineEdit* m_editX; // 左操作数 QLineEdit* m_editY; // 右操作数 QLineEdit* m_editZ; // 显示结果QPushButton* m_btnCalc; // 等号按钮QPushButton* m_c; // 重置按钮};#endif //_CALCULATORDIALOG_H// CalculatorDialog.cpp#include "CalculatorDialog.h"// 构造函数,初始化UICalculatorDialog::CalculatorDialog (void) { // 设置窗口标题 setWindowTitle ("加法计算器"); // 计算器左操作数 m_editX = new QLineEdit (this); // this 指向父窗口 // 设置文本对齐方式 - 右对齐 m_editX->setAlignment (Qt::AlignRight); // 设置双精度验证器,是一个隐藏部件,限制只能输入数字 m_editX->setValidator (new QDoubleValidator (this)); // 计算器右操作数 m_editY = new QLineEdit (this); m_editY->setAlignment (Qt::AlignRight); m_editY->setValidator (new QDoubleValidator (this)); // 计算器结果 m_editZ = new QLineEdit (this); m_editZ->setAlignment (Qt::AlignRight); m_editZ->setValidator (new QDoubleValidator (this)); m_editZ->setReadOnly (true); // 设置只读 m_btnCalc = new QPushButton ("=", this); m_btnCalc->setEnabled (false); // 禁用按钮(灰色) // 布局器:可以根据容器窗口,自动调整每个组件的大小和位置 // 创建水平布局器 QHBoxLayout* layout = new QHBoxLayout (this); // 将每个组件按从左到右的顺序添加到布局器中 layout->addWidget (m_editX); layout->addWidget (new QLabel ("+")); layout->addWidget (m_editY); layout->addWidget (m_btnCalc); layout->addWidget (m_editZ); // 设置布局器 setLayout (layout); // 当输入左右操作数时,发送信号 connect (m_editX, SIGNAL (textChanged (const QString&)), this, SLOT (enableCalcButton ())); connect (m_editY, SIGNAL (textChanged (const QString&)), this, SLOT (enableCalcButton ())); // 点击等号按钮,发送信号,计算结果 connect (m_btnCalc, SIGNAL (clicked ()), this, SLOT (calcClicked ()));}// 槽函数:使能等号void CalculatorDialog::enableCalcButton (void) { bool bXOk; bool bYOk; // 获取输入数据,转换成double,结果保存到参数中 // 如果成功参数值为true,否则为false m_editX->text ().toDouble (&bXOk); m_editY->text ().toDouble (&bYOk); if (bXOk && bYOk) { m_btnCalc->setEnabled (true); // 使能等号按钮 } else { m_btnCalc->setEnabled (false); }}// 槽函数:计算结果void CalculatorDialog::calcClicked (void) { double res = m_editX->text ().toDouble () + m_editY->text ().toDouble (); // QString::number 将数字转换为QString字符串,g紧凑格式,15精度 QString str = QString::number (res, 'g', 15); // 显示结果 m_editZ->setText (str);}// main.cpp#include <QApplication>#include "CalculatorDialog.h"int main (int argc, char** argv) { // 一般情况下很大的一个QT项目也是这四句话--参考 QApplication app (argc, argv); CalculatorDialog dialog; dialog.show (); return app.exec ();}
/** 代码练习 - 以下是增加了 C 重置button **/ #include "CalculatorDialog.h"CalculatorDialog::CalculatorDialog (void) { setWindowTitle ("加法计算器 - By Jan 2017.01.17"); // 创建出输入组件 m_l = new QLineEdit (this); m_r = new QLineEdit (this); m_sum = new QLineEdit (this); // 输入组件内文本靠右对齐 m_l->setAlignment (Qt::AlignRight); m_r->setAlignment (Qt::AlignRight); m_sum->setAlignment (Qt::AlignRight); // 验证输入 m_l->setValidator (new QDoubleValidator (this)); m_r->setValidator (new QDoubleValidator (this)); m_sum->setReadOnly (true); // c button m_c = new QPushButton ("C", this); // = button m_button = new QPushButton ("=", this); m_button->setEnabled (false); // 水平布局器 QHBoxLayout* layout = new QHBoxLayout (this); layout->addWidget (m_c); layout->addWidget (m_l); layout->addWidget (new QLabel ("+")); layout->addWidget (m_r); layout->addWidget (m_button); layout->addWidget (m_sum); setLayout (layout); // 信号与槽函数连接 c connect (m_c, SIGNAL (clicked ()), this->m_l, SLOT (clear ())); connect (m_c, SIGNAL (clicked ()), this->m_r, SLOT (clear ())); connect (m_c, SIGNAL (clicked ()), this->m_sum, SLOT (clear ())); // 信号与槽函数连接 输入框 connect (m_l, SIGNAL (textChanged (const QString&)), this, SLOT (enableCalcButton ())); connect (m_r, SIGNAL (textChanged (const QString&)), this, SLOT (enableCalcButton ())); // 信号与槽函数连接 = connect (m_button, SIGNAL (clicked ()), this, SLOT (calcClicked ()));}void CalculatorDialog::enableCalcButton (void) { bool bx; bool by; m_l->text ().toDouble (&bx); m_r->text ().toDouble (&by); if (bx && by) m_button->setEnabled (true); else m_button->setEnabled (false);}void CalculatorDialog::calcClicked (void) { double res = m_l->text ().toDouble () + m_r->text ().toDouble (); QString str = QString::number (res, 'g', 15); m_sum->setText (str);}
- QT:面向对象的Qt编程
- Qt面向对象的设计( 一)
- Qt面向对象的程序设计(二)
- 面向对象编程实践—桌面时钟的设计(Qt实现)
- Qt的对象系统
- QT的qsemaphore编程
- QT的wince编程
- Qt的UDP编程
- Qt的串口编程
- Qt编程技巧 Qt随机数的产生
- Qt编程技巧 Qt随机数的产生
- 面向对象的编程
- 面向对象的编程
- 面向对象的编程
- 面向对象的编程
- Qt对象
- Qt中对象的释放
- Qt的元对象系统
- Error:(13, 8) 错误: xxx不是抽象的, 并且未覆盖xxx中的抽象方法onBindViewHolder(BaseSimpleRecyclerAdapter.ViewHolder,int)
- 不一样的四月
- [LeetCode]506. Relative Ranks(相对应排名)
- DNS域名解析
- Vim插件之ctrlp
- QT:面向对象的Qt编程
- 方立勋_30天掌握JavaWeb_JavaBean、mvc开发模式、el表达式、jstl标签
- Android UI-实现底部切换标签之方式三 ──Activity(底部采用FragmentTabHost)添加5个子Fragment
- SSH购物系统小结
- QT:Qt设计师的使用 designer
- CC2530调试记录
- 递归/循环操作单链表
- QT:Qt创造器的使用 creator
- QT:资源和图像