Russian Qt Forum
Ноябрь 05, 2024, 13:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4 ... 12   Вниз
  Печать  
Автор Тема: Помогите новичку (совсем новичку)  (Прочитано 85134 раз)
Den2009
Гость
« Ответ #15 : Октябрь 30, 2009, 15:32 »

Проблема решилась пересборкой проекта...
Теперь проблема в другом...
После написания процедуры rasschet()
вылезают такие ошибки:
moc_proga1.obj:-1: error:  "public: __thiscall MainWindow::MainWindow(void)" (??0MainWindow@@QAE@XZ) already defined in main.obj
debug\Project.exe:-1: error:  one or more multiply defined symbols found
хотелось бы узнать, что они означают, и как их лечить

в папке Debug появились файлы:
moc_proga1.cpp
moc_proga1.obj
Project.intermediate.manifest

QTCreator их раньше не создавал...
« Последнее редактирование: Октябрь 30, 2009, 15:42 от Den2009 » Записан
BRE
Гость
« Ответ #16 : Октябрь 30, 2009, 15:44 »

А в каком файле ты ее написал? proga1.cpp?

А из файла main.cpp ты пустую функцию убрал?
Записан
Den2009
Гость
« Ответ #17 : Октябрь 30, 2009, 15:52 »

нет, в main.cpp
Код:
#include <QApplication>
#include "ui_proga1.h"
#include "proga1.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::MainWindow mainWindow;
    QMainWindow *w = new QMainWindow;
    mainWindow.setupUi(w);
    w->show();
    return app.exec();
}
void MainWindow::rasschet()
{
далее описание
}
Записан
BRE
Гость
« Ответ #18 : Октябрь 30, 2009, 15:57 »

У тебя в двух местах конструктор MainWindow::MainWindow определен. В одном месте нужно его убрать.
Записан
Den2009
Гость
« Ответ #19 : Октябрь 30, 2009, 16:02 »

вместо
Код:
void MainWindow::rasschet()

написал
Код:
void rasschet()

moc_proga1.obj:-1: error:  "public: __thiscall MainWindow::MainWindow(void)" (??0MainWindow@@QAE@XZ) already defined in main.obj
moc_proga1.obj:-1: error:  unresolved external symbol "private: void __thiscall MainWindow::rasschet(void)" (?rasschet@MainWindow@@AAEXXZ) referenced in function "public: virtual int __thiscall MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
debug\Project.exe:-1: error:  1 unresolved externals
Записан
BRE
Гость
« Ответ #20 : Октябрь 30, 2009, 16:04 »

Выкладывай все файлы проекта в текущем виде.
Записан
Den2009
Гость
« Ответ #21 : Октябрь 30, 2009, 16:05 »

сделал так:
Код:
void::rasschet()

конструктор выдал только такую ошибку:
C:/Project/./main.cpp:13: error:  'rasschet' : is not a member of '`global namespace''
Записан
Den2009
Гость
« Ответ #22 : Октябрь 30, 2009, 16:16 »

в общем, тех. задание такое: вводится число, его надо преобразовать в вид: чч:мм:сс
main.cpp
Код:
#include <QApplication>
#include "ui_proga1.h"
#include "proga1.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::MainWindow mainWindow;
    QMainWindow *w = new QMainWindow;
    mainWindow.setupUi(w);
    w->show();
    return app.exec();
}
void::rasschet()
{
//Объявление переменных
int iS, oH, oM, oS, notH, notM;
const int SiH=3600, SiM=60;
QString inSec, outHr, outMin, outSec, Buffer;
QSpinBox *spinBox = new QSpinBox;
QTextEdit *textEdit = new QTextEdit;
//Ввод
inSec = spinBox->text();
iS = inSec.toInt();
//Вычисление
//Количество часов
oH = (iS / SiH);
//Убираем количество часов
notH = iS - (oH * SiH);
//Количество минут
oM = (notH / SiM);
//Убираем количество минут
notM = notH - (oM * SiM);
oS = notM;
//Вывод результата
Buffer.sprintf("Введенное количество секунд %1f соответствует %1f часам, %1f минутам и %1f секундам \n", &iS, &oH, &oM, &oS);
textEdit->setText(Buffer);
}

proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H

#include <QMainWindow>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow
{
        Q_OBJECT
public:
        MainWindow();

private slots:
        void rasschet();

private:
        Ui::MainWindow ui;
};

MainWindow::MainWindow()
{
        ui.setupUi( this );
        connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));

}
#endif

project.pro
Код:
######################################################################
# Automatically generated by qmake (2.01a) ?? 30. ??? 15:08:10 2009
######################################################################

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += proga1.h
FORMS += proga1.ui proga1_about.ui proga1_author.ui proga1_help.ui
SOURCES += main.cpp
RESOURCES += resources.qrc

proga1_about.ui proga1_author.ui proga1_help.ui - это другие формы, которые пока что не подключены никуда

ui_proga1.h
Код:
/********************************************************************************
** Form generated from reading ui file 'proga1.ui'
**
** Created: Fri 30. Oct 15:48:49 2009
**      by: Qt User Interface Compiler version 4.4.3
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_PROGA1_H
#define UI_PROGA1_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QLabel>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QSpinBox>
#include <QtGui/QStatusBar>
#include <QtGui/QTextEdit>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QAction *action_4;
    QAction *action_5;
    QAction *action_6;
    QAction *action_7;
    QAction *action_Ctrl_Q;
    QWidget *centralwidget;
    QSpinBox *spinBox;
    QTextEdit *textEdit;
    QPushButton *pushButton;
    QPushButton *pushButton_2;
    QLabel *label;
    QLabel *label_2;
    QStatusBar *statusbar;
    QMenuBar *menubar;
    QMenu *menu;
    QMenu *menu_2;
    QMenu *menu_3;

    void setupUi(QMainWindow *MainWindow)
    {
    if (MainWindow->objectName().isEmpty())
        MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
    MainWindow->setWindowModality(Qt::ApplicationModal);
    MainWindow->setEnabled(true);
    MainWindow->resize(385, 294);
    MainWindow->setMinimumSize(QSize(385, 294));
    MainWindow->setMaximumSize(QSize(385, 294));
    action_4 = new QAction(MainWindow);
    action_4->setObjectName(QString::fromUtf8("action_4"));
    action_4->setCheckable(true);
    action_4->setChecked(true);
    action_5 = new QAction(MainWindow);
    action_5->setObjectName(QString::fromUtf8("action_5"));
    action_5->setCheckable(true);
    action_6 = new QAction(MainWindow);
    action_6->setObjectName(QString::fromUtf8("action_6"));
    action_7 = new QAction(MainWindow);
    action_7->setObjectName(QString::fromUtf8("action_7"));
    action_Ctrl_Q = new QAction(MainWindow);
    action_Ctrl_Q->setObjectName(QString::fromUtf8("action_Ctrl_Q"));
    centralwidget = new QWidget(MainWindow);
    centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
    spinBox = new QSpinBox(centralwidget);
    spinBox->setObjectName(QString::fromUtf8("spinBox"));
    spinBox->setGeometry(QRect(50, 40, 161, 22));
    spinBox->setMaximum(10000000);
    textEdit = new QTextEdit(centralwidget);
    textEdit->setObjectName(QString::fromUtf8("textEdit"));
    textEdit->setGeometry(QRect(50, 110, 301, 71));
    textEdit->setReadOnly(true);
    pushButton = new QPushButton(centralwidget);
    pushButton->setObjectName(QString::fromUtf8("pushButton"));
    pushButton->setGeometry(QRect(250, 40, 101, 21));
    pushButton_2 = new QPushButton(centralwidget);
    pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
    pushButton_2->setGeometry(QRect(160, 210, 75, 23));
    label = new QLabel(centralwidget);
    label->setObjectName(QString::fromUtf8("label"));
    label->setGeometry(QRect(50, 20, 151, 16));
    label_2 = new QLabel(centralwidget);
    label_2->setObjectName(QString::fromUtf8("label_2"));
    label_2->setGeometry(QRect(50, 90, 151, 16));
    MainWindow->setCentralWidget(centralwidget);
    statusbar = new QStatusBar(MainWindow);
    statusbar->setObjectName(QString::fromUtf8("statusbar"));
    MainWindow->setStatusBar(statusbar);
    menubar = new QMenuBar(MainWindow);
    menubar->setObjectName(QString::fromUtf8("menubar"));
    menubar->setGeometry(QRect(0, 0, 385, 22));
    menu = new QMenu(menubar);
    menu->setObjectName(QString::fromUtf8("menu"));
    menu_2 = new QMenu(menubar);
    menu_2->setObjectName(QString::fromUtf8("menu_2"));
    menu_3 = new QMenu(menubar);
    menu_3->setObjectName(QString::fromUtf8("menu_3"));
    MainWindow->setMenuBar(menubar);
    QWidget::setTabOrder(spinBox, pushButton);
    QWidget::setTabOrder(pushButton, textEdit);
    QWidget::setTabOrder(textEdit, pushButton_2);

    menubar->addAction(menu->menuAction());
    menubar->addAction(menu_2->menuAction());
    menubar->addAction(menu_3->menuAction());
    menu->addAction(action_6);
    menu->addAction(action_7);
    menu->addAction(action_Ctrl_Q);
    menu_2->addAction(action_4);
    menu_2->addAction(action_5);

    retranslateUi(MainWindow);
    QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(close()));
    QObject::connect(action_Ctrl_Q, SIGNAL(triggered()), MainWindow, SLOT(close()));

    QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
    MainWindow->setWindowTitle(QApplication::translate("MainWindow", "\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\260 \342\204\2261 :)", 0, QApplication::UnicodeUTF8));
    action_4->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\321\201\320\272\320\270\320\271", 0, QApplication::UnicodeUTF8));
    action_5->setText(QApplication::translate("MainWindow", "\320\220\320\275\320\263\320\273\320\270\320\271\321\201\320\272\320\270\320\271", 0, QApplication::UnicodeUTF8));
    action_6->setText(QApplication::translate("MainWindow", "\320\236 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\265", 0, QApplication::UnicodeUTF8));
    action_7->setText(QApplication::translate("MainWindow", "\320\236\320\261 \320\260\320\262\321\202\320\276\321\200\320\265", 0, QApplication::UnicodeUTF8));
    action_Ctrl_Q->setText(QApplication::translate("MainWindow", "\320\222\321\213\321\205\320\276\320\264", 0, QApplication::UnicodeUTF8));
    pushButton->setText(QApplication::translate("MainWindow", "\320\240\320\260\321\201\321\201\321\207\320\270\321\202\320\260\321\202\321\214", 0, QApplication::UnicodeUTF8));
    pushButton_2->setText(QApplication::translate("MainWindow", "\320\222\321\213\321\205\320\276\320\264", 0, QApplication::UnicodeUTF8));
    label->setText(QApplication::translate("MainWindow", "\320\222\320\262\320\265\320\264\320\270\321\202\320\265 \320\272\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276 \321\201\320\265\320\272\321\203\320\275\320\264", 0, QApplication::UnicodeUTF8));
    label_2->setText(QApplication::translate("MainWindow", "\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202 \321\200\320\260\320\261\320\276\321\202\321\213 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\321\213", 0, QApplication::UnicodeUTF8));
    menu->setTitle(QApplication::translate("MainWindow", "\320\244\320\260\320\271\320\273", 0, QApplication::UnicodeUTF8));
    menu_2->setTitle(QApplication::translate("MainWindow", "\320\257\320\267\321\213\320\272", 0, QApplication::UnicodeUTF8));
    menu_3->setTitle(QApplication::translate("MainWindow", "\320\237\320\276\320\274\320\276\321\211\321\214", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_PROGA1_H
этот файл я не изменял
Записан
BRE
Гость
« Ответ #23 : Октябрь 30, 2009, 16:33 »

main.cpp
Код
C++ (Qt)
#include <QApplication>
#include "proga1.h"
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QMainWindow *w = new QMainWindow;
   w->show();
   return app.exec();
}
 
MainWindow::MainWindow();
{
      ui.setupUi( this );
       connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
}
 
void MainWindow::rasschet()
{
//Объявление переменных
int iS, oH, oM, oS, notH, notM;
const int SiH=3600, SiM=60;
QString inSec, outHr, outMin, outSec, Buffer;
QSpinBox *spinBox = new QSpinBox;
QTextEdit *textEdit = new QTextEdit;
//Ввод
inSec = spinBox->text();
iS = inSec.toInt();
//Вычисление
//Количество часов
oH = (iS / SiH);
//Убираем количество часов
notH = iS - (oH * SiH);
//Количество минут
oM = (notH / SiM);
//Убираем количество минут
notM = notH - (oM * SiM);
oS = notM;
//Вывод результата
Buffer.sprintf("Введенное количество секунд %1f соответствует %1f часам, %1f минутам и %1f секундам \n", &iS, &oH, &oM, &oS);
textEdit->setText(Buffer);
}
 

proga1.h
Код
C++ (Qt)
#ifndef PROGA1_H
#define PROGA1_H
 
#include <QMainWindow>
#include <QObject>
#include "ui_proga1.h"
 
class MainWindow : public QMainWindow
{
       Q_OBJECT
public:
       MainWindow();
 
private slots:
       void rasschet();
 
private:
       Ui::MainWindow ui;
};
 
#endif
 

По хорошему, конструктор класса MainWindow и метод rasschet из файла main.cpp нужно перенести в proga1.cpp
Записан
Den2009
Гость
« Ответ #24 : Октябрь 31, 2009, 12:55 »

Вобщем, сделал так:
main.cpp
Код:
#include <QApplication>
#include "ui_proga1.h"
#include "proga1.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::MainWindow mainWindow;
    QMainWindow *w = new QMainWindow;
    mainWindow.setupUi(w);
    w->show();
    return app.exec();
}
proga1.cpp
Код:
#include "proga1.h"
#include "ui_proga1.h"

MainWindow::MainWindow()
{
ui.setupUi(this);
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
}
void MainWindow::rasschet()
{
//Объявление переменных
int iS, oH, oM, oS, notH, notM;
const int SiH=3600, SiM=60;
QString inSec, outHr, outMin, outSec, Buffer;
QSpinBox *spinBox = new QSpinBox;
QTextEdit *textEdit = new QTextEdit;
//Ввод
inSec = spinBox->text();
iS = inSec.toInt();
//Вычисление
//Количество часов
oH = (iS / SiH);
//Убираем количество часов
notH = iS - (oH * SiH);
//Количество минут
oM = (notH / SiM);
//Убираем количество минут
notM = notH - (oM * SiM);
oS = notM;
//Вывод результата
Buffer.sprintf("Введенное количество секунд %1f соответствует %1f часам, %1f минутам и %1f секундам \n", &iS, &oH, &oM, &oS);
textEdit->setText(Buffer);
}
proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H

#include <QMainWindow>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow
{
        Q_OBJECT
public:
        MainWindow();

private slots:
        void rasschet();

private:
        Ui::MainWindow ui;
};
#endif
1. Компилится нормально, запускается
2. При введении цифр и последующем нажатии кнопки расчет ничего не происходит.
Как во встроенном отладчике QTCreator наблюдать за тем, присваивается ли переменной значение??
Записан
gmorgunov
Гость
« Ответ #25 : Ноябрь 01, 2009, 14:23 »

Привет. Сразу бросилось в глаза, что вы создаете новые textEdit и spinBox в proga1.cpp, а пытаетесь использовать, созданные в дизанере. По-моему лучше наследоватся от QMainWindow и Ui::MainWindow.Тогда можно использовать textEdit ... - все, что создано в дизайнере. Хорошо описано у Шлее.
В общем вот рабочий код( проверил в openSuse11.1):
ui_proga1.h - прежний.
proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H

#include <QMainWindow>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------!!!!!!!!!!!!!!!!!!!!!!
{
        Q_OBJECT
public:
        MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        setupUi(this);
        connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
        
    }
public slots:
        void rasschet();
};
#endif
proga1.cpp
Код:
#include <QtCore>
#include "proga1.h"
#include "ui_proga1.h"

void MainWindow::rasschet()
{
//Объявление переменных
int iS,  oS, notH, notM;
float oH, oM;
const int SiH=3600, SiM=60;
QString inSec, outHr, outMin, outSec, Buffer;

textEdit->clear();
//Ввод
inSec = spinBox->text();
qDebug() << inSec;
iS = inSec.toInt();
qDebug() << iS;
//Вычисление
//Количество часов
oH = (iS / 3600);
//Убираем количество часов
notH = iS - (oH * SiH);
//Количество минут
oM = (iS / 60);
//Убираем количество минут
notM = notH - (oM * SiM);
oS = iS;
//Вывод результата
Buffer.sprintf("Entered  seconds %d correspond %1.1f houres, %1.1f minutes and %d seconds \n", iS, oH, oM, oS);
textEdit->setText(Buffer);
}
main.cpp
Код:
#include <QApplication>
#include "proga1.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow w;
    w.show();
    return app.exec();
}
Правда надо еще раэобиратьсяся с алгоритмом рассчета и русской кодировкой в Buffer.sprintf().
« Последнее редактирование: Ноябрь 01, 2009, 14:26 от gmorgunov » Записан
Den2009
Гость
« Ответ #26 : Ноябрь 02, 2009, 11:09 »

спасибо большое...
я еще только учусь, поэтому иногда мне непонятно очевидное...
поэтому, хотелось бы узнать про некоторые строки подробнее
в proga1.h
Код:
MainWindow(QMainWindow* p = 0) : QMainWindow(p)
в proga1.cpp
Код:
#include <QtCore>
qDebug() << inSec;
float oH, oM; //почему формат исходящих часов и минут не int
Записан
Den2009
Гость
« Ответ #27 : Ноябрь 02, 2009, 11:33 »

проблему с кодировкой попытался решить описанным в книге методом:
Код:
QTextCodec *coder;
QTextCodec::codecForName("UTF8");
Result = coder->toUnicode(Buffer);
textEdit->setText(Result);
но почему-то не работает... появляется такая ошибка:
C:/Project/./proga1.cpp:32: error:  'QString QTextCodec::toUnicode(const QByteArray &) const' : cannot convert parameter 1 from 'QString' to 'const QByteArray &'

а алгоритм вычисления поправил:
Код:
//Вычисление
//Количество часов
oH = (iS / 3600);
//Убираем количество часов
notH = iS - (oH * SiH);
//Количество минут
oM = (notH / 60);
//Убираем количество минут
notM = notH - (oM * SiM);
oS = notM;
Записан
gmorgunov
Гость
« Ответ #28 : Ноябрь 02, 2009, 19:20 »

1)
Цитировать
MainWindow(QMainWindow* p = 0) : QMainWindow(p)
Ну это С++ (Передача параметров конструктору базового класса).
derived::derived(QMainWindow* param=0):base(param)
2) Вместо Buffer.sprintf() я бы использовал другой механизм:
Код:
QByteArray encodedString = "Введенное количество секунд ";
int seconds = 60;
QByteArray result;
result.setNum(seconds);
encodedString  +=  result;
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
Buffer = codec->toUnicode(encodedString);
textEdit->setText(Buffer);
Записан
Den2009
Гость
« Ответ #29 : Ноябрь 04, 2009, 12:10 »

сделал так:
Код:
QByteArray encodedString1 = "Введенное количество секунд ", encodedString2 = " соответствует ", encodedString3 = " часам, ", encodedString4 = " минутам, ", encodedString5 = " секундам.";
QByteArray result1, result2, result3, result4;
result1.setNum(iS);
result2.setNum(oH);
result3.setNum(oM);
result4.setNum(oS);
encodedString1  +=  result1 += encodedString2 += result2 += encodedString3 += result3 += encodedString4 += result4 +=encodedString5;
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
Buffer = codec->toUnicode(encodedString1);
textEdit->setText(Buffer);
нельзя ли как-нить укоротить это все?
Записан
Страниц: 1 [2] 3 4 ... 12   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 21.