хочу попробовать создать простейший калькулятор (только сумма), в один LineEdit вводим a, в другой LineEdit вводим b, щелкаем pushbutton - выводит результат в третьем LineEdit, и никак у меня не получается его реализовать - выводит пустое окошко, помогите найти проблему...
P.S. я только учусь прог-ть в Qt
Забыл в конструкторе виджета вызвать setupUi?
ArhiZhek Будет гораздо проще, если вы покажете код.
только я не знаю из какого файла... выложу все...
заголовочный:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QLineEdit *lea;
QLineEdit *leb;
QLineEdit *ler;
private:
Ui::MainWindow *ui;
QPushButton *btn;
};
#endif // MAINWINDOW_H
исходники: main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "math.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextEdit textEdit;
QPushButton quitButton("rez");
QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
QWidget window;
window.show();
return a.exec();
}
mainwindow.cpp:
#include <QtGui>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "math.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow(){
lea=new QLineEdit(this);
leb=new QLineEdit(this);
ler=new QLineEdit(this);
lea->show();
leb->show();
ler->show();
QPushButton *btn1=new QPushButton(tr("Schitaty"),this);
btn1->show();
QObject::connect(btn1,SIGNAL(clicked()), this, SLOT(main()));
double a,b,r;
a=lea->text().toDouble(0);
b=leb->text().toDouble(0);
r=ler->text().toDouble(0);
r=a+b;
ler->setText(QString::number®);
}
А чего это у Вас, батенька, в деструкторе?
В приложении исходники проекта. Комменты ниже:
Widget::Widget(QWidget *parent) : QWidget(parent){
QVBoxLayout *mainLay = new QVBoxLayout(this); // создаем вертикальный диспетчер компоновки
// создаем поля ввода
mainLay->addWidget(theFirstEdit = new QLineEdit);
mainLay->addWidget(theSecondEdit = new QLineEdit);
mainLay->addWidget(theThirdEdit = new QLineEdit);
// ставим простенькую маску ввода(только цифры. Для начала сойдет, далее лучше RegExp)
theFirstEdit->setInputMask("9999");
theSecondEdit->setInputMask("9999");
// запрещаем редактирование третего поля ввода
theThirdEdit->setReadOnly(true);
// создаем кнопку ввода
QPushButton *clickMeBtn = new QPushButton("Calculate");
QObject::connect(clickMeBtn, SIGNAL(clicked()), this, SLOT(calculate()));
mainLay->addWidget(clickMeBtn);
}
Widget::~Widget(){}
void Widget::calculate(){
// вычисляем следующим образом: берем текст с обоих полей ввода и переводим его в целое, перемножаем и переводим в строку
theThirdEdit->setText(QString::number(theFirstEdit->text().toInt() * theSecondEdit->text().toInt()));
}
Вы запутались с созданием widget-ов. Есть 2 подхода:
// main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
В большинстве программ в эту функция Вам ничего дописывать не придется. Может только перевод подключать.//mainwindow.h
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
Это минимальный код для формы. Можете запустить проект (Ctrl+R), покажется форма.//mainwindow.h
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void copyText();
};
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(copyText()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::copyText()
{
ui->lineEdit_2->setText(ui->lineEdit->text());
}
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "math.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextEdit textEdit;//?????Эти окна никогда не будут показаны
QPushButton quitButton("rez");//?????????????????а надо ли их создавать:))
QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));//?????????????????????????
QWidget window;//??? may be MainWindow window;
window.show();
return a.exec();
}
ого сколько у меня косяков сейчас буду исправляться, благодарю за помощь!
silver47, Sokoloff, wiz29, разобрался с Вашей помощью, теперь попытаюсь добавить несколько переменных...
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)