| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, 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??? |
| Автор: Testero 22.10.2012, 23:14 |
| Да это я эллипс делал) |
| Автор: borisbn 23.10.2012, 06:13 |
| > Да это я эллипс делал) Восьмиричный? |