不要qt designer,像写java程序一样,把控件一个一个写到界面上。刚开始来个简单的计数器。
程序执行的结果如图:
程序很简单,由三个源文件组成,分别是caculator.h,caculator.cpp,main.cpp
代码如下:
1、caculator.h
/**/
/*
* 文件:caculator.h
* 作者:yangdk
* email:jidacun@163.com
* 主页:http://blog.csdn.net/yang_dk
*/
#ifndef _CACULATOR_H
#define _CACULATOR_H
#include < QDialog >
class QLabel;
class QLineEdit;
class QPushButton;
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class CacuDialog : public QDialog
... {
Q_OBJECT
public:
CacuDialog(QWidget *parent = 0);
private slots:
void add();
void dec();
void mul();
void div();
void clear();
private:
QLineEdit *editFirst;
QLineEdit *editSecond;
QLineEdit *editResult;
QPushButton *addButton,*decButton,*mulButton,*divButton;
QPushButton *clearButton;
} ;
#endif
* 文件:caculator.h
* 作者:yangdk
* email:jidacun@163.com
* 主页:http://blog.csdn.net/yang_dk
*/
#ifndef _CACULATOR_H
#define _CACULATOR_H
#include < QDialog >
class QLabel;
class QLineEdit;
class QPushButton;
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class CacuDialog : public QDialog
... {
Q_OBJECT
public:
CacuDialog(QWidget *parent = 0);
private slots:
void add();
void dec();
void mul();
void div();
void clear();
private:
QLineEdit *editFirst;
QLineEdit *editSecond;
QLineEdit *editResult;
QPushButton *addButton,*decButton,*mulButton,*divButton;
QPushButton *clearButton;
} ;
#endif
2、caculator.cpp
/**/
/*
* 文件:caculator.cpp
* 作者:yangdk
* 邮箱:jidacun@163.com
* 主页:http://blog.csdn.net/yang_dk
*/
#include < QtGui >
#include " caculator.h "
CacuDialog::CacuDialog(QWidget * parent) : QDialog(parent)
... {
editFirst = new QLineEdit;
editSecond = new QLineEdit;
editResult = new QLineEdit;
editResult->setReadOnly(true); //显示控件只读
editResult->setAlignment(Qt::AlignRight); //让结果的显示向右对齐
addButton = new QPushButton(tr("Add"));
decButton = new QPushButton(tr("Dec"));
mulButton = new QPushButton(tr("Mul"));
divButton = new QPushButton(tr("Div"));
clearButton = new QPushButton(tr("clear"));
clearButton->setDefault(true);
connect(addButton,SIGNAL(clicked()),this,SLOT(add()));
connect(decButton,SIGNAL(clicked()),this,SLOT(dec()));
connect(mulButton,SIGNAL(clicked()),this,SLOT(mul()));
connect(divButton,SIGNAL(clicked()),this,SLOT(div()));
connect(clearButton,SIGNAL(clicked()),this,SLOT(clear()));
QVBoxLayout *mainLayout = new QVBoxLayout;
QHBoxLayout *top = new QHBoxLayout;
QGridLayout *bottom =new QGridLayout;
top->addWidget(editFirst);
top->addWidget(editSecond);
top->addWidget(editResult);
bottom->addWidget(addButton, 0, 0);
bottom->addWidget(decButton, 0, 1);
bottom->addWidget(mulButton, 1, 0);
bottom->addWidget(divButton, 1, 1);
bottom->addWidget(clearButton,0,2,2,1);//占两横一列
mainLayout->addLayout(top);
mainLayout->addLayout(bottom);
setLayout(mainLayout);
}
void CacuDialog::add()
... {
double res;
res = editFirst->text().toDouble()+editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::dec()
... {
double res;
res = editFirst->text().toDouble()-editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::mul()
... {
double res;
res = editFirst->text().toDouble()*editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::div()
... {
double res;
res = editFirst->text().toDouble()/editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::clear()
... {
editFirst->setText("");
editSecond->setText("");
editResult->setText("0");
}
* 文件:caculator.cpp
* 作者:yangdk
* 邮箱:jidacun@163.com
* 主页:http://blog.csdn.net/yang_dk
*/
#include < QtGui >
#include " caculator.h "
CacuDialog::CacuDialog(QWidget * parent) : QDialog(parent)
... {
editFirst = new QLineEdit;
editSecond = new QLineEdit;
editResult = new QLineEdit;
editResult->setReadOnly(true); //显示控件只读
editResult->setAlignment(Qt::AlignRight); //让结果的显示向右对齐
addButton = new QPushButton(tr("Add"));
decButton = new QPushButton(tr("Dec"));
mulButton = new QPushButton(tr("Mul"));
divButton = new QPushButton(tr("Div"));
clearButton = new QPushButton(tr("clear"));
clearButton->setDefault(true);
connect(addButton,SIGNAL(clicked()),this,SLOT(add()));
connect(decButton,SIGNAL(clicked()),this,SLOT(dec()));
connect(mulButton,SIGNAL(clicked()),this,SLOT(mul()));
connect(divButton,SIGNAL(clicked()),this,SLOT(div()));
connect(clearButton,SIGNAL(clicked()),this,SLOT(clear()));
QVBoxLayout *mainLayout = new QVBoxLayout;
QHBoxLayout *top = new QHBoxLayout;
QGridLayout *bottom =new QGridLayout;
top->addWidget(editFirst);
top->addWidget(editSecond);
top->addWidget(editResult);
bottom->addWidget(addButton, 0, 0);
bottom->addWidget(decButton, 0, 1);
bottom->addWidget(mulButton, 1, 0);
bottom->addWidget(divButton, 1, 1);
bottom->addWidget(clearButton,0,2,2,1);//占两横一列
mainLayout->addLayout(top);
mainLayout->addLayout(bottom);
setLayout(mainLayout);
}
void CacuDialog::add()
... {
double res;
res = editFirst->text().toDouble()+editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::dec()
... {
double res;
res = editFirst->text().toDouble()-editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::mul()
... {
double res;
res = editFirst->text().toDouble()*editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::div()
... {
double res;
res = editFirst->text().toDouble()/editSecond->text().toDouble();
editResult->setText(QString::number(res));
}
void CacuDialog::clear()
... {
editFirst->setText("");
editSecond->setText("");
editResult->setText("0");
}
3、main.cpp
/**/
/*
* 文件:main.cpp
* 作者:yangdk
* email:jidacun@163.com
* 主页:http://blog.csdn.net/yang_dk
*/
#include < QApplication >
#include < QtGui >
#include " caculator.h "
int main( int argc, char * argv[])
... {
QApplication app(argc,argv);
CacuDialog dialog;
return dialog.exec();
}
* 文件:main.cpp
* 作者:yangdk
* email:jidacun@163.com
* 主页:http://blog.csdn.net/yang_dk
*/
#include < QApplication >
#include < QtGui >
#include " caculator.h "
int main( int argc, char * argv[])
... {
QApplication app(argc,argv);
CacuDialog dialog;
return dialog.exec();
}
ok!将这三个文件放在同一个目录下,进入这个文件夹,执行下面三句话
qmake
-
project
qmake
make // 这一局视你的环境而定,可能是make,tmake,nmake
qmake
make // 这一局视你的环境而定,可能是make,tmake,nmake
好了,这就生成了可执行文件。直接运行就可以得到上面图示的结果。