crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> простейший калькулятор
ArhiZhek
  опции профиля:
сообщение 27.10.2011, 21:13
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 9.10.2011
Пользователь №: 2932

Спасибо сказали: 0 раз(а)




Репутация:   0  


хочу попробовать создать простейший калькулятор (только сумма), в один LineEdit вводим a, в другой LineEdit вводим b, щелкаем pushbutton - выводит результат в третьем LineEdit, и никак у меня не получается его реализовать - выводит пустое окошко, помогите найти проблему...
P.S. я только учусь прог-ть в Qt
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 27.10.2011, 21:46
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Забыл в конструкторе виджета вызвать setupUi?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 27.10.2011, 22:47
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


ArhiZhek Будет гораздо проще, если вы покажете код.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ArhiZhek
  опции профиля:
сообщение 28.10.2011, 8:07
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 9.10.2011
Пользователь №: 2932

Спасибо сказали: 0 раз(а)




Репутация:   0  


только я не знаю из какого файла... выложу все...
заголовочный:
#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®);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 28.10.2011, 9:11
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


А чего это у Вас, батенька, в деструкторе?

В приложении исходники проекта. Комменты ниже:
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()));
}


Сообщение отредактировал silver47 - 28.10.2011, 9:47
Прикрепленные файлы
Прикрепленный файл  tmp_calc.zip ( 1.38 килобайт ) Кол-во скачиваний: 80
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 28.10.2011, 10:04
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Вы запутались с созданием widget-ов. Есть 2 подхода:
  • Используется дизайнер форм, и виджеты рисуются в нем.
  • Форму и виджеты создаются в коде, не используется ui-файл
Бывает, что на форму из дизайнера виджеты добавляются в коде, но на это должны быть причины. Скажем их количество может меняться. Это не Ваш случай.

Предлагаю начать с нуля. Создайте в креаторе новый проект "GUI приложение", форму наследуйте от MainWindow (хотя здесь это не принципиально).
Откроется редактор формы, накидайте на него 3 line edit-а и кнопку. По умолчанию эдиты имеют имена lineEdit, lineEdit_2 и lineEdit_3, кнопка - pushButton. Пусть так и называются.
Посмотрите на код:
// 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), покажется форма.
Теперь по клику на кнопке скопируем содержимое lineEdit в lineEdit_2.
Добавляем слот copyText и привязываем его к сигналу кнопки
//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());
}

Надеюсь стало понятнее, как обратиться к виджетам на форме.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 28.10.2011, 10:13
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(ArhiZhek @ 28.10.2011, 9:07) *
только я не знаю из какого файла... выложу все...
исходники: 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;//??? may be MainWindow window;
     window.show();
     return a.exec();
}


все ваши проблемы описаны в комментах с вопросами, надеюсь понятно где ошибки.

Сообщение отредактировал wiz29 - 28.10.2011, 10:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ArhiZhek
  опции профиля:
сообщение 28.10.2011, 19:21
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 9.10.2011
Пользователь №: 2932

Спасибо сказали: 0 раз(а)




Репутация:   0  


ого сколько у меня косяков :blush2: сейчас буду исправляться, благодарю за помощь!

:yahoo: silver47, Sokoloff, wiz29, разобрался с Вашей помощью, теперь попытаюсь добавить несколько переменных...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 21:02