一. QT编程环境
(1)QT的工具
① assistant 帮助手册
② qmake -v 查看qt版本
③ qmake -project 可以把项目的源文件组织成项目的描述文件 .pro
④ qmake 可以根据.pro文件生成Makefile
⑤ make 根据Makefile得到目标
⑥ designer 设计器 : 所见即所得的可视化界面设计器得到的文件是 ***.ui
uic: 可以吧ui文件变成.h文件
⑦ qtcreator 集成开发工具
(2)QT的头文件
目录:/usr/local/Trolltech/Qt-4.8.6/include
按照功能划分了不同的模块:QtGui QtCore QtNetwork ...
(3)QT的库文件
qt的库文件就/usr/local/Trolltech/Qt-4.8.6/lib是对头文件的分模块实现。
目录:/usr/local/Trolltech/Qt-4.8.6/lib
二. 第一个QT程序
1.建立单独文件夹 写一个CPP程序
2.qmake -project 可以把项目的源文件组织成项目描述文件 .pro。
3 qmake 根据pro文件得到Makefile
4. make 得到执行文件
三. qt中帮助文档可以提供的内容
1 头文件所在的模块
#include
#include
2. 一个类的继承关系 继承自谁 被谁继承(QObject)
3 类的属性 和 继承的属性
4 公开的函数
(1)构造函数
(2)成员函数
5 信号 和 槽 函数
slots signals
class A{
public slots:
void mySlot();
public: signals:
void mySignal();
};
信号函数只需要声明 不需要实现
6 保护函数
一般都是事件处理函数
7 静态函数
不使用对象就可以直接调用的函数
8 类的详细声明(不重要)
四. 中文的显示
常见编码
utf-8 gbk gb2312
QTextCodec 文本编码类
/*根据文本编码类 结合编码方式 得到一个编码对象*/
QTextCodec *code = QTextCodec::codecForName("utf-8");
/*根据编码对象把数据转换成Unicode编码*/
QString toUnicode(const char*);
1 #include2 #include 3 #include 4 5 int main(int argc, char** argv) 6 { 7 //查文档构件一个qt应用程序对象 8 QApplication app(argc, argv); 9 10 /*根据编码方式 创建编码对象*/ 11 QTextCodec *coder = QTextCodec::codecForName("utf-8"); 12 13 //构建一个标签对象 14 QLabel qlab(coder->toUnicode("你好 qt!")); 15 qlab.show(); 16 17 //程序进入事件循环,等待用户交互 18 return app.exec(); 19 }
关于中文不显示的问题:
解决方法:
步骤一
ubuntu安装中文输入法使用。
1:System Settings–>Language Support–>Install/Remove Languages
2:选中chinese,点击Apply应用即可,等待-》下载-》安装。
3:安装ibus框架 sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4
4:启动ibus框架:im-config -s ibus
6:安装拼音引擎:sudo apt-get install ibus-pinyin
7:设置ibus框架:sudo ibus-setup -》在input method 里添加 刚刚加入到chinese-pinyin.
8:添加输入法:system settings...-》Text Entry,勾选show current input source in the menu bar前面的勾,在左面右上角就可以选择输入法了。
步骤二
设置QT的配置文件(这部很重要!!!!!)
1:终端搜索,执行命令,find / -name qtconfig(后来发现如果将QT加入环境变量后直接在任何目录下执行qtconfigj即可,无需查找),找到之后执行,进入到一个页面。这个页面是配置的页面,不管你是什么版本的QT,按照这个命令去搜,应该就会搜的到。
2:选择song Ti,再保存。
3:重新构建qt项目,执行,中文就出现了,希望对大家有所帮助。(原博链接:https://blog.csdn.net/leoeitail/article/details/55511668)
五 创建一个按钮,按钮上显示 关闭标签
QPushBotton qpush
QLabel qlab
按钮对象的行为 影响 到便签对象。
函数 函数
查看QObject的静态函数,可以完成两个毫不相关的对象的连接。
bool QObject::connect ( const QObject * sender,
const char * signal,
const QObject * receiver,
const char * method,
Qt::ConnectionType type = Qt::AutoConnection )
sender 信号发送者的地址
signal 发出的信号
SIGNAL(信号函数名()) //把地址转换成const char *
receiver 信号接收者的地址
method 信号处理函数 一般是槽函数
SLOT(槽函数())
按钮类型的一个信号函数 可以代表点击
在QPushBotton中的public slots槽函数中找到 5 public slots inherited from QAbstractButton 追进去,可以找到:
void clicked ()
标签类型的一个槽函数,可以代表关闭
bool close()
六 父窗口
如果一个窗口没有指定父窗口,则这个窗口是一个独立窗口。 一旦给一个窗体指定父窗口,则这个窗体会停靠在父窗口上。
父窗口必须是QWidget类型,或者它的子类型 QMainwindow QDialog
parent.cpp
1 #include2 #include 3 #include 4 #include 5 6 int main(int argc, char** argv) 7 { 8 QApplication app(argc, argv); 9 10 //创建一个父窗口 11 QWidget *parent = new QWidget(); 12 13 //创建一个标签对象 14 QLabel *qlab = new QLabel("hello qt!", parent); 15 //qlab->show(); 16 qlab->move(150, 50); 17 18 //创建一个按钮对象,移动到(150,400) 19 QPushButton *qpush = new QPushButton("closetab", parent); 20 qpush->move(150, 400); 21 //点击按钮,关闭标签 22 QObject::connect(qpush, SIGNAL(clicked()), qlab, SLOT(close())); 23 24 parent->show(); 25 parent->resize(400, 500); 26 27 return app.exec(); 28 }
调整组件的大小:
resize(x, y)
移动组件的位置:
move(x, y);
qqlogin.cpp
1 #include2 #include 3 #include 4 #include 5 6 int main(int argc, char** argv) 7 { 8 QApplication app(argc, argv); 9 10 //定义组件指针 11 QDialog *parent; 12 QLineEdit *username; 13 QLineEdit *userpasswd; 14 QPushButton *blogin; 15 QPushButton *bcancel; 16 17 //组件指针赋值 18 parent = new QDialog(); 19 parent->resize(400, 300); 20 username = new QLineEdit(parent); 21 userpasswd = new QLineEdit(parent); 22 blogin = new QPushButton("login", parent); 23 bcancel = new QPushButton("cancel", parent); 24 25 //调整组件位置 26 username->move(200, 50); 27 userpasswd->move(200, 100); 28 blogin->move(50, 200); 29 bcancel->move(250, 200); 30 parent->show(); 31 32 //点击按钮,关闭窗口 33 QObject::connect(bcancel, SIGNAL(clicked()), parent, SLOT(close())); 34 35 return app.exec(); 36 }