学了两天,感觉在QT下用C++写一个入门的程序也没有难度:主要还是学习QT上一些格式化的关键字,各种控件的类库,一些流程性的东西。
一般自己改完后要:
不过有时候可能有一些小的细节要注意。
//main.cpp
#include <QApplication>
#include"mywidget.h"
#include <QTextCodec>
int main(int argc,char *argv[])
{
QApplication app(argc,argv); //App1
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); //输出中字用 为tr() 做准备
MyWidget form;
form.show(); //show 类
return app.exec();//App1
}
//mywidget.h
#include "ui_form.h"
#include <QWidget>
#include <QCloseEvent>
class MyWidget:public QWidget,public Ui_Form // 双继
{
Q_OBJECT //一个有关connect SIGNAL 和solt..............
public:
MyWidget(QWidget *parent=0); //自定义构造fun
void closeEvent(QCloseEvent * event);//重写Event xx
public slots: //........................自定义一些事件用
void print(); //自定义print
void myquit();
};
//mywidget.cpp
#include "mywidget.h"
#include <QDebug>
#include <QMessageBox>
MyWidget ::MyWidget(QWidget *parent)
:QWidget(parent) //:
{
setupUi(this); //注意 this setupUi() 来自于类Ui_Form,程序自动成功的
connect(pushButton,SIGNAL(clicked()),this,SLOT(myquit())); //connect 格式用法
connect(btn_print,SIGNAL(clicked()),this,SLOT(print()));
connect(btn_clean,SIGNAL(clicked()),lineEdit,SLOT(clear()));
}
void MyWidget::print()
{
if(lineEdit->text()=="")
{
QMessageBox::critical(this,tr("错误"),tr("你输入的内容不能为空")); //QMessageBox
}
else
qDebug()<<lineEdit->text();
}
void MyWidget::myquit()
{
if(QMessageBox::Ok==QMessageBox::question(this,tr("conf"),"Are you Quit?",QMessageBox::Ok|QMessageBox::Cancel))
qApp->quit();
}
void MyWidget::closeEvent(QCloseEvent *event)
{
if(QMessageBox::Ok==QMessageBox::question(this,tr("conf"),"Are you Quit?",QMessageBox::Ok | QMessageBox::Cancel))
{
event->accept(); //这是一个格式,if 条件可以自己写
}
else
{
event->ignore();
}
}
下面这两个文件我们一般自己不修改,直接在Qt_creat 生成。。。也就是我们自己拉了几个控件,把位置放好就ok了
// form.ui ------这个文件是由系统生成的
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>535</width>
<height>326</height>
</rect>
</property>
。。。。。。。。。。
// ui_form.h
/********************************************************************************
** Form generated from reading ui file 'form.ui'
**
** Created: Wed Jun 13 15:44:11 2012
** by: Qt User Interface Compiler version 4.5.3
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/
#ifndef UI_FORM_H
#define UI_FORM_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QLCDNumber>
#include <QtGui/QLineEdit>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Form
{
public:
QPushButton *pushButton;
QLCDNumber *lcdNumber;
QLineEdit *lineEdit;
QPushButton *btn_print;
QPushButton *btn_clean;
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
Form->setObjectName(QString::fromUtf8("Form"));
Form->resize(535, 326);
pushButton = new QPushButton(Form);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(9, 9, 85, 27));
pushButton->setAutoExclusive(false);
lcdNumber = new QLCDNumber(Form);
lcdNumber->setObjectName(QString::fromUtf8("lcdNumber"));
lcdNumber->setGeometry(QRect(9, 72, 64, 23));
lineEdit = new QLineEdit(Form);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
lineEdit->setGeometry(QRect(60, 110, 191, 23));
lineEdit->setEchoMode(QLineEdit::Password);
btn_print = new QPushButton(Form);
btn_print->setObjectName(QString::fromUtf8("btn_print"));
btn_print->setGeometry(QRect(60, 160, 88, 27));
btn_clean = new QPushButton(Form);
btn_clean->setObjectName(QString::fromUtf8("btn_clean"));
btn_clean->setGeometry(QRect(200, 160, 88, 27));
retranslateUi(Form);
QMetaObject::connectSlotsByName(Form);
} // setupUi
void retranslateUi(QWidget *Form)
{
Form->setWindowTitle(QApplication::translate("Form", "Form", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("Form", "\351\200\200\345\207\272", 0, QApplication::UnicodeUTF8));
lineEdit->setText(QString());
btn_print->setText(QApplication::translate("Form", "\346\211\223\345\215\260", 0, QApplication::UnicodeUTF8));
btn_clean->setText(QApplication::translate("Form", "\346\270\205\351\231\244", 0, QApplication::UnicodeUTF8));
Q_UNUSED(Form);
} // retranslateUi
};
namespace Ui {
class Form: public Ui_Form {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_FORM_H
一般自己改完后要:
qmake -project
qmake
make
注意有时候我们重新改完代码,要重新 make clean 一下,按照以上三步,在自动生成ui_form.h和form.ui两文件。