Qt是一个跨平台的c++图形用户界面用用程序框架。
Qt安装说明:
windows下环境变量path需要加入以下路径,以便QT写的程序可以离开QT开发环境独立运行
C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin\;C:\Qt\Qt5.2.0\Tools\mingw48_32\bin;
linux下需要设置.bash_profile文件
PATH中加入/opt/Qt5.2.0/5.2.0/gcc/bin
用root用户登录系统,进入/usr/lib目录后执行
ln libGL.so.1 libGL.so
1.入门程序
界面程序:求两个整数的和。
用到的控件:
lineEdit
pushButton
label
给按钮添加事件:右键, 转到槽, click信号。
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.setWindowTitle("diyige progma");//设置窗口标题 w.show(); return a.exec(); }
void Widget::on_pushButton_clicked() { QString s1 = ui->lineEdit->text();//得到lineEdit中用户输入的文本 QString s2 = ui->lineEdit_2->text(); int a = s1.toInt() + s2.toInt();//将文本转化为整数后相加 ui->label->setText(QString::number(a));//将整数转化为QSting类型,然后设置lable的text }
2.qt程序移植
linux下qt程序移植:将windows下面编写的源代码(不要.user)复制到linux系统用户目录下面。
cd 回家, 切换到用户的主目录。
修改.bash_profile,添加PATH变量中qmake的路径。
qmake 命令添加到环境变量中。
qmake生成Makefile, 然后make进行编译。
编译过程中报错,缺少LG库。
以root用户切换到 /usr/lib、 查看 ls libGL.so*
发现有待版本号后缀的库文件。libGL.so.1 libGLso.2
建立快捷方式:ln libGL.so.1 libGL.so
再次编译,生成可执行程序,在图形界面下面,双击执行程序。
3.环境变量的设置
如何在windows下面找到xx.exe程序直接双击,提示找不到库不能运行,需要将qt安装时候的路径
为了使qt写的应用程序能够离开qt开发环境单独运行,需要修改windows下面的path环境变量。
C:\Program Files\ARM\ADSv1_2\bin;D:\android_env\android-sdk-windows\platform-tools;%JAVA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\VisualSVN Server\bin;D:\Program Files\TortoiseSVN\bin;D:\Program
Files\Altium Designer Summer 09\System;C:\Program Files\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;D:\Qt\Qt5.2.0\Tools\mingw48_32\bin;D:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin
4.用代码实现界面
创建项目,注意去掉对勾。
//dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QDialog> //控件头文件 #include <QPushButton> #include <QLineEdit> #include <QLabel> class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); private: QPushButton *btn1; QLineEdit *edit1, *edit2; QLabel *label1; private slots://槽 void add(); }; #endif // DIALOG_H //dialog.cpp #include "dialog.h" #include <QGridLayout> Dialog::Dialog(QWidget *parent) : QDialog(parent) { //实例化成员 btn1 = new QPushButton(this); edit1 = new QLineEdit(this); edit2 = new QLineEdit(this); label1 = new QLabel(this); btn1->setText("求和"); label1->setText("label"); QGridLayout *layout = new QGridLayout(this); layout->addWidget(edit1, 0, 0); layout->addWidget(edit2, 0, 1); layout->addWidget(btn1, 1, 0); layout->addWidget(label1, 1, 1); //将btn1的点击事件和add()关联 connect(btn1, SIGNAL(clicked()),this, SLOT(add())); } Dialog::~Dialog() { } void Dialog::add() { QString s1 = edit1->text();//得到edit1控件中输入的文本 QString s2 = edit2->text(); bool ok = false; int a = s1.toInt(&ok, 16); if (ok == false) { return; } int b = s2.toInt(&ok, 16);//转化为16进制整数后求和 if (ok == false) { return; } label1->setText(QString::number(a+b, 16)); } //main.cpp #include "dialog.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Dialog w; w.setWindowTitle("用代码实现的界面:16进制计算"); w.show(); return a.exec(); }
void Dialog::add() { QString s1 = edit1->text();//得到edit1控件中输入的文本 QString s2 = edit2->text(); QString s3; //将QString转化为c风格的const char * 字符串 //利用sprintf()进行格式化输出 s3.sprintf("%s,%s", s1.toStdString().data(), s2.toStdString().data()); label1->setText(s3); }
5.控件
[Tool
Button ] autoraise属性
[check box]
void Widget::on_pushButton_clicked() { //判断是否选中状态 if(ui->checkBox->checkState()) ui->label->setText("true"); else ui->label->setText("flase"); }
[comboBox]下拉列表
右键-->编辑项目-->加号
[fontComboBox]字体选择下拉列表
[textEdit]
void Widget::on_pushButton_clicked() { ui->label->setText(ui->textEdit->toPlainText()); }
常用控件:
QDateTime类,头文件#include <QDateTime>可以使用QDateTime类来获得系统时间。
通过QDateTime::currentDateTime()来获取本地系统的时间和日期信号。可以通过date()he
time()来返回datetime中的日期和时间部分:
#include "QDateTime" void Widget::on_pushButton_clicked() { QDateTime *time1 = new QDateTime(QDateTime::currentDateTime()); this->setWindowTitle(time1->date().toString()); }
常用控件:
QTime类:定时器(QTimer)
新建一个定时器。QTimer *time_clock = new QTimer(this);
连接这个定时器的信号和槽,利用定时器的timeout()。
connect(time_clock, SIGNAL(timout()), this, SLOT(slottimedone()));
time_clock->start(1000);
开启定时器,并设定定时周期。
定时器定时有两种方式,start(int time)和setSingleShot(true).其中,start(int time)表示
每个“time"秒就会重启定时器。可以重复触发定时,利用stop()将定时器关掉;而
setSingleShot(true)则是仅启动定时器一次。
void Dialog::add() { if(time1->isActive())//如果按钮激活,停止及时 time1->stop(); else time1->start(1000);//每隔1s执行一次on_time函数 } void Dialog::on_time() { QDateTime *date1 = new QDateTime(QDateTime::currentDateTime()); QString s; s.sprintf("%d:%d:%d",date1->time().hour(),date1->time().minute(),date1->time().second()); setWindowTitle(s); }
常用控件
创建窗口
如果widget未使用父级进行创建,则在显示时视为窗口或顶层widget.
由于顶层widget没有父级对象类来确保在其不再使用时就删除,所以需要
开发人员在应用程序中对其进行跟踪。
在本例中,使用QWidget创建和显示具有默认大小的窗口:
void Dialog::add() { QWidget *window = new QWidget(); window->resize(320, 240); window->show(); QPushButton *button = new QPushButton(tr("Press me"), window); button->move(100, 100); button->show(); }