Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Переделать Qvector в массивы


Автор: Testero 22.10.2012, 19:52
Здравствуйте, мне нужна помощь в следующем - у меня программа реализует перевод систем счисления из dec в hex, octal, bin. Реализовано путем Qvector, но надо реализовать через массивы, при изменении на обычные массивы с i(который реализует подсчет) вылетает ошибка. Кто сможет помочь с реализацией через обычные массивы, буду признателен. 

Вот код с Qvector.
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include"dialog.h"
#include <QVector>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QGraphicsScene scene;
    QString Binary(int);
        QString Octal(int);
        QString Hexadecmal(int);

private:
    Ui::MainWindow *ui;
    Dialog* dg;
public slots:
    void podshet();
    void opendial();
    void kart();//функция ресующая фигню в главной программе

};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <math.h>
#include <QVector>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    dg = new Dialog(this);
    QIntValidator *inter = new QIntValidator(0,99999,0);
    ui->lineEdit->setValidator(inter);
    ui->graphicsView->setScene(&scene); //переопределение для исп графика, связка объекта с переменной
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(opendial()));
    connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(podshet()));
    connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(kart()));
    connect(dg,SIGNAL(accepted()) ,this,SLOT(podshet()));
    dg->i=0;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::podshet()
{
    int a;
    QString str1 = ui->lineEdit->text();//создается переменная qstring которая берет значение из lineedit
//text - функц которое возвращает значение введеное в поле lineedit
    a=str1.toInt();//перевод значения lineedit в int
    QString str2;//str2 - запис рез. вычисл



    if(dg->i==0) {
   //     str2.setNum(a, 2);
                    ui->lineEdit_2->setText(Binary(a));
                    ui->label_3->setText("b");
            }
            if(dg->i==1) {
   //             str2.setNum(a, 8);
                    ui->lineEdit_2->setText(Octal (a));
         ui->label_3->setText("o");

            }
                if(dg->i==2) {
   //                 str2.setNum(a, 16);
                        ui->lineEdit_2->setText(Hexadecmal (a));
            ui->label_3->setText("h");
            }

Mainwindow.cpp
}

void MainWindow::opendial()
{
    dg->show();
}

void MainWindow::kart()
{
    scene.clear();
    scene.addEllipse(ui->spinBox_1->value(),ui->spinBox_2->value(),ui->Radius->value(),ui->Radius->value());
}


QString MainWindow::Binary(int number)
{
    int N=0;
    QVector<int> B(200);
    while (number!=0)
    {
        N++; B[N-1]=number%2;  number/=2;
    }
    QString result;
    for (int i=N-1;i>=0;i--)
    {
        result.append(QString("%1").arg(B[i]));
    }
    return result;
}

QString MainWindow::Octal(int number)
{
    int N=0;
    QVector<int> B(200);
    while (number>=8)
    {
        N++; B[N-1]=number%8;  number/=8;
    }
    QString result;
    result.append(QString("%1").arg(number));
    for (int i=N-1;i>=0;i--)
    {
         result.append(QString("%1").arg(B[i]));
    }
    return result;
}

QString MainWindow::Hexadecmal(int number)
{
    const QString str="0123456789ABCDEF";
    int N=0;
    QVector<int> B(200);
    while (number>=16)
    {
        N++; B[N-1]=number%16;  number/=16;
    }
    QString result;
    result.append(str[number]);
    for (int i=N-1;i>=0;i--)
    {
         result.append(str[B[i]]);
    }
    return result;
}

Нужно сделать в кратчайшие сроки, буду очень признателен за помощь.

Автор: borisbn 22.10.2012, 21:07
Меняешь QVector<int> B(200); на int B[200]; и всё.
А ещё, не пояснишь для тугодума, зачем для перевода из одной системы исчисления в другую нужен QGraphicsScene???  smile 

Автор: Testero 22.10.2012, 23:14
Да это я эллипс делал)

Автор: borisbn 23.10.2012, 06:13
> Да это я эллипс делал) 
Восьмиричный?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)