Russian Qt Forum

Qt => Общие вопросы => Тема начата: Den2009 от Октябрь 29, 2009, 14:29



Название: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 29, 2009, 14:29
в общем, есть main.cpp
Код:
#include <QApplication>
#include "ui_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();
}
Ui_MainWindow::Ui_MainWindow()
{
connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
}
void Ui_MainWindow::rasschet()
{
далее процедура рассчета
}

есть ui_proga1.h
Код:
#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 QWidget
{
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;

    public slots:
    void rasschet();

    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
надо привязать pushButton к выполнению процедуры рассчета
на то, как сделал я, компилятор ругается так: 'Ui_MainWindow::Ui_MainWindow' : cannot define a compiler-generated special member function (must be declared in the class first)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Пантер от Октябрь 29, 2009, 17:59
Посмотри примеры, которые идут с кьютом, вопрос отпадет. И почитай какую-нибудь книжку.
По сабжу, нужно отнаследоваться от Ui::MainWindow и уже в том классе делать коннект.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 30, 2009, 10:21
Спасиб, конечно, что не готовый код выложил, а намекнул, где истину искать... Посмотрел примеры, почитал книжку, сделал так...
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();
}
MainWindow::MainWindow(QMainWindow *parent)
    : QMainWindow(parent)
{
QPushButton *pushButton = new QPushButton;
QSpinBox *spinBox = new QSpinBox;
QObject::connect(pushButton, SIGNAL(clicked()), spinBox, SLOT(rasschet()));
}
void MainWindow::rasschet()
{
тут будет сама процедура рассчета написана
}
ui_proga1.h
Код:
#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 QWidget
{
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

создал еще файл, подобный, как в примере
proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT

public:
    MainWindow(QMainWindow *parent = 0);

private slots:
    rasschet(int);
};

#endif

компилятор выдает такое:
c:\project\proga1.h:16: warning:  missing type specifier - int assumed. Note: C++ does not support default-int
c:\project\proga1.h:16: warning:  'rasschet': missing return type; assumed to be a member function returning 'int'
C:/Project/./main.cpp:21: error:  'void MainWindow::rasschet(void)' : overloaded member function not found in 'MainWindow'

Если в файле proga1.h вместо
private slots:
    rasschet(int);
написать
private slots:
    rasschet();
компилятор выдает первые 2 ошибки теже
C:/Project/./main.cpp:21: error:  'void MainWindow::rasschet(void)' : overloaded function differs only by return type from 'int MainWindow::rasschet(void)'
C:/Project/./main.cpp:21: error:  'MainWindow::rasschet' : redefinition; different basic types

че не так???


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 30, 2009, 10:35
сорри... сам ступил
надо вот так...
private slots:
   void rasschet();

компилится без ошибок, но при нажатии кнопки выполнить или дебаг в QTCreator вылазит такое окно:
(http://s40.radikal.ru/i090/0910/3e/704407df77de.jpg)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Пантер от Октябрь 30, 2009, 12:37
proga1.cpp
Код
C++ (Qt)
#include "proga1.h"
MainWindow::MainWindow(QMainWindow *parent)
   : QMainWindow(parent)
{
   QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
}
void MainWindow::rasschet()
{
тут будет сама процедура рассчета написана
}
 
main.cpp
Код
C++ (Qt)
#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();
}
 


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 12:41
Не получиться.
У камрада Den2009 pushButton определена в Ui::MainWindow.
В MainWindow доступа к ней нет:
Код
C++ (Qt)
MainWindow::MainWindow(QMainWindow *parent)
   : QMainWindow(parent)
{
   QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
}
 

А посмотреть примеры и создавать Ui::MainWindow в MainWindow или наследоваться от него он почему-то не хочет.  ;)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Пантер от Октябрь 30, 2009, 12:50
Мда... Давно я формы в дизайнере не клепал, подзабыл маленько.
Автору прочитать первые несколько глав любой книги по Кьюте.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 30, 2009, 14:03
Не получиться.
У камрада Den2009 pushButton определена в Ui::MainWindow.
В MainWindow доступа к ней нет:
Код
C++ (Qt)
MainWindow::MainWindow(QMainWindow *parent)
   : QMainWindow(parent)
{
   QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
}
 

А посмотреть примеры и создавать Ui::MainWindow в MainWindow или наследоваться от него он почему-то не хочет.  ;)

Почему не хочу? хочу... я и так на основе примера делал...
как создать Ui::MainWindow в MainWindow?
так?
Ui::MainWindow mainWindow;


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 14:13
Вариант 1
Код
C++ (Qt)
class MainWindow : public QMainWindow, public Ui::MainWindow
{
...
};
 
MainWindow::MainWindow()
{
setupUi( this );
connect( pushButton, SIGNAL( clicked() ), this, SLOT( rasschet() ) );
}
 

Вариант 2
Код
C++ (Qt)
class MainWindow : public QMainWindow
{
...
private:
Ui::MainWindow ui;
};
 
MainWindow::MainWindow()
{
ui.setupUi( this );
connect( ui.pushButton, SIGNAL( clicked() ), this, SLOT( rasschet() ) );
}
 


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 30, 2009, 14:34
получилось вот что:
proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT

private slots:
    void rasschet();
private:
        Ui::MainWindow ui;
};

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

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()
{
}
ошибки компилятора:
c:\project\proga1.h:17: error:  'MainWindow::MainWindow' : cannot define a compiler-generated special member function (must be declared in the class first)
c:\project\proga1.h:19: error:  ambiguous access of 'connect'
c:\project\proga1.h:19: error:  'argument' : ambiguous conversions from 'MainWindow *const ' to 'const QObject *'
c:\project\proga1.h:19: error:  'connect': identifier not found


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 14:40
proga1.h
Код
C++ (Qt)
#ifndef PROGA1_H
#define PROGA1_H
 
#include <QMainWindow>
#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
 

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();
}
 
void MainWindow::rasschet()
{
}
 

И скажи честно ты в файле ui_proga1.h руками ничего не добавлял?  ;)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 30, 2009, 14:48
вылезает тоже самое окно, скрин которого я выкладывал


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 14:52
вылезает тоже самое окно, скрин которого я выкладывал
Я не пойму, у тебя оно то компилируется, но завершается с ошибкой, то выдает это окно?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 30, 2009, 15:02
я вставил твой код вместо своего в proga1.h и в main.cpp
компилируется нормально, но при запуске вылазит окно которое на скрине...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 15:31
я вставил твой код вместо своего в proga1.h и в main.cpp
компилируется нормально, но при запуске вылазит окно которое на скрине...
Я вообще-то QtCreator'ом не пользуюсь.... Попробуй нажать "Обзор" рядом с полем "Программа" и найти свой экзешник.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 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 их раньше не создавал...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 15:44
А в каком файле ты ее написал? proga1.cpp?

А из файла main.cpp ты пустую функцию убрал?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 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()
{
далее описание
}


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 15:57
У тебя в двух местах конструктор MainWindow::MainWindow определен. В одном месте нужно его убрать.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 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


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 30, 2009, 16:04
Выкладывай все файлы проекта в текущем виде.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 30, 2009, 16:05
сделал так:
Код:
void::rasschet()

конструктор выдал только такую ошибку:
C:/Project/./main.cpp:13: error:  'rasschet' : is not a member of '`global namespace''


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 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
этот файл я не изменял


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Октябрь 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


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Октябрь 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 наблюдать за тем, присваивается ли переменной значение??


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 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().


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


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 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;


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 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);


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 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);
нельзя ли как-нить укоротить это все?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 04, 2009, 13:36
Можно, используя только QString:
Код:
#define tr  QObject::tr  
QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8"));
int seconds = 60;
int minutes  = 1;
textEdit->setText( tr("Введенное количество секунд ")+QString::number(seconds)  + tr(" соответствует ") \
                              + QString::number(minutes) + tr(" минуте " ));


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 04, 2009, 19:16
ок, спасибо


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 05, 2009, 20:23
теперь заморочки с этим: как из главного окна открыть другое окно?
в общем, есть форма, типа о программе
в меню главного окна есть кнопка "О программе"
сделал так:
proga1_about.h
Код:
#ifndef PROGA1_ABOUT_H
#define PROGA1_ABOUT_H
#include <QWidget>
#include <QObject>
#include "ui_proga1_about.h"

class about : public QWidget, Ui::About
{
        Q_OBJECT
public:
        QWidget *about = new QWidget;
};
#endif // PROGA1_ABOUT_H

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

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

class MainWindow : public QMainWindow, Ui::MainWindow // наследование от QMainWindow и Ui::MainWindow
{
        Q_OBJECT
public:
        MainWindow(QMainWindow* p = 0) : QMainWindow(p) //Передача параметров конструктору базового класса
    {
        setupUi(this);
        connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet()));
        connect(kn_about, SIGNAL(triggered()), &about, SLOT(OpenWindows()));
    }
public slots:
        void rasschet();
        void OpenWindows()
        {
            emit open();
        }
        void CloseWindows()
        {
            emit close();
        }
};
#endif

компилятор пишет
c:\project\proga1.h:17: error:  'about' : undeclared identifier
c:\project\proga1.h:17: error:  'about' : undeclared identifier

что я опять не так делаю?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Igors от Ноябрь 05, 2009, 21:20
class about : public QWidget, Ui::About
{
        Q_OBJECT
public:
        QWidget *about = new QWidget;
};
Так можно написать в теле функции (которая может быть в описании класса) но не "просто так в описании класса". Ну и что такое "about"? Имя класса или имя члена этого класса? Определитесь, например:

Код:
class MyAbout : public QWidget, Ui::About
{
        Q_OBJECT
        void Init( void ) { about = new QWidget(); }
public:
        QWidget *about;
};


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 05, 2009, 22:35
сделал так:
proga1_about.h
Код:
#ifndef PROGA1_ABOUT_H
#define PROGA1_ABOUT_H
#include <QWidget>
#include <QObject>
#include "ui_proga1_about.h"

class MyAbout : public QWidget, Ui::About
{
        Q_OBJECT
        void Init(void)
        {
            about = new QWidget();
        }
public:
        QWidget *about;
};
#endif // PROGA1_ABOUT_H

все равно выдает те же ошибки


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Igors от Ноябрь 06, 2009, 11:22
сделал так:
...
все равно выдает те же ошибки
Показываем весь файл proga1_about.h а еще лучше - выкладываем zip с проектом.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 06, 2009, 11:43
Привет.
Навскидку - нет setUi(this) в конструкторе MyAbout() , ну и конечно connect(...), если там есть, что соединять. Посмотреть бы ui_proga1_about.h для начала.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 06, 2009, 15:34
ui_proga1_about.h
Код:
/********************************************************************************
** Form generated from reading ui file 'proga1_about.ui'
**
** Created: Thu 5. Nov 20:09:36 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_ABOUT_H
#define UI_PROGA1_ABOUT_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_About
{
public:
    QPushButton *pushButton;
    QLabel *label;
    QLabel *label_2;

    void setupUi(QWidget *About)
    {
    if (About->objectName().isEmpty())
        About->setObjectName(QString::fromUtf8("About"));
    About->resize(290, 90);
    About->setMinimumSize(QSize(290, 90));
    About->setMaximumSize(QSize(290, 90));
    About->setStyleSheet(QString::fromUtf8(""));
    pushButton = new QPushButton(About);
    pushButton->setObjectName(QString::fromUtf8("pushButton"));
    pushButton->setGeometry(QRect(110, 60, 75, 23));
    label = new QLabel(About);
    label->setObjectName(QString::fromUtf8("label"));
    label->setGeometry(QRect(20, 10, 251, 16));
    label_2 = new QLabel(About);
    label_2->setObjectName(QString::fromUtf8("label_2"));
    label_2->setGeometry(QRect(20, 30, 231, 16));

    retranslateUi(About);
    QObject::connect(pushButton, SIGNAL(pressed()), About, SLOT(close()));

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

    void retranslateUi(QWidget *About)
    {
    About->setWindowTitle(QApplication::translate("About", "\320\236 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\265", 0, QApplication::UnicodeUTF8));
    pushButton->setText(QApplication::translate("About", "\320\227\320\260\320\272\321\200\321\213\321\202\321\214", 0, QApplication::UnicodeUTF8));
    label->setText(QApplication::translate("About", "\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\260 \320\277\320\265\321\200\320\265\320\262\320\276\320\264\320\270\321\202 \320\267\320\260\320\264\320\260\320\275\320\275\321\213\320\265 \321\201 \320\272\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\321\213", 0, QApplication::UnicodeUTF8));
    label_2->setText(QApplication::translate("About", "\321\201\320\265\320\272\321\203\320\275\320\264\321\213 \320\262 \320\262\320\270\320\264 \320\247\320\247:\320\234\320\234:\320\241\320\241", 0, QApplication::UnicodeUTF8));
    Q_UNUSED(About);
    } // retranslateUi

};

namespace Ui {
    class About: public Ui_About {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_PROGA1_ABOUT_H


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 06, 2009, 20:57
Собрал проект вот так:
main.cpp
Код:
#include <QApplication>
#include <QtCore>
#include <QTextCodec>
#include "proga2.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow w;
    w.show();
    return app.exec();
}
ui_proga2.h == 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(600, 600);
    MainWindow->setMinimumSize(QSize(385, 294));
    MainWindow->setMaximumSize(QSize(600, 600));
    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, 500, 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
proga2.h
Код:
#ifndef PROGA1_H
#define PROGA1_H

#include <QMainWindow>
#include <QObject>
#include "ui_proga2.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()));
        connect(action_6,      SIGNAL(triggered()), this, SLOT(about()));
    }
public slots:
        void rasschet();
        void about();
};

#endif
proga2.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui> 
#include "proga2.h"
#include "ui_proga2.h"
#include <QObject>
#define tr  QObject::tr

void MainWindow::rasschet()
{
QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8"));
int seconds = 60;
int minutes  = 1;
textEdit->setText( tr("Введенное количество секунд ")+QString::number(seconds)  + tr(" соответствует ") \
                              + QString::number(minutes) + tr(" минуте " ));
}
void MainWindow::about()
{
QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8"));
qDebug() << "about";
QMessageBox::about(this, tr("О программе"),
                                     tr(" <b>Программа</b> Демонстрирует перевод \
                                         секунд в ..." ));
}
Скопируйте в отдельную папку, посмотрите, может подойдет. Код рабочий, проверил. В прежней редакции почему-то
"не видит" класса MyAbout, хотя вроде все сделал правильно: отнаследовался от QWidget, setupUi(), создал слот about,
соединил с action_6, реализовал слот. С QWidget работает, а с MyAbout - нет. Посмотрю еще на свежую голову.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 07, 2009, 11:32
Разнес по разным файлам.Сделал главное окно немодальным и все заработало. :)
proga1.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui> 
#include "proga1.h"
#include "proga1_about.h"
void MainWindow::rasschet()
{
#define tr  QObject::tr 
QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8"));
int seconds = 60;
int minutes  = 1;
textEdit->setText( tr("Введенное количество секунд ")+QString::number(seconds)  + tr(" соответствует ") \
                              + QString::number(minutes) + tr(" минуте " ));
}
void MainWindow::about()
{
QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8"));
qDebug() << "MainWindow::about";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблоируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyAbout *myabout = new MyAbout;
myabout->show();
}
proga1_about.h
Код:
#ifndef PROGA1ABOUT_H
#define PROGA1ABOUT_H

#include <QWidget>

#include "ui_proga1_about.h"

class MyAbout : public QWidget, public Ui::About
{
    Q_OBJECT

public:
    MyAbout(QWidget *parent = 0);
};

#endif
proga1_about.cpp
Код:
#include <QtGui>
#include "proga1_about.h"

MyAbout::MyAbout(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(pushButton, SIGNAL(pressed()), this, SLOT(close()));
}


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 07, 2009, 13:12
спасибо, работает...
один вопрос (надеюсь, последний :)) по условию задания, надо, чтобы прога была на 2-х языках (русский и английский) как это реализовать?
у меня есть идея: создать такие же формы но на английском, и привязать их к переключалке рус/англ
есть ли другие варианты?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 07, 2009, 18:44
Почитал про интернализацию, ей надо хорошо владеть, чтобы пользоваться, а то будут сплошные косяки. Т.к. проект
небольшой, я бы поступил по-простому: завел бы extern bool RU, вставил ее во все файлы, где надо и проверял.
Например:
main.cpp
Код:
...
#include <QTextCodec>
#include "proga1.h"
extern bool RU=false;
ui_proga.h
Код:
 ...
#include <QtGui/QWidget>
extern bool RU;
QT_BEGIN_NAMESPACE
...
menu_2->addAction(action_4);
menu_2->addAction(action_5);

if (!RU)
    {
    pushButton->setText("Translate");
    pushButton_2->setText("close");
    }
    else
    retranslateUi(MainWindow);
QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(close()));
QObject::connect(action_Ctrl_Q, SIGNAL(triggered()), MainWindow, SLOT(close()));
С кнопками проверил, все работает.



Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 07, 2009, 23:06
хм... интересное решение проблемы... спс, буду пробовать


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 08, 2009, 00:06
В общем, возникла такая проблема:
В меню-баре у меня есть кнопка "Помощь" класс у нее QMenu
Мне надо переделать ее в QAction, либо сделать так, что бы при нажатии на нее вылезало окно помощи... пробовал подредактировать ui_proga1.h, но компилятор выдает сообщение, типа не могу переконвертировать QMenu в QAction


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 08, 2009, 12:46
Вам надо либо перепроектировать проект в дизайнере, либо поправить файлы ui_proga1.h, proga1.h, proga1.cpp.
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>

class Ui_MainWindow
{
public:
    QAction *action_4;
    QAction *action_5;
    QAction *action_6;
    QAction *action_7;
    QAction *action_Ctrl_Q;
////////////////////////////////////////////////
    QAction *aboutQtAct;
///////////////////////////////////////////////
    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(600, 600);
    MainWindow->setMinimumSize(QSize(385, 294));
    MainWindow->setMaximumSize(QSize(600, 600));
    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"));
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aboutQtAct = new QAction(MainWindow);
    aboutQtAct->setObjectName(QString::fromUtf8("aboutQtAct"));
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    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));
    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, 500, 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);
//////////////////////////////////////////////////////////////////////////////////////////////
    menu_3->addAction(aboutQtAct);
/////////////////////////////////////////////////////////////////////////////////////////////
   
    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));
    //////////////////////////////////
    aboutQtAct->setText(QApplication::translate("MainWindow", "\320\237\320\276\320\274\320\276\321\211\321\214", 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
proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QtGui>
#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()));
        connect(action_6,      SIGNAL(triggered()), this, SLOT(about()));
        connect(aboutQtAct, SIGNAL(triggered()), this, SLOT(aboutQt()));
    }
public slots:
        void rasschet();
        void about();
        void aboutQt();
};
#endif
proga1.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui> 
#include "proga1.h"
#include "proga1_about.h"

void MainWindow::rasschet()
{
#define tr  QObject::tr 
QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8"));
int seconds = 60;
int minutes  = 1;
textEdit->setText( tr("Введенное количество секунд ")+QString::number(seconds)  + tr(" соответствует ") \
                              + QString::number(minutes) + tr(" минуте " ));
}
void MainWindow::about()
{
QTextCodec::setCodecForTr( QTextCodec::codecForName("UTF-8"));
qDebug() << "MainWindow::about";
qDebug() << this->isModal();
this->setWindowModality(Qt::NonModal);
MyAbout *myabout = new MyAbout;
myabout->show();
}
void MainWindow::aboutQt()
{
qDebug() << "It's slot aboutQt";
QMessageBox::about(this,  tr("Qt"),  tr("Qt Trolltech - Nokia."));
}


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 08, 2009, 14:58
это все понятно... мне хотелось бы, чтоб при нажатии на кнопку помощь не было выпадающего меню, а сразу же открывалось окно помощи...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 08, 2009, 18:47
Можно и так. Из ui_proga1.h уберите вставки(////), и :
proga1.h
Код:
...
 connect(menu_3, SIGNAL(aboutToShow()), this, SLOT(f()));
    }
public slots:
        void rasschet();
        void about();
        void aboutQt();
        void f();
proga1.cpp
Код:
...
void MainWindow::aboutQt()
{
qDebug() << "It's slot aboutQt";
QMessageBox::about(this,  tr("Qt"),  tr("Qt Trolltech - Nokia."));
}
void MainWindow:: f()
{
   MainWindow::aboutQt();
}


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 08, 2009, 20:29
Проверил, как следует, работает не так, как нужно. Кстати f() - лишняя, можно и без нее.
Код:
connect(menu_3, SIGNAL(aboutToHide()), this, SLOT(aboutQt()));
Работает лучше, но тоже не совсем верно.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 08, 2009, 22:56
относительно работает... поищу в книгах, мож там есть решение проблемы...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 09, 2009, 00:04
В общем все ясно. В menubar (ui_proga1.h) вы создали menu_3, которое не нужно.Просто QAction* aboutQtAct добавляем в
 menubar и соединяем со слотом aboutQt. Так все работает правильно.
Чтобы не запутаться привожу весь ui_proga1.h
Код:
#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>

class Ui_MainWindow
{
public:
    QAction *action_4;
    QAction *action_5;
    QAction *action_6;
    QAction *action_7;
    QAction *action_Ctrl_Q;
QAction *aboutQtAct;
    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(600, 600);
    MainWindow->setMinimumSize(QSize(385, 294));
    MainWindow->setMaximumSize(QSize(600, 600));
    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"));
aboutQtAct = new QAction(MainWindow);  aboutQtAct->setObjectName(QString::fromUtf8("aboutQtAct"));
    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));
    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, 500, 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());
menubar->addAction(aboutQtAct);
    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));

aboutQtAct->setText(QApplication::translate("MainWindow", "\320\237\320\276\320\274\320\276\321\211\321\214", 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
proga1.h
Код:
...
 connect(aboutQtAct, SIGNAL(triggered()), this, SLOT(aboutQt()));


Название: Re: Помогите новичку (совсем новичку)
Отправлено: mattic от Ноябрь 13, 2009, 08:57
Ну я так понял, все проблемы по этой программе уже решили. Выложите пожалуйста в архиве финальную версию. А то тут каждый файл по сто раз переписывался разными людьми, не понятно какой вариант последний и рабочий.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Firefox от Ноябрь 13, 2009, 13:24
Как новичок тоже, советую тебе установить вижуал студио, тудa интегрировать Qt, и пока не копаться в том что делается автоматически.например в хидере формы. Все свойства объектов наносимых на форму можно задать в дизайнере.тогда будешь отрабатывать только свои алгоритмы решения задачи. а потом когда разберёшься с тем как работать в дизайнере с элементами, можно будет и в дебри лезть. По крайне мере мне кажется что так лучше.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 19, 2009, 01:33
Ну я так понял, все проблемы по этой программе уже решили. Выложите пожалуйста в архиве финальную версию. А то тут каждый файл по сто раз переписывался разными людьми, не понятно какой вариант последний и рабочий.
не совсем...
в окне об авторе должно быть фото. когда открываю форму в дизайнере - есть, после сборки и запуска проекта - нет
resources.qrc
Код:
<RCC>
  <qresource prefix="photo" >
    <file>000000.jpeg</file>
  </qresource>
</RCC>

proga1_author.ui
Код:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Author</class>
 <widget class="QWidget" name="Author">
  <property name="enabled">
   <bool>true</bool>
  </property>
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>300</width>
    <height>220</height>
   </rect>
  </property>
  <property name="minimumSize">
   <size>
    <width>300</width>
    <height>200</height>
   </size>
  </property>
  <property name="maximumSize">
   <size>
    <width>300</width>
    <height>220</height>
   </size>
  </property>
  <property name="sizeIncrement">
   <size>
    <width>0</width>
    <height>0</height>
   </size>
  </property>
  <property name="windowTitle">
   <string>Об авторе</string>
  </property>
  <property name="styleSheet">
   <string notr="true">image: url(:/photo/000000.jpeg);</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>110</x>
     <y>180</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>Закрыть</string>
   </property>
  </widget>
  <widget class="QLabel" name="label">
   <property name="geometry">
    <rect>
     <x>170</x>
     <y>0</y>
     <width>101</width>
     <height>16</height>
    </rect>
   </property>
   <property name="text">
    <string>Автор программы: </string>
   </property>
  </widget>
  <widget class="QLabel" name="label_2">
   <property name="geometry">
    <rect>
     <x>150</x>
     <y>30</y>
     <width>131</width>
     <height>16</height>
    </rect>
   </property>
   <property name="text">
    <string>Денис Михайлович</string>
   </property>
  </widget>
  <widget class="QLabel" name="label_3">
   <property name="geometry">
    <rect>
     <x>150</x>
     <y>50</y>
     <width>121</width>
     <height>16</height>
    </rect>
   </property>
   <property name="text">
    <string>студент группы ВМ-21</string>
   </property>
  </widget>
  <widget class="QLabel" name="label_4">
   <property name="geometry">
    <rect>
     <x>190</x>
     <y>140</y>
     <width>46</width>
     <height>14</height>
    </rect>
   </property>
   <property name="text">
    <string>2009 год</string>
   </property>
  </widget>
  <widget class="QGraphicsView" name="graphicsView">
   <property name="enabled">
    <bool>true</bool>
   </property>
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>140</width>
     <height>148</height>
    </rect>
   </property>
   <property name="minimumSize">
    <size>
     <width>140</width>
     <height>148</height>
    </size>
   </property>
   <property name="maximumSize">
    <size>
     <width>140</width>
     <height>148</height>
    </size>
   </property>
   <property name="acceptDrops">
    <bool>true</bool>
   </property>
   <property name="toolTip">
    <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/photo/000000.jpeg&quot; /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
   </property>
   <property name="whatsThis">
    <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/photo/000000.jpeg&quot; /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
   </property>
   <property name="autoFillBackground">
    <bool>false</bool>
   </property>
   <property name="styleSheet">
    <string notr="true">background-image: url(:/photo/000000.jpeg);</string>
   </property>
   <property name="lineWidth">
    <number>0</number>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>pushButton</sender>
   <signal>pressed()</signal>
   <receiver>Author</receiver>
   <slot>close()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>137</x>
     <y>191</y>
    </hint>
    <hint type="destinationlabel">
     <x>142</x>
     <y>105</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>

ui_proga1_author.h
Код:
/********************************************************************************
** Form generated from reading ui file 'proga1_author.ui'
**
** Created: Thu 19. Nov 01:20: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_AUTHOR_H
#define UI_PROGA1_AUTHOR_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGraphicsView>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Author
{
public:
    QPushButton *pushButton;
    QLabel *label;
    QLabel *label_2;
    QLabel *label_3;
    QLabel *label_4;
    QGraphicsView *graphicsView;

    void setupUi(QWidget *Author)
    {
    if (Author->objectName().isEmpty())
        Author->setObjectName(QString::fromUtf8("Author"));
    Author->setEnabled(true);
    Author->resize(300, 220);
    Author->setMinimumSize(QSize(300, 200));
    Author->setMaximumSize(QSize(300, 220));
    Author->setSizeIncrement(QSize(0, 0));
    Author->setStyleSheet(QString::fromUtf8("image: url(:/photo/000000.jpeg);"));
    pushButton = new QPushButton(Author);
    pushButton->setObjectName(QString::fromUtf8("pushButton"));
    pushButton->setGeometry(QRect(110, 180, 75, 23));
    label = new QLabel(Author);
    label->setObjectName(QString::fromUtf8("label"));
    label->setGeometry(QRect(170, 0, 101, 16));
    label_2 = new QLabel(Author);
    label_2->setObjectName(QString::fromUtf8("label_2"));
    label_2->setGeometry(QRect(150, 30, 131, 16));
    label_3 = new QLabel(Author);
    label_3->setObjectName(QString::fromUtf8("label_3"));
    label_3->setGeometry(QRect(150, 50, 121, 16));
    label_4 = new QLabel(Author);
    label_4->setObjectName(QString::fromUtf8("label_4"));
    label_4->setGeometry(QRect(190, 140, 46, 14));
    graphicsView = new QGraphicsView(Author);
    graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
    graphicsView->setEnabled(true);
    graphicsView->setGeometry(QRect(0, 0, 140, 148));
    graphicsView->setMinimumSize(QSize(140, 148));
    graphicsView->setMaximumSize(QSize(140, 148));
    graphicsView->setAcceptDrops(true);
    graphicsView->setAutoFillBackground(false);
    graphicsView->setStyleSheet(QString::fromUtf8("background-image: url(:/photo/000000.jpeg);"));
    graphicsView->setLineWidth(0);

    retranslateUi(Author);
    QObject::connect(pushButton, SIGNAL(pressed()), Author, SLOT(close()));

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

    void retranslateUi(QWidget *Author)
    {
    Author->setWindowTitle(QApplication::translate("Author", "\320\236\320\261 \320\260\320\262\321\202\320\276\321\200\320\265", 0, QApplication::UnicodeUTF8));
    pushButton->setText(QApplication::translate("Author", "\320\227\320\260\320\272\321\200\321\213\321\202\321\214", 0, QApplication::UnicodeUTF8));
    label->setText(QApplication::translate("Author", "\320\220\320\262\321\202\320\276\321\200 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\321\213: ", 0, QApplication::UnicodeUTF8));
    label_2->setText(QApplication::translate("Author", "\320\234\321\203\321\205\320\270\320\275 \320\224\320\265\320\275\320\270\321\201 \320\234\320\270\321\205\320\260\320\271\320\273\320\276\320\262\320\270\321\207", 0, QApplication::UnicodeUTF8));
    label_3->setText(QApplication::translate("Author", "\321\201\321\202\321\203\320\264\320\265\320\275\321\202 \320\263\321\200\321\203\320\277\320\277\321\213 \320\222\320\234-21", 0, QApplication::UnicodeUTF8));
    label_4->setText(QApplication::translate("Author", "2009 \320\263\320\276\320\264", 0, QApplication::UnicodeUTF8));

#ifndef QT_NO_TOOLTIP
    graphicsView->setToolTip(QApplication::translate("Author", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/photo/000000.jpeg\" /></p></body></html>", 0, QApplication::UnicodeUTF8));
#endif // QT_NO_TOOLTIP


#ifndef QT_NO_WHATSTHIS
    graphicsView->setWhatsThis(QApplication::translate("Author", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/photo/000000.jpeg\" /></p></body></html>", 0, QApplication::UnicodeUTF8));
#endif // QT_NO_WHATSTHIS

    Q_UNUSED(Author);
    } // retranslateUi

};

namespace Ui {
    class Author: public Ui_Author {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_PROGA1_AUTHOR_H

proga1_author.cpp
Код:
#include <QtGui>
#include "proga1_author.h"

MyAuthor::MyAuthor(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(pushButton, SIGNAL(pressed()), this, SLOT(close()));
}

и еще... по заданию надо написать log файл, так вот, что там должно отображаться??
а то я кроме времени запуска, введенных значений, результата вычисления и времени закрытия не знаю что и написать


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Ноябрь 19, 2009, 09:39
и еще... по заданию надо написать log файл, так вот, что там должно отображаться??
а то я кроме времени запуска, введенных значений, результата вычисления и времени закрытия не знаю что и написать
;D
Пиши в нем все, что только можно:
* создание главного окна программы
* создание ... элемента управления
* запуск цикла обработки событий
* ....
* разрушение главного окна программы
* остановка


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 19, 2009, 20:37
По поводу фото: измените resources.qrc:
Код:
<RCC>
  <qresource>
    <file>photo/000000.jpeg</file>
  </qresource>
</RCC>
Проверил, у меня все показывает . Естественно создайте папку photo и положите туда 000000.jpeg.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 20, 2009, 23:27
не работает.... пустое белое окно... до того, как пересобрал QT с такими параметрами: configure -static -debug-and-release
было нормально... может в этом дело??


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 21, 2009, 02:06
Все может быть. Попробуйте поменять свою картинку на  lena.jpg.(известная тестовая картинка - google lena.jpg) Поиском по всем файлам проекта найдите контекст 000000.jpeg и поменяйте на lena.jpg. Там всего 5 строк.
Я тестировал именно с lena.jpg.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 21, 2009, 11:48
не показывает... в дизайнере тоже не показывает... показывает пустое окно и все...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 21, 2009, 12:00
счас попробовал создать новую форму в дизайнере... если использовать цвет или градиент - все нормально... ставлю картинку - пустое белое окно...  ???


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Hellraiser от Ноябрь 21, 2009, 14:38
не работает.... пустое белое окно... до того, как пересобрал QT с такими параметрами: configure -static -debug-and-release
было нормально... может в этом дело??
А при статической сборке Qt ключик -qt-libjpeg указать?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 21, 2009, 23:32
не помогло... делаю make confclean - все нормально, собираю - не показывает картинки


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 22, 2009, 00:37
в общем, переустановил КуТэ, затем собрал, в дизайнере изображения показывает, но скомпилировать не получается: компилятор выдает такое окно и ЕХЕ файл не создается
(http://www.imageup.ru/img83/00213617.jpg)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 22, 2009, 11:49
Посмотрите эдесь:http://prog.org.ru/wiki/index.php?title=Сборка_Qt_без_зависимостей_(MinGW) (http://prog.org.ru/wiki/index.php?title=Сборка_Qt_без_зависимостей_(MinGW)).


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 22, 2009, 13:25
сделал все, как там - все равно компилятор выдает такую ошибку:
Код:
Выполняется сборка проекта Project...
Настройки не изменились, этап QMake пропускается.
Запускается: C:/MinGW/bin/mingw32-make.exe -w
mingw32-make: Entering directory `C:/Project'
c:\Qt\4.4.3\bin\qmake.exe -spec ..\Qt\4.4.3\mkspecs\win32-g++ -win32 -o Makefile Project.pro
mingw32-make: Leaving directory `C:/Project'
mingw32-make: Entering directory `C:/Project'
C:/MinGW/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Project'
g++ -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\Project.exe object_script.Project.Debug -L"c:\Qt\4.4.3\lib" -lmingw32 -lqtmaind -lQtGuid -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCored -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
mingw32-make[1]: Leaving directory `C:/Project'
mingw32-make: Leaving directory `C:/Project'
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lQtGuid
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\Project.exe] Error 1
mingw32-make: *** [debug] Error 2
Завершено с кодом возврата 2.
Ошибка во время сборки проекта Project
Во время выполнения сборки на этапе 'Make'
и не создается ехе файл

как я понял, компилятор не находит библиотеку QtGuid.lib, хотя она лежит там же, где и остальные, в папке QT\4.4.3\lib


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 22, 2009, 14:22
Вы за это время успели пересобрать Qt ??? Там же: Все действия проводим до конфигурирования командой configure!.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 22, 2009, 14:37
дак да... сначала make confclean, затем, т.к. у меня 4.4.3, то
Код:
Отредактируйте <QTDIR>\mkspecs\win32-g++\qmake.conf: таким образом:

1. Замените

    QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc

на (add -static)

    QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc

и затем configure -static -debug-and-release -qt-libjpeg -qt-libpng
потом на запрос о соглашении жму у, потом на просьбу ввести mingw32-make ввожу, и жду примерно час


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 22, 2009, 21:24
У меня Linux, так что могу только по аналогии... Посмотрите здесь:http://www.prog.org.ru/topic_10973_0.html
 (http://www.prog.org.ru/topic_10973_0.html). Как у вас стат. либа QtGui называется? В Linux - libQtGui.a. Если не получится, как в ссылке можно попробовать положить стат. либы в проект, ну и добавить в .pro файл.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 24, 2009, 01:03
вобщем, после сборки КуТэ появляется такой отсчет:
http://www.imageup.ru/img65/01214671.jpg (http://www.imageup.ru/img65/01214671.jpg)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Ноябрь 24, 2009, 21:42
Возможно вы не сделали вот этого:
Цитировать
Установка библиотеки Qt

Вам понадобится приблизительно 2 ГиБ на диске, каталог для установки выбирайте так, чтобы путь не содержал пробелов и кирилицы. Распакуйте архив с исходниками в каталог, например disk:\QT\QTVER, где QTVER - версия библиотек (например, 4.3.4).
Далее этот каталог мы будем называть <QTDIR>.
[править]
Конфигурация

Теперь нужно провести конфигурацию, т.е. создать файлы проекта *.pro и мэйкфайлы для конкретного компилятора. Как я говорил в предисловии, пользоваться будем bat-файлом. В каталоге <QTDIR> создайте bat-файл для запуска командной строки в нужном нам окружении. Назовите его по версии Qt, например, qt432.bat, вот его текст:
SET QTDIR=<QTDIR>
SET MINGWDIR=<MINGWDIR>
SET QMAKESPEC=win32-g++
 
SET PATH=%QTDIR%\bin;%MINGWDIR%\bin;%SystemRoot%\System32
 
cmd.exe
...
Полностью можно посмотреть здесь:
http://www.wiki.crossplatform.ru/index.php/Сборка_Qt_с_использованием_MinGW32 (http://www.wiki.crossplatform.ru/index.php/Сборка_Qt_с_использованием_MinGW32)



Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Ноябрь 25, 2009, 11:08
да нет, я собирал как там написано...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 04, 2009, 19:11
тексты:
main.cpp
Код:
#include <QApplication>
#include <QtPlugin>
#include "proga1.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow w;
    w.show();
    return app.exec();
}
proga1.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui>
#include "proga1.h"
#include "proga1_about.h"
#include "proga1_author.h"
#include "proga1_help.h"
#define tr QObject::tr

void MainWindow::rasschet()
{
int iS,  oS, notH, notM;  //Объявление переменных
float oH, oM; //Объявление переменных
const int SiH=3600, SiM=60;
QString inSec, outHr, outMin, outSec;
textEdit->clear();
inSec = spinBox->text(); //Ввод
qDebug() << inSec;
iS = inSec.toInt();
qDebug() << iS;
//Вычисление
oH = (iS / SiH); //Количество часов
notH = iS - (oH * SiH); //Убираем количество часов
oM = (notH / SiM); //Количество минут
notM = notH - (oM * SiM); //Убираем количество минут
oS = notM; //Оставшееся число равно количеству секунд
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
textEdit->setText(tr("Введенное количество секунд ")+QString::number(iS)  + tr(" соответствует ") + QString::number(oH) + tr(" часам, " ) + QString::number(oM) + tr(" минутам, ") + QString::number(oS) + tr(" секундам"));
}
void MainWindow::about()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::about";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблокируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyAbout *myabout = new MyAbout;
myabout->show();
}

void MainWindow::help()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::help";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблокируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyHelp *myhelp = new MyHelp;
myhelp->show();
}

void MainWindow::author()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::author";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблокируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyAuthor *myauthor = new MyAuthor;
myauthor->show();
}
proga1_about.cpp
Код:
#include <QtGui>
#include "proga1_about.h"

MyAbout::MyAbout(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(pushButton, SIGNAL(pressed()), this, SLOT(close()));
}
proga1_author.cpp
Код:
#include <QtGui>
#include "proga1_author.h"

MyAuthor::MyAuthor(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(pushButton, SIGNAL(pressed()), this, SLOT(close()));
}
proga1_help.cpp
Код:
#include <QtGui>
#include "proga1_help.h"

MyHelp::MyHelp(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(pushButton, SIGNAL(clicked()), this, SLOT(close()));
}
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())); //подключаем кнопку рассчет
        connect(kn_about, SIGNAL(triggered()), this, SLOT(about())); // подключаем кнопку о программе
        connect(kn_help, SIGNAL(triggered()), this, SLOT(help())); //подключаем кнопку помощь
        connect(kn_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
    }
public slots:
        void rasschet(); // создаем слот рассчет
        void about(); // создаем слот о программе
        void help(); // создаем слот помощь
        void author(); // создаем слот об авторе
};

#endif
proga1_about.h
Код:
#ifndef PROGA1ABOUT_H
#define PROGA1ABOUT_H
#include <QWidget>
#include "ui_proga1_about.h"

class MyAbout : public QWidget, public Ui::About
{
    Q_OBJECT

public:
    MyAbout(QWidget *parent = 0);
};

#endif
proga1_author.h
Код:
#ifndef PROGA1AUTHOR_H
#define PROGA1AUTHOR_H
#include <QWidget>
#include "ui_proga1_author.h"

class MyAuthor : public QWidget, public Ui::Author
{
    Q_OBJECT

public:
    MyAuthor(QWidget *parent = 0);
};

#endif // PROGA1_AUTHOR_H
proga1_help.h
Код:
#ifndef PROGA1HELP_H
#define PROGA1HELP_H
#include <QWidget>
#include "ui_proga1_help.h"

class MyHelp : public QWidget, public Ui::Help
{
    Q_OBJECT

public:
    MyHelp(QWidget *parent = 0);
};

#endif // PROGA1_HELP_H


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 04, 2009, 20:22
Не хватает:
ui_proga1.h
ui_proga1_about.h
ui_proga1_author.h
ui_proga1_help.h
Эти файлы вы из креатора не увидите, надо в редакторе. Но пока я буду смотреть, проверьте третий пункт горизонтального меню(помощь), что вы с чем соединяете в дизайнере.
Ошибся, нужны:
proga1.ui
proga1_about.ui
proga1_author.ui
proga1_help.ui


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 05, 2009, 00:06
proga1.ui
Код:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <ui version="4.0">
  <class>MainWindow</class>
- <widget class="QMainWindow" name="MainWindow">
- <property name="windowModality">
  <enum>Qt::ApplicationModal</enum>
  </property>
- <property name="enabled">
  <bool>true</bool>
  </property>
- <property name="geometry">
- <rect>
  <x>0</x>
  <y>0</y>
  <width>385</width>
  <height>294</height>
  </rect>
  </property>
- <property name="minimumSize">
- <size>
  <width>385</width>
  <height>294</height>
  </size>
  </property>
- <property name="maximumSize">
- <size>
  <width>385</width>
  <height>294</height>
  </size>
  </property>
- <property name="windowTitle">
  <string>Программа №1 :)</string>
  </property>
- <widget class="QWidget" name="centralwidget">
- <widget class="QSpinBox" name="spinBox">
- <property name="geometry">
- <rect>
  <x>50</x>
  <y>40</y>
  <width>161</width>
  <height>22</height>
  </rect>
  </property>
- <property name="font">
- <font>
  <family>Segoe Script</family>
  <pointsize>10</pointsize>
  </font>
  </property>
- <property name="mouseTracking">
  <bool>false</bool>
  </property>
- <property name="acceptDrops">
  <bool>false</bool>
  </property>
- <property name="whatsThis">
  <string extracomment="Введите число" />
  </property>
- <property name="maximum">
  <number>999999999</number>
  </property>
  </widget>
- <widget class="QTextEdit" name="textEdit">
- <property name="geometry">
- <rect>
  <x>50</x>
  <y>110</y>
  <width>301</width>
  <height>71</height>
  </rect>
  </property>
- <property name="readOnly">
  <bool>true</bool>
  </property>
  </widget>
- <widget class="QPushButton" name="pushButton">
- <property name="geometry">
- <rect>
  <x>250</x>
  <y>40</y>
  <width>101</width>
  <height>21</height>
  </rect>
  </property>
- <property name="text">
  <string>Рассчитать</string>
  </property>
  </widget>
- <widget class="QPushButton" name="pushButton_2">
- <property name="geometry">
- <rect>
  <x>160</x>
  <y>210</y>
  <width>75</width>
  <height>23</height>
  </rect>
  </property>
- <property name="text">
  <string>Выход</string>
  </property>
  </widget>
- <widget class="QLabel" name="label">
- <property name="geometry">
- <rect>
  <x>50</x>
  <y>20</y>
  <width>151</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>Введите количество секунд</string>
  </property>
  </widget>
- <widget class="QLabel" name="label_2">
- <property name="geometry">
- <rect>
  <x>50</x>
  <y>90</y>
  <width>151</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>Результат работы программы</string>
  </property>
  </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar" />
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
  <x>0</x>
  <y>0</y>
  <width>385</width>
  <height>21</height>
  </rect>
  </property>
- <widget class="QMenu" name="menu">
- <property name="title">
  <string>Файл</string>
  </property>
  <addaction name="kn_about" />
  <addaction name="kn_author" />
  <addaction name="kn_exit" />
  </widget>
- <widget class="QMenu" name="menu_2">
- <property name="title">
  <string>Язык</string>
  </property>
  <addaction name="kn_rus" />
  <addaction name="kn_eng" />
  </widget>
- <widget class="QMenu" name="menu_3">
- <property name="title">
  <string>Справка</string>
  </property>
  <addaction name="kn_help" />
  <addaction name="kn_log" />
  </widget>
  <addaction name="menu" />
  <addaction name="menu_2" />
  <addaction name="menu_3" />
  </widget>
- <action name="kn_rus">
- <property name="checkable">
  <bool>true</bool>
  </property>
- <property name="checked">
  <bool>true</bool>
  </property>
- <property name="text">
  <string>Русский</string>
  </property>
  </action>
- <action name="kn_eng">
- <property name="checkable">
  <bool>true</bool>
  </property>
- <property name="text">
  <string>Английский</string>
  </property>
  </action>
- <action name="kn_about">
- <property name="text">
  <string>О программе</string>
  </property>
  </action>
- <action name="kn_author">
- <property name="text">
  <string>Об авторе</string>
  </property>
  </action>
- <action name="kn_exit">
- <property name="text">
  <string>Выход</string>
  </property>
  </action>
- <action name="kn_help">
- <property name="text">
  <string>Помощь</string>
  </property>
  </action>
- <action name="kn_log">
- <property name="text">
  <string>Открыть log-файл</string>
  </property>
  </action>
  </widget>
- <tabstops>
  <tabstop>spinBox</tabstop>
  <tabstop>pushButton</tabstop>
  <tabstop>textEdit</tabstop>
  <tabstop>pushButton_2</tabstop>
  </tabstops>
  <resources />
- <connections>
- <connection>
  <sender>pushButton_2</sender>
  <signal>clicked()</signal>
  <receiver>MainWindow</receiver>
  <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
  <x>197</x>
  <y>243</y>
  </hint>
- <hint type="destinationlabel">
  <x>192</x>
  <y>146</y>
  </hint>
  </hints>
  </connection>
- <connection>
  <sender>kn_exit</sender>
  <signal>triggered()</signal>
  <receiver>MainWindow</receiver>
  <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
  <x>-1</x>
  <y>-1</y>
  </hint>
- <hint type="destinationlabel">
  <x>192</x>
  <y>146</y>
  </hint>
  </hints>
  </connection>
  </connections>
  </ui>
proga1_about.ui
Код:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <ui version="4.0">
  <class>About</class>
- <widget class="QWidget" name="About">
- <property name="geometry">
- <rect>
  <x>0</x>
  <y>0</y>
  <width>290</width>
  <height>90</height>
  </rect>
  </property>
- <property name="minimumSize">
- <size>
  <width>290</width>
  <height>90</height>
  </size>
  </property>
- <property name="maximumSize">
- <size>
  <width>290</width>
  <height>90</height>
  </size>
  </property>
- <property name="windowTitle">
  <string>О программе</string>
  </property>
- <property name="styleSheet">
  <string notr="true" />
  </property>
- <widget class="QPushButton" name="pushButton">
- <property name="geometry">
- <rect>
  <x>110</x>
  <y>60</y>
  <width>75</width>
  <height>23</height>
  </rect>
  </property>
- <property name="text">
  <string>Закрыть</string>
  </property>
  </widget>
- <widget class="QLabel" name="label">
- <property name="geometry">
- <rect>
  <x>20</x>
  <y>10</y>
  <width>251</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>Программа переводит заданные с клавиатуры</string>
  </property>
  </widget>
- <widget class="QLabel" name="label_2">
- <property name="geometry">
- <rect>
  <x>20</x>
  <y>30</y>
  <width>231</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>секунды в вид ЧЧ:ММ:СС</string>
  </property>
  </widget>
  </widget>
  <resources />
- <connections>
- <connection>
  <sender>pushButton</sender>
  <signal>pressed()</signal>
  <receiver>About</receiver>
  <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
  <x>147</x>
  <y>71</y>
  </hint>
- <hint type="destinationlabel">
  <x>145</x>
  <y>45</y>
  </hint>
  </hints>
  </connection>
  </connections>
  </ui>
proga1_author.ui
Код:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <ui version="4.0">
  <class>Author</class>
- <widget class="QWidget" name="Author">
- <property name="enabled">
  <bool>true</bool>
  </property>
- <property name="geometry">
- <rect>
  <x>0</x>
  <y>0</y>
  <width>300</width>
  <height>220</height>
  </rect>
  </property>
- <property name="minimumSize">
- <size>
  <width>300</width>
  <height>200</height>
  </size>
  </property>
- <property name="maximumSize">
- <size>
  <width>300</width>
  <height>220</height>
  </size>
  </property>
- <property name="sizeIncrement">
- <size>
  <width>0</width>
  <height>0</height>
  </size>
  </property>
- <property name="windowTitle">
  <string>Об авторе</string>
  </property>
- <property name="styleSheet">
  <string notr="true" />
  </property>
- <widget class="QPushButton" name="pushButton">
- <property name="geometry">
- <rect>
  <x>110</x>
  <y>180</y>
  <width>75</width>
  <height>23</height>
  </rect>
  </property>
- <property name="text">
  <string>Закрыть</string>
  </property>
  </widget>
- <widget class="QLabel" name="label">
- <property name="geometry">
- <rect>
  <x>170</x>
  <y>0</y>
  <width>101</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>Автор программы:</string>
  </property>
  </widget>
- <widget class="QLabel" name="label_2">
- <property name="geometry">
- <rect>
  <x>150</x>
  <y>30</y>
  <width>131</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>Мухин Денис Михайлович</string>
  </property>
  </widget>
- <widget class="QLabel" name="label_3">
- <property name="geometry">
- <rect>
  <x>150</x>
  <y>50</y>
  <width>121</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>студент группы ВМ-21</string>
  </property>
  </widget>
- <widget class="QLabel" name="label_4">
- <property name="geometry">
- <rect>
  <x>190</x>
  <y>140</y>
  <width>46</width>
  <height>14</height>
  </rect>
  </property>
- <property name="text">
  <string>2009 год</string>
  </property>
  </widget>
- <widget class="QGraphicsView" name="graphicsView">
- <property name="geometry">
- <rect>
  <x>0</x>
  <y>0</y>
  <width>141</width>
  <height>161</height>
  </rect>
  </property>
- <property name="autoFillBackground">
  <bool>false</bool>
  </property>
- <property name="styleSheet">
  <string notr="true">background-image: url(:/photo/000000.jpeg);</string>
  </property>
  </widget>
  </widget>
- <resources>
  <include location="res.qrc" />
  </resources>
- <connections>
- <connection>
  <sender>pushButton</sender>
  <signal>pressed()</signal>
  <receiver>Author</receiver>
  <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
  <x>137</x>
  <y>191</y>
  </hint>
- <hint type="destinationlabel">
  <x>142</x>
  <y>105</y>
  </hint>
  </hints>
  </connection>
  </connections>
  </ui>
proga1_help.ui
Код:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <ui version="4.0">
  <class>Help</class>
- <widget class="QWidget" name="Help">
- <property name="geometry">
- <rect>
  <x>0</x>
  <y>0</y>
  <width>321</width>
  <height>294</height>
  </rect>
  </property>
- <property name="windowTitle">
  <string>Помощь</string>
  </property>
- <widget class="QPushButton" name="pushButton">
- <property name="geometry">
- <rect>
  <x>120</x>
  <y>260</y>
  <width>75</width>
  <height>23</height>
  </rect>
  </property>
- <property name="text">
  <string>Закрыть</string>
  </property>
  </widget>
- <widget class="QTextEdit" name="textEdit">
- <property name="geometry">
- <rect>
  <x>20</x>
  <y>10</y>
  <width>281</width>
  <height>241</height>
  </rect>
  </property>
- <property name="readOnly">
  <bool>true</bool>
  </property>
  </widget>
  </widget>
  <resources />
- <connections>
- <connection>
  <sender>pushButton</sender>
  <signal>clicked()</signal>
  <receiver>Help</receiver>
  <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
  <x>167</x>
  <y>281</y>
  </hint>
- <hint type="destinationlabel">
  <x>160</x>
  <y>146</y>
  </hint>
  </hints>
  </connection>
  </connections>
  </ui>


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 05, 2009, 00:13
в общем, запустил отладчик в креаторе, и вот что он мне выдал:
(http://www.imageup.ru/img76/00221927.jpg)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 05, 2009, 02:00
Одну ошибку(не вашу) нашел. Файл proga1.ui (xml) имел страный вид. Встречались такие теги:
Код:
- <ui version="4.0">
Со знаком минус "-" и их довольно много.До правки выдавала:  proga1.ui  is not valid . Поправил вручную в редакторе, выдает на следущем файле proga1_about.ui. Вывод: поправить вручную все файлы .ui и make. Посмотрим, что будет дальше.
p.s. До этого Win концы строк \r\n замнил на Linux - \n.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 05, 2009, 09:01
а на что их исправить надо?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 05, 2009, 12:47
Вам править ui-файлы не надо. Скорее всего они  повредились при передаче. У меня после правки этих(ui) все собралось, работает. Покажите свой Makefile. Есть подозрение, что все libgcc.a от minGW
надо прописывать в pro-файле явно и возможно не только это. В assistant-e про статику пишется, что
 надо создавать файлы .prl.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 06, 2009, 02:42
MakeFile
Код:
#############################################################################
# Makefile for building: Project
# Generated by qmake (2.01a) (Qt 4.6.0) on: ?? 5. ??? 00:07:26 2009
# Project:  Project.pro
# Template: app
# Command: c:\qt\4.6.0\bin\qmake.exe -spec ..\Qt\4.6.0\mkspecs\win32-g++ -win32 -o Makefile Project.pro
#############################################################################

first: debug
install: debug-install
uninstall: debug-uninstall
MAKEFILE      = Makefile
QMAKE         = c:\qt\4.6.0\bin\qmake.exe
DEL_FILE      = del
CHK_DIR_EXISTS= if not exist
MKDIR         = mkdir
COPY          = copy /y
COPY_FILE     = $(COPY)
COPY_DIR      = xcopy /s /q /y /i
INSTALL_FILE  = $(COPY_FILE)
INSTALL_PROGRAM = $(COPY_FILE)
INSTALL_DIR   = $(COPY_DIR)
DEL_FILE      = del
SYMLINK       =
DEL_DIR       = rmdir
MOVE          = move
CHK_DIR_EXISTS= if not exist
MKDIR         = mkdir
SUBTARGETS    =  \
debug \
release

debug: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-make_default: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-make_first: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug first
debug-all: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug all
debug-clean: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug clean
debug-distclean: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug distclean
debug-install: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug install
debug-uninstall: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug uninstall
release: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_default: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_first: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release first
release-all: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release all
release-clean: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release clean
release-distclean: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release distclean
release-install: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release install
release-uninstall: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release uninstall

Makefile: Project.pro  ../Qt/4.6.0/mkspecs/win32-g++/qmake.conf ../Qt/4.6.0/mkspecs/qconfig.pri \
../Qt/4.6.0/mkspecs/features/qt_functions.prf \
../Qt/4.6.0/mkspecs/features/qt_config.prf \
../Qt/4.6.0/mkspecs/features/exclusive_builds.prf \
../Qt/4.6.0/mkspecs/features/default_pre.prf \
../Qt/4.6.0/mkspecs/features/win32/default_pre.prf \
../Qt/4.6.0/mkspecs/features/debug.prf \
../Qt/4.6.0/mkspecs/features/debug_and_release.prf \
../Qt/4.6.0/mkspecs/features/default_post.prf \
../Qt/4.6.0/mkspecs/features/win32/default_post.prf \
../Qt/4.6.0/mkspecs/features/win32/exceptions_off.prf \
../Qt/4.6.0/mkspecs/features/static.prf \
../Qt/4.6.0/mkspecs/features/warn_on.prf \
../Qt/4.6.0/mkspecs/features/qt.prf \
../Qt/4.6.0/mkspecs/features/win32/thread.prf \
../Qt/4.6.0/mkspecs/features/moc.prf \
../Qt/4.6.0/mkspecs/features/win32/windows.prf \
../Qt/4.6.0/mkspecs/features/win32/stl_off.prf \
../Qt/4.6.0/mkspecs/features/win32/rtti_off.prf \
../Qt/4.6.0/mkspecs/features/resources.prf \
../Qt/4.6.0/mkspecs/features/uic.prf \
../Qt/4.6.0/mkspecs/features/yacc.prf \
../Qt/4.6.0/mkspecs/features/lex.prf \
../Qt/4.6.0/mkspecs/features/include_source_dir.prf \
c:/Qt/4.6.0/lib/qtmaind.prl \
c:/Qt/4.6.0/lib/QtGui.prl \
c:/Qt/4.6.0/lib/QtCore.prl
$(QMAKE) -spec ..\Qt\4.6.0\mkspecs\win32-g++ -win32 -o Makefile Project.pro
..\Qt\4.6.0\mkspecs\qconfig.pri:
..\Qt\4.6.0\mkspecs\features\qt_functions.prf:
..\Qt\4.6.0\mkspecs\features\qt_config.prf:
..\Qt\4.6.0\mkspecs\features\exclusive_builds.prf:
..\Qt\4.6.0\mkspecs\features\default_pre.prf:
..\Qt\4.6.0\mkspecs\features\win32\default_pre.prf:
..\Qt\4.6.0\mkspecs\features\debug.prf:
..\Qt\4.6.0\mkspecs\features\debug_and_release.prf:
..\Qt\4.6.0\mkspecs\features\default_post.prf:
..\Qt\4.6.0\mkspecs\features\win32\default_post.prf:
..\Qt\4.6.0\mkspecs\features\win32\exceptions_off.prf:
..\Qt\4.6.0\mkspecs\features\static.prf:
..\Qt\4.6.0\mkspecs\features\warn_on.prf:
..\Qt\4.6.0\mkspecs\features\qt.prf:
..\Qt\4.6.0\mkspecs\features\win32\thread.prf:
..\Qt\4.6.0\mkspecs\features\moc.prf:
..\Qt\4.6.0\mkspecs\features\win32\windows.prf:
..\Qt\4.6.0\mkspecs\features\win32\stl_off.prf:
..\Qt\4.6.0\mkspecs\features\win32\rtti_off.prf:
..\Qt\4.6.0\mkspecs\features\resources.prf:
..\Qt\4.6.0\mkspecs\features\uic.prf:
..\Qt\4.6.0\mkspecs\features\yacc.prf:
..\Qt\4.6.0\mkspecs\features\lex.prf:
..\Qt\4.6.0\mkspecs\features\include_source_dir.prf:
c:\Qt\4.6.0\lib\qtmaind.prl:
c:\Qt\4.6.0\lib\QtGui.prl:
c:\Qt\4.6.0\lib\QtCore.prl:
qmake: qmake_all FORCE
@$(QMAKE) -spec ..\Qt\4.6.0\mkspecs\win32-g++ -win32 -o Makefile Project.pro

qmake_all: FORCE

make_default: debug-make_default release-make_default FORCE
make_first: debug-make_first release-make_first FORCE
all: debug-all release-all FORCE
clean: debug-clean release-clean FORCE
distclean: debug-distclean release-distclean FORCE
-$(DEL_FILE) Makefile

debug-mocclean: $(MAKEFILE).Debug
$(MAKE) -f $(MAKEFILE).Debug mocclean
release-mocclean: $(MAKEFILE).Release
$(MAKE) -f $(MAKEFILE).Release mocclean
mocclean: debug-mocclean release-mocclean

debug-mocables: $(MAKEFILE).Debug
$(MAKE) -f $(MAKEFILE).Debug mocables
release-mocables: $(MAKEFILE).Release
$(MAKE) -f $(MAKEFILE).Release mocables
mocables: debug-mocables release-mocables
FORCE:

$(MAKEFILE).Debug: Makefile
$(MAKEFILE).Release: Makefile


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 06, 2009, 02:50
а вот сейчас самые интересности:
ради интереса, в креаторе поставил режим сборки release вместо debug и, о, чудо! все заработало. почти все.
Не показывает фото в окне об авторе. Открываю форму в креаторе - показывает, открываю эту же форму в дизайнере - нет фото. у меня с 4.3.3 такое было и счас... в чем проблема???
при сборке QT указывал параметр -libjpeg


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 06, 2009, 21:44
с картинками разобрался, есть другой вопрос: у меня переключатель рус/англ, по умолчанию галочка стоит на рус, если выбрать англ, то галочки стоят там и там.. как сделать, что бы при переключении языка, галочка тоже переключалась?
коды я выкладывал и ничего там не менял

и еще про интернационализацию:
как мне тут посоветовали, проще сделать так: если русский язык, пишем одно на кнопке, если английский, то другое... так понимаю, для этого надо, чтобы у некоторой переменной менялось значение, чтоб в коде формы написать примерно так:
Код:
..........
if lang=ru {
- <property name="text">
  <string>Программа переводит заданные с клавиатуры</string>
  </property>
  </widget>
- <widget class="QLabel" name="label_2">
- <property name="geometry">
- <rect>
  <x>20</x>
  <y>30</y>
  <width>231</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>секунды в вид ЧЧ:ММ:СС</string>
}
if lang=en {
- <property name="text">
  <string>The program translates the specified keyboard</string>
  </property>
  </widget>
- <widget class="QLabel" name="label_2">
- <property name="geometry">
- <rect>
  <x>20</x>
  <y>30</y>
  <width>231</width>
  <height>16</height>
  </rect>
  </property>
- <property name="text">
  <string>seconds in the form HH:MM:SS</string>
}
.............
так вот, как привязать значение переменной к переключалке языков? а то я до сих пор не очень хорошо разобрался с сигналами и слотами  :(


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 06, 2009, 21:56
вот я счас тупость написал!!! форма же описывается не на С а на XML..
появился другой вопрос: как передать текст полю/кнопке и т.п.??


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 07, 2009, 08:45
Можно сделать, как в умных книгах пишут, в разделе интернационализации приложений. Хорошо написано у Шлее, Земскова.
А можно по своему:
В редакторе создайте файл language.txt, куда запишите либо 'r' , либо 'e'.
language.txt
Код:
e
Далее создайте get_language.h
Код:
#ifndef  GET_LANGUAGE_H
#define GET_LANGUAGE_H
#include <QFile>

extern char LANG[1];
void getLanguage() {
    QFile file("language.txt");
    file.open(QIODevice::ReadOnly);
    file.read(LANG,1); // read 1 byte ---> LANG[0]
}
#endif // GET_LANGUAGE_H
set_language.h
Код:
#ifndef  SET_LANGUAGE_H
#define SET_LANGUAGE_H
#include <QFile>

extern char LANG[1];
void setLanguage() {
    QFile file("language.txt");
    file.open(QIODevice::WriteOnly);
    file.write(LANG,1); // write 1 byte
}
#endif // SET_LANGUAGE_H
main.cpp
Код:
#include <QtGui>
#include <QtPlugin>
#include "proga1.h"

#include "get_language.h"
char LANG[1];

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
//====================
    getLanguage();
    qDebug() << LANG[0];
//====================
    MainWindow w;
    w.show();
    return app.exec();
}
ui_proga1.h
Код:
...
    menu_3->addAction(kn_log);
//================================================
    extern char LANG[1];
    if (LANG[0]== 'e')
    {
       pushButton->setText("Translate");
       pushButton_2->setText("Close");
       menu_2->setTitle("Language");
       kn_rus->setText("Russian");
       kn_eng->setText("English");
       //  OTHER     
    }
    else
    retranslateUi(MainWindow);
//================================================
...
proga1.h
Код:
...
        connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet())); //подключаем кнопку рассчет
        connect(kn_about, SIGNAL(triggered()), this, SLOT(about())); // подключаем кнопку о программе
        connect(kn_help, SIGNAL(triggered()), this, SLOT(help())); //подключаем кнопку помощь
        connect(kn_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(setRus()));
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(setEng()));
...
proga1.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui>
#include "proga1.h"
#include "proga1_about.h"
#include "proga1_author.h"
#include "proga1_help.h"
#define tr QObject::tr

#include "set_language.h"
extern char LANG[1];

void MainWindow::rasschet()
{
int iS,  oS, notH, notM;  //Объявление переменных
float oH, oM; //Объявление переменных
const int SiH=3600, SiM=60;
QString inSec, outHr, outMin, outSec;
textEdit->clear();
inSec = spinBox->text(); //Ввод
qDebug() << inSec;
iS = inSec.toInt();
qDebug() << iS;
//Вычисление
oH = (iS / SiH); //Количество часов
notH = iS - (oH * SiH); //Убираем количество часов
oM = (notH / SiM); //Количество минут
notM = notH - (oM * SiM); //Убираем количество минут
oS = notM; //Оставшееся число равно количеству секунд

if (LANG[0]=='r'){
   QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
   textEdit->setText(tr("Введенное количество секунд ")+QString::number(iS)  + tr(" соответствует ") + QString::number(oH) + tr(" часам, " ) + QString::number(oM) + tr(" минутам, ") + QString::number(oS) + tr(" секундам"));
}
else {
qDebug() << LANG[0] << "English";
}
}
void MainWindow::about()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::about";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблокируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyAbout *myabout = new MyAbout;
myabout->show();
}

void MainWindow::help()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::help";
qDebug() << this->isModal();
this->setWindowModality(Qt::NonModal);
MyHelp *myhelp = new MyHelp;
myhelp->show();
}

void MainWindow::author()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::author";
qDebug() << this->isModal();
this->setWindowModality(Qt::NonModal);
MyAuthor *myauthor = new MyAuthor;
myauthor->show();
}

void MainWindow::setRus()
{
LANG[0] = 'r';
setLanguage();
}
void MainWindow::setEng()
{
LANG[0] = 'e';
setLanguage();
}
Программу надо перезапускать, чтобы переключился язык. В условиях if ... else ... надо дописать англ. текст. У меня все работает.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: mattic от Декабрь 07, 2009, 15:03
Здравствуйте!
Всё таки спрошу здесь. Сразу предупреждаю: вопрос глупый. Но я на этом месте стопорнулся. И никак не продвинусь, что-то мозгов не хватает. Надеюсь Den2009 меня простит
Вообщем есть *.ui файл, в котором описывается главное(единственное окно). В окне присутствуют надпись label и кнопка btn1.  Я создаю слот qint8 detectDay(qint8 date) для реакции на нажатие кнопки. Потом в файле ccp пытаюсь соединить сигнал нажатия кнопки и мой слот connect(btn1, SIGNAL(clicked()), DateBir,SLOT(detectDay(3) )) . Компилятор выдаёт error: `btn1' was not declared in this scope. И это не смотря на наличие в файле срр строчки #include "ui_datebir.h" . Как именно мне надо прописывать кнопку при соединении сигнала и слота?
И еще. Вот я прописал в файле h в разделе public slots свой слот qint8 detectDay(qint8 date), то что этот слот не появляется при редактировании ui(в Редакторе сигналов и слотов) - это нормально? Учебники я читаю, но там что-то не ясен этот вопрос.
Свой миниархив я приложу к посту. Посмотрите, пожалуйста, у кого есть время и желание помочь. Мой слот qint8 detectDay(qint8 date) там конечно не совсем верен и будет сделано совсем по другому. Мне сейчас главное: понять как создавать свой слот и присоединять его к какому сигналу.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 07, 2009, 19:25
Параметры сигнал/слот должны быть согласованы по типу/порядку следования. Вы можете завести свою переменную m_date и через нее передавать параметры в слот. Про креатор не знаю, я им не пользуюсь. .
 datebir.h
Код:
 
#ifndef DATEBIR_H
#define DATEBIR_H

#include <QtGui> // For qDebug() ;

namespace Ui
{
    class DateBir;
}

class DateBir : public QMainWindow{
    Q_OBJECT

public:
    DateBir(QWidget  *parent = 0);

    ~DateBir();

public slots:
    void detectDay(bool );
private:
    Ui::DateBir *ui;
    qint8 m_date;  // <==============
};
datebir.cpp
Код:
#include "datebir.h"
#include "ui_datebir.h"

void DateBir::detectDay(bool blablabla){
    qDebug() << "in slot detectDate()";
    m_date=3; // <===============
    ui->label->setText(QString::number(m_date));

}

DateBir::DateBir(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::DateBir)
{
    ui->setupUi(this);
    connect(ui->btn1, SIGNAL(clicked(bool)), SLOT(detectDay(bool) ));
}

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



Название: Re: Помогите новичку (совсем новичку)
Отправлено: mattic от Декабрь 08, 2009, 13:08
Огромное спасибо за ответ!
В принципе вопрос закрыт :) Наконец-то я сдвинулся с этой мертвой точки... А то по книге ушёл уже намного дальше главы про события, а сам ещё даже элементарную работу с событиями не разобрал из-за этого непонимания.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 08, 2009, 21:10
в общем, интернационализацию делаю с помощью Linguist. Почитал Шлее, в принципе ничего сложного... сделал как там написано, но при компиляции такие ошибки:
Код:
C:/Pr1/proga1.cpp:65: error: prototype for 'void MainWindow::switchLanguage(int)' does not match any in class 'MainWindow'
C:/Pr1/proga1.h:24: error: candidate is: void MainWindow::switchLanguage()

в 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())); //подключаем кнопку рассчет
        connect(kn_about, SIGNAL(triggered()), this, SLOT(about())); // подключаем кнопку о программе
        connect(kn_help, SIGNAL(triggered()), this, SLOT(help())); //подключаем кнопку помощь
        connect(kn_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
        connect(kn_rus, SIGNAL(changed()), this, SLOT(switchLanguage()));
        connect(kn_eng, SIGNAL(changed()), this, SLOT(switchLanguage()));
    }
public slots:
        void rasschet(); // создаем слот рассчет
        void about(); // создаем слот о программе
        void help(); // создаем слот помощь
        void author(); // создаем слот об авторе
        void switchLanguage(); // создаем слот смены языка (это я добавил)
};

#endif
в proga1.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui>
#include "proga1.h"
#include "proga1_about.h"
#include "proga1_author.h"
#include "proga1_help.h"
#define tr QObject::tr

void MainWindow::rasschet()
{
int iS,  oS, notH, notM;  //Объявление переменных
float oH, oM; //Объявление переменных
const int SiH=3600, SiM=60;
QString inSec, outHr, outMin, outSec;
textEdit->clear();
inSec = spinBox->text(); //Ввод
qDebug() << inSec;
iS = inSec.toInt();
qDebug() << iS;
//Вычисление
oH = (iS / SiH); //Количество часов
notH = iS - (oH * SiH); //Убираем количество часов
oM = (notH / SiM); //Количество минут
notM = notH - (oM * SiM); //Убираем количество минут
oS = notM; //Оставшееся число равно количеству секунд
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
textEdit->setText(tr("Введенное количество секунд ")+QString::number(iS)  + tr(" соответствует ") + QString::number(oH) + tr(" часам, " ) + QString::number(oM) + tr(" минутам, ") + QString::number(oS) + tr(" секундам"));
}
void MainWindow::about()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::about";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблокируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyAbout *myabout = new MyAbout;
myabout->show();
}

void MainWindow::help()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::help";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблокируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyHelp *myhelp = new MyHelp;
myhelp->show();
}

void MainWindow::author()
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
qDebug() << "MainWindow::author";
qDebug() << this->isModal();
// Главное окно - модальное
// Сделаем его немодальным, т.е. разблокируем дочерние виджеты для ввода
this->setWindowModality(Qt::NonModal);
MyAuthor *myauthor = new MyAuthor;
myauthor->show();
}
// Это добавлено
void MainWindow::switchLanguage (int n)
{
    QTranslator translator;
    switch(n)
    {
    case RUSSIAN:
        translator.load("rus.qm",".");
        break;
    case ENGLISH:
        translator.load("eng.qm",".");
        break;
    }
    app->installTranslator(&translator);
}

main.cpp
Код:
#include <QApplication>
#include <QTranslator>
#include <QtPlugin>

 Q_IMPORT_PLUGIN(qjpeg)
 Q_IMPORT_PLUGIN(qgif)
 Q_IMPORT_PLUGIN(qkrcodecs)

#include "proga1.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow w;
    w.show();
    return app.exec();
}
остальные файлы без изменений... в чем проблема? и правильно ли подключены переключалки языков?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 09, 2009, 01:15
Посмотрите, что передается в слот:
Код:
...
void MainWindow::switchLanguage (int n)
{
    qDebug() << n; //<===========
    QTranslator translator;
    switch(n)
    {
    case RUSSIAN:  //<===========
        translator.load("rus.qm",".");
        break;
    case ENGLISH:  //<===========
И в switch() вставьте соотвествующие значения.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 09, 2009, 01:51
можно поподробнее? а то я ничего не понял (((


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 09, 2009, 06:31
Закоментируйте все тело слота вот так:
Код:
// Это добавлено
void MainWindow::switchLanguage (int n)
{
    qDebug() << n;  // смотрим n <============

/*
    QTranslator translator;
    switch(n)
    {
    case RUSSIAN:
        translator.load("rus.qm",".");
        break;
    case ENGLISH:
        translator.load("eng.qm",".");
        break;
    }
    app->installTranslator(&translator);
*/
}
Откомпилируйте, запустите. Затем попереключайте рус/англ и посмотрите, что будет выводится в консоли. Далее раскоментируйте и подставьте эти значения в switch. Например:
 ...
switch(n)
{
  case 1
     ... //  загрузка русского перевода
  case 2
     ... //  загрузка англ. перевода
}



Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 09, 2009, 10:32
все равно теже ошибки вылазят... я думаю, что дело в том, что у меня не правильно описан механзм сигналов и слотов:
Код:
connect(kn_rus, SIGNAL(changed()), this, SLOT(swlang()));
        connect(kn_eng, SIGNAL(changed()), this, SLOT(swlang()));
думаю, что надо написать, чтоб эти кнопки меняли значение n, осталось придумать, как это сделать


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 09, 2009, 15:53
Можно вот так:
proga1.h
Код:
...
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(switchLanguage()));
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(switchLanguage()));
...
proga1.cpp
Код:
...
void MainWindow::switchLanguage ()
{
    qDebug() << kn_rus->isChecked();
    qDebug() << kn_eng->isChecked();
    if (kn_rus->isChecked())
    {
        qDebug() << "Грузим русский перевод";
    }
    if (kn_eng->isChecked())
    {
        qDebug() << "Грузим английский перевод";
    }
...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 09, 2009, 18:34
сделал так:
Код:
void MainWindow::swlang(int n)
{
    qDebug() << n; //<===========
    QTranslator translator;
    switch(n)
    {
        qDebug() << kn_rus->isChecked();
        qDebug() << kn_eng->isChecked();
        if (kn_rus->isChecked())
        {
            qDebug("rus.qm") << "Грузим русский перевод";
        }
        if (kn_eng->isChecked())
        {
            qDebug("eng.qm") << "Грузим английский перевод";
        }
/*
 case RUSSIAN:  //<===========
        translator.load("rus.qm",".");
        break;
    case ENGLISH:  //<===========
        translator.load("eng.qm",".");
        break;
    }
    app->installTranslator(&translator); */
}

все равно эти же ошибки... если раскомментировать - тоже самое


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 10, 2009, 00:28
оказывается, надо было сделать так:
proga1.h
Код:
void swlang(int n);

оставил стандартный код, взятый из книги:
Код:
void MainWindow::swlang(int n)
{
    QTranslator translator;
    switch(n)
    {
 case RUSSIAN:  //<===========
        translator.load("rus.qm",".");
        break;
    case ENGLISH:  //<===========
        translator.load("eng.qm",".");
        break;
    }
    app->installTranslator(&translator);
}

компилятор ругается так:
Код:
C:/Pr1/proga1.cpp:83: error: 'RUSSIAN' was not declared in this scope
C:/Pr1/proga1.cpp:86: error: 'ENGLISH' was not declared in this scope
C:/Pr1/proga1.cpp:90: error: 'app' was not declared in this scope
я понимаю, что он говорит, что не объявлены, но как их объявить?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 10, 2009, 01:33
с этим разобрался...
следующий вопрос может быть совсем идиотский, но все же:
Код:
if (kn_rus -> isChecked())
    {
        n = 1;
        kn_eng -> notChecked();
    }
компилятор ругается, что нет такой команды notChecked(), много чего перерыл, но так и не нашел, какую написать, чтоб при нажатии другой кнопки с предыдущей снималась галочка... а то получаются обе отмеченные


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 10, 2009, 01:37
Просто вы не поняли мой пост. Сделайте вот так:
proga1.h
Код:
...
connect(kn_rus, SIGNAL(triggered()), this, SLOT(switchLanguage()));
connect(kn_eng, SIGNAL(triggered()), this, SLOT(switchLanguage()));
...
proga1.cpp
Код:
void MainWindow::switchLanguage ()
{
    QTranslator translator;

    qDebug() << kn_rus->isChecked();
    qDebug() << kn_eng->isChecked();
    
    if (kn_rus->isChecked())
    {
        qDebug() << "Грузим русский перевод";
        translator.load("rus.qm",".");
    }
    if (kn_eng->isChecked())
    {
        qDebug() << "Грузим английский перевод";
        translator.load("eng.qm",".");
    }

    qApp->installTranslator(&translator);
}
RUSSIAN, ENGLISH - это скорее всего макросы, определенные где-то у Шлее:
#define RUSSIAN 1
#define ENGLISH 2
а вместо app->installTraslator(&translator); надо qApp->installTranslator(&translator);


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 10, 2009, 09:24
это все понятно, но у вас не используется переменная, а у Шлее используется - n
а она будет нужна, например для того, чтобы писать в лог на русском или на аглийском, только эту переменную надо объявить не в в void ...(int n) а глобально, и тогда можно будет писать так:
if n = 1 // русский язык
 {
   ....
   пишем в лог по русски
 }
if n = 2 // английский язык
 {
   ....
   пишем в лог по английски
 }
или я что-то не так понимаю?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 10, 2009, 11:42
Вы все правильно понимаете. Итак вы хотите использовать переменную n передаваемую в слот
для вывода лога на том или ином языке?  Можно сделать через глобальную, как я и  делал в примере без использования файлов переводов. ( extern char LANG[] - для совместимости с QByteArray). Но можно сделать лучше. Просто заведите себе приватную булеву переменную
bool m_rus в классе. В конструкторе m_rus = true, А когда переключаетесь на англ. m_rus =false.
И далее можете ее использовать при формировании лога на рус/англ.   


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 10, 2009, 18:21
хорошая идея... счас попробую реализовать...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 10, 2009, 21:37
в общем, че-то не то...
сделал так:
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:
    bool m_rus; // объявил глобальную переменную
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        setupUi(this);
        connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet())); //подключаем кнопку рассчет
        connect(kn_about, SIGNAL(triggered()), this, SLOT(about())); // подключаем кнопку о программе
        connect(kn_help, SIGNAL(triggered()), this, SLOT(help())); //подключаем кнопку помощь
        connect(kn_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(switchlang()));
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(switchlang()));
       // connect(kn_log, SIGNAL(triggered()), this, SLOT(logFile()));
    }
public slots:
    void rasschet(); // создаем слот рассчет
    void about(); // создаем слот о программе
    void help(); // создаем слот помощь
    void author(); // создаем слот об авторе
    void swlang(); // создаем слот смены языка
    void switchlang();
  //  void logFile();

};

#endif
proga1.cpp
Код:
............
void MainWindow::switchlang()
{
    if (kn_rus -> isChecked())
    {
        m_rus = true;
        kn_eng -> setCheckable(true);
        kn_eng -> setChecked(false);
    }
    if (kn_eng -> isChecked())
    {
        m_rus = false;
        kn_rus -> setCheckable(true);
        kn_rus -> setChecked(false);
    }
}

void MainWindow::swlang()
{
    QTranslator translator;
    {
/*
              switch(m_rus)
    case 1:  //<===========
        translator.load("rus.qm",".");
        break;
    case 2:  //<===========
        translator.load("eng.qm",".");
        break;
*/

          if (m_rus = true) // на эту строчку компилятор выдает такое предупреждение: warning: suggest parentheses around assignment used as truth value
        {
            translator.load("rus.qm",".");
           // break;
        }
        if (m_rus = false) // на эту такое же warning: suggest parentheses around assignment used as truth value
        {
            translator.load("eng.qm",".");
           // break;
        }

    }
    qApp->installTranslator(&translator);
}

при переключении языка ничего не происходит, и если переключиться с русского на английский, то пока не снять галочку с русского, кликнув по нему мышкой, на английский не переключается, а с английского на русский нормально
смысл предупреждений вроде как в том, что оба раза используется значение true а вот почему - хз


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 11, 2009, 04:53
Вам бы забыть про компьютер и купить хорошую книжку по C++. И пока не дочитаете кодить не садиться.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 11, 2009, 08:10
Выкиньте эти swLanguage(), switchLanguage() на ... :) и сделайте по-простому:
proga1.h
Код:
...
public:
    bool m_rus;
        MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        m_rus = true; // по умолчанию русский
        setupUi(this);
        connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet())); //подключаем кнопку рассчет
        connect(kn_about, SIGNAL(triggered()), this, SLOT(about())); // подключаем кнопку о программе
        connect(kn_help, SIGNAL(triggered()), this, SLOT(help())); //подключаем кнопку помощь
        connect(kn_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(triggeredRussian())); // выбираем русский
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(triggeredEnglish())); // выбираем английский
    }
public slots:
        void rasschet(); // создаем слот рассчет
        void about(); // создаем слот о программе
        void help(); // создаем слот помощь
        void author(); // создаем слот об авторе
        void triggeredRussian();
        void triggeredEnglish();
};
...
proga1.cpp
Код:
void MainWindow::triggeredRussian ()
{
    //QTranslator translator;
    qDebug() << "Грузим русский перевод" ;
    m_rus = true;
    kn_eng->setChecked(false);
    //translator.load("rus.qm","."); - У МЕНЯ НЕТ ПЕРЕВОДА, ПОЭТОМУ ЗАКОМЕНТИРОВАЛ
    //qApp->installTranslator(&translator);
}
void MainWindow::triggeredEnglish ()
{
    //QTranslator translator;
    qDebug() << "Грузим английский перевод" ;
    m_rus = false;
    kn_rus->setChecked(false);
    //translator.load("eng.qm",".");
    //qApp->installTranslator(&translator);
}
Проверил, все работает правильно.



Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 11, 2009, 09:10
Вам бы забыть про компьютер и купить хорошую книжку по C++. И пока не дочитаете кодить не садиться.
я б с радостью, но некогда... скоро сессия, проги надо сдать... поэтому приходится читать, кодить и спрашивать тут  ;)

2 gmorgunov. спс, работает...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 11, 2009, 15:53
сделал заставку... хочу, чтобы, когда загрузка дойдет до 100%, заставка закрывалась только после нажатия клавиши, getchar() почему-то не работает - заставка закрывается сразу
Код:
 void loadModules(QSplashScreen* psplash)
 {
     QTime time;
     time.start();
     for (int i = 0; i < 100; )
     {
         if (time.elapsed() > 40)
         {
             time.start();
             ++i;
         }
         psplash->showMessage("Loading: " + QString::number(i) + "%", Qt::AlignHCenter | Qt::AlignBottom, Qt::black);
         getchar();
     }

 }
 int main (int argc, char **argv)
 {
     QApplication app(argc, argv);
     QSplashScreen splash(QPixmap("./image/zastavka.png"));
     splash.show();
     MainWindow w;
     loadModules (&splash) ;
     splash.finish (&w);
     w.show();
     return app.exec();
 }


Название: Re: Помогите новичку (совсем новичку)
Отправлено: mattic от Декабрь 19, 2009, 15:32
Вам бы забыть про компьютер и купить хорошую книжку по C++. И пока не дочитаете кодить не садиться.
Коль такое дело посоветуйте книг. Что-то на этом сайте не нашёл темы с книгами по Qt4.
И ещё такой вопрос новичка. Qt4 имеет смысл учить после С++ или можно и без С++? Я сначала немного на Delphi, потом на учёбе разобрал ANSI C и вот сейчас сразу пытаюсь влететь в Qt4. не особо-то получается. Пока есть только 2 книжки одна бумажная Земскова и ещё чья-то электронная - их абсолютно не хватает. А постоянно возникающие вопросы типа: "почему не происходить обращение к символу в строке QString, если номер выражен переменной, как то myStr" стыдно спрашивать на форуме.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 19, 2009, 16:01
Достаточно хорошей книжки по C++ и чтения документации самой Qt. Без знаний C++ вы никуда не уедите.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 22, 2009, 23:52
в общем, такая проблемка нарисовалась... надо в логе чтобы отображалось время запуска проги, ну и прочее...
программа начинается с заставки:
main.cpp
Код:
#include <QApplication>
#include <QTranslator>
#include <QTPlugin>
#include <QFile>
#include <QTGui>
#include <QtUiTools>

 Q_IMPORT_PLUGIN(qjpeg)
 Q_IMPORT_PLUGIN(qgif)
 Q_IMPORT_PLUGIN(qkrcodecs)

#include "proga1.h"
/* Заставка */

 void loadModules(QSplashScreen* psplash)
 {
     QTime time;
     time.start();
     for (int i = 0; i < 100; )
     {
         if (time.elapsed() > 40)
         {
             time.start();
             ++i;
         }
         psplash->showMessage("Loading: " + QString::number(i) + "%", Qt::AlignHCenter | Qt::AlignBottom, Qt::black);
     }
 }
 int main (int argc, char **argv)
 {
     QApplication app(argc, argv);
     QSplashScreen splash(QPixmap("./image/zastavka.png"));
     splash.show();
     MainWindow w;
     loadModules (&splash) ;
     getchar();
     splash.finish (&w);
     w.show();
     return app.exec();
 }
в .h объявил переменную file
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include <QTranslator>
#include <QFile>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------Наследуемся
{
    Q_OBJECT
public:
    ..............
    QFile* file;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {

        file = new QFile(this);
как это реализовать? напишите, плз, один примерчик, а дальше я сам дойду, что и куда писать, чтоб каждое событие писалось в лог.
надо, чтоб отображались дата и время события


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 24, 2009, 19:17
с логом относительно разобрался..
есть задумка сделать справку, чтоб текст справки загружался из html файла.. нашел пример в книжке Шлее
вобщем, вот:
proga1_helpbrowser.h
Код:
#ifndef PROGA1HELPBROWSER_H
#define PROGA1HELPBROWSER_H

#include <QtGui>

class HelpBrowser : public QWidget
{
    Q_OBJECT
public:
    HelpBrowser(const QString& strPath, const QString& strFileName, QWidget* pwgt = 0) : QWidget(pwgt)
    {
        QPushButton* pcmdBack = new QPushButton ("<<");
        QPushButton* pcmdHome = new QPushButton("Home");
        QPushButton* pcmdForward = new QPushButton (">>");
        QTextBrowser* ptxtBrowser = new QTextBrowser;
        connect(pcmdBack, SIGNAL(clicked()), ptxtBrowser, SLOT(backward()));
        connect(pcmdHome, SIGNAL(clicked()), ptxtBrowser, SLOT(home()));
        connect(pcmdForward, SIGNAL(clicked()), ptxtBrowser, SLOT(forward()));
        connect(ptxtBrowser, SIGNAL(backwardAvailable(bool)), pcmdBack, SLOT(setEnabled(bool)));
        connect(ptxtBrowser, SIGNAL(forwardAvailable(bool)), pcmdForward, SLOT(setEnabled(bool)));
        ptxtBrowser->setSearchPaths(QStringList() << strPath);
        ptxtBrowser->setSource(QString(strFileName));
        //Layout setup
        QVBoxLayout* pvbxLayout = new QVBoxLayout;
        QHBoxLayout* phbxLayout = new QHBoxLayout;
        phbxLayout->addWidget(pcmdBack);
        phbxLayout->addWidget(pcmdHome);
        phbxLayout->addWidget(pcmdForward);
        pvbxLayout->addLayout(phbxLayout);
        pvbxLayout->addWidget(ptxtBrowser);
        setLayout(pvbxLayout);
    }
    HelpBrowser(QWidget *parent = 0);
    bool event(QEvent* e);
};

#endif // PROGA1HELPBROWSER_H
proga1.cpp
Код:
...........
void MainWindow::helpBrowser()
{
    this->setWindowModality(Qt::NonModal);
    HelpBrowser helpbrowser("doc", "./help/index.htm");

    helpbrowser.resize(400, 300);
    helpbrowser.show();

}
при компиляции выдает такую ошибку:
:-1: error: collect2: ld returned 1 exit status


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 24, 2009, 19:21
Это не при компиляции, это при линковке. Конец лога сюда.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 24, 2009, 19:44
Код:
Выполняется сборка проекта Pr1...
Настройки не изменились, этап QMake пропускается.
Запускается: C:/MinGW/bin/mingw32-make.exe -w
mingw32-make: Entering directory `C:/Pr1'
C:/MinGW/bin/mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Pr1'
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtUiTools" -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtXml" -I"..\Qt\4.6.0\include" -I"." -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"." -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\main.o main.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtUiTools" -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtXml" -I"..\Qt\4.6.0\include" -I"." -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"." -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\proga1.o proga1.cpp
C:/Qt/4.6.0/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtUiTools" -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtXml" -I"..\Qt\4.6.0\include" -I"." -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"." -I"..\Qt\4.6.0\mkspecs\win32-g++" -D__GNUC__ -DWIN32 proga1.h -o release\moc_proga1.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtUiTools" -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtXml" -I"..\Qt\4.6.0\include" -I"." -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"." -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\moc_proga1.o release\moc_proga1.cpp
C:/Qt/4.6.0/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtUiTools" -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtXml" -I"..\Qt\4.6.0\include" -I"." -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"." -I"..\Qt\4.6.0\mkspecs\win32-g++" -D__GNUC__ -DWIN32 proga1_helpbrowser.h -o release\moc_proga1_helpbrowser.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtUiTools" -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtXml" -I"..\Qt\4.6.0\include" -I"." -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"." -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\moc_proga1_helpbrowser.o release\moc_proga1_helpbrowser.cpp
g++ -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,windows -o pr1.exe object_script.pr1.Release -L"c:\Qt\4.6.0\lib" -lmingw32 -lqtmain -LC:/Qt/4.6.0/plugins/imageformats -lqjpeg -lqgif -LC:/Qt/4.6.0/plugins/codecs -lqkrcodecs -lQtUiTools -lQtXml -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
mingw32-make[1]: Leaving directory `C:/Pr1'
mingw32-make: Leaving directory `C:/Pr1'
./release\moc_proga1_helpbrowser.o:moc_proga1_helpbrowser.cpp:(.rdata$_ZTV11HelpBrowser[vtable for HelpBrowser]+0x1c): undefined reference to `HelpBrowser::event(QEvent*)'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [pr1.exe] Error 1
mingw32-make: *** [release] Error 2
Завершено с кодом возврата 2.
Ошибка во время сборки проекта Pr1
Во время выполнения сборки на этапе 'Make'


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Декабрь 24, 2009, 19:46
Цитировать
./release\moc_proga1_helpbrowser.o:moc_proga1_helpbrowser.cpp:(.rdata$_ZTV11HelpBrowser[vtable for HelpBrowser]+0x1c): undefined reference to `HelpBrowser::event(QEvent*)'
Внимательно посмотри что ты не определил.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 24, 2009, 19:57
хм.. странно.. вот эти строки в заголовочном файле были лишние:
Код:
    HelpBrowser(QWidget *parent = 0);
    bool event(QEvent* e);
в примере их нет... да и я не помню, что дописывал их...
теперь компилится, но при открытии окна помощи, оно сразу же закрывается...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Декабрь 24, 2009, 20:21
теперь компилится, но при открытии окна помощи, оно сразу же закрывается...
Все правильно, ведь ты создаешь объект HelpBrowser на стеке, при выходе из метода void MainWindow::helpBrowser() объект разрушается и соответственно окно закрывается.
Создавай этот объект на куче.
Код
C++ (Qt)
void MainWindow::helpBrowser()
{
   HelpBrowser *helpbrowser = new HelpBrowser("doc", "./help/index.htm");
 
   helpbrowser->resize(400, 300);
   helpbrowser->show();
}


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 24, 2009, 21:35
работает, спс...
последний (я очень на это надеюсь) вопрос:
как сделать, чтоб каждая запись в файл начиналась с новой строки и содержала дату и время?
Код:
     QFile file("./log.txt");
     if (file.open(QIODevice::WriteOnly))
     {
         QTextStream out(&file);
         out << "This is log-file" << endl();
     }
выдает такую ошибку:
Код:
C:/Pr1/../Qt/4.6.0/include/QtCore/../../src/corelib/io/qtextstream.h:320: error: too few arguments to function 'QTextStream& endl(QTextStream&)'
C:/Pr1/main.cpp:40: error: at this point in file

\n не корректно отображает в блокноте и некоторых других просмотрщиках


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 24, 2009, 21:54
ошибку понял.. лишними были скобки у endl
Код:
     QFile file("./log.txt");
     file.open(QIODevice::WriteOnly);
     QTextStream out(&file);
     out << "This is log-file" << endl;
     out << "This is :)" << endl;
     file.close();
работает, но пишет строки друг за другом...
и про дату с временем вопрос в силе  :)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 27, 2009, 00:46
блин, никто не знает, что-ли?? ???


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 27, 2009, 01:11
В нормальных редакторах текста строки тоже друг за другом? Проверьте в том же QtCreator'е.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 27, 2009, 11:52
в нормальных - нормально ))
не нормально только в блокноте.. но у нас в вузе я не знаю, есть ли что-нить нормальное... поэтому надо как-то сделать, чтоб и в виндовском блокноте было нормально


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 27, 2009, 16:17
Тогда как-то так:

Код
C++ (Qt)
    QFile file("./log.txt");
    file.open(QIODevice::WriteOnly);
    QTextStream out(&file);
    (out << "This is log-file").endl();
    (out << "This is :)").endl();
    file.close();
 


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 27, 2009, 22:48
пишет, что class QTextStream has no member named endl


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 28, 2009, 00:03
Тогда что-то вроде:

Код
C++ (Qt)
    QFile file("./log.txt");
    file.open(QIODevice::WriteOnly);
    QTextStream out(&file);
    out << "This is log-file";
    endl(out);
    out << "This is :)";
    endl(out);
    file.close();
 


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 00:37
все равно в блокноте так же...
попробую погуглить...
как вставить текущую дату и время??


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 28, 2009, 00:53
QDateTime::currentDateTime().toString()


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 10:45
перенос строки:
Код:
     QFile file("./log.txt");
     file.open(QIODevice::WriteOnly);
     QTextStream out(&file);
     out << "This is log-file\r\n";
     out << "This is :)\r\n";
     file.close();


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 10:49
делаю так:
Код:
     QString str;
     QDateTime::currentDateTime().toString(str);
     file.open(QIODevice::WriteOnly);
     QTextStream out(&file);
     out << str << " This is log-file\r\n";
     out << str << " This is :)\r\n";
     file.close();
дату и время не вставляет


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 28, 2009, 11:42
А документацию почитать? QString str = QDateTime::currentDateTime().toString()


Название: Re: Помогите новичку (совсем новичку)
Отправлено: ilot от Декабрь 28, 2009, 11:46
Цитировать
дату и время не вставляет
и правильно делает. Если буквально, то в данном случае Вы задаете формат даты-времени как пустую строку. В переменную str нужно писать, а не передавать ее в качестве параметра (см. документацию):
Цитировать
QString str;
str = QDateTime::currentDateTime().toString();
или со строкой форматирования:
Цитировать
QString str;
str = QDateTime::currentDateTime().toString("hh:mm:ss");

ЗЫ. пока писал уже ответили  :)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 16:08
небольшой вопрос по 2-й программе нарисовался.
требуется открыть файл (текстовый) и вывести его содержимое в окне TextEdit, которое называется textInput. 
делаю так:
Код:
void MainWindow::openFile()
{
    QString fileName = QFileDialog::getOpenFileName(".", "all(*.*)", this, (tr("File select")));
    QFile file1(fileName);
    if (file1.open(QIODevice::ReadOnly))
    {
        QTextStream stream(&file1);
        while (!stream.atEnd())
        {
            textInput->setText(stream.read());
        }

    }
    file1.close();
}
выдает такие ошибки:
C:/Pr2/proga2.cpp:19: error: no matching function for call to 'QFileDialog::getOpenFileName(const char [2], const char [9], MainWindow* const, QString)'
C:/Pr2/proga2.cpp:26: error: no matching function for call to 'QTextStream::read()'


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 16:15
или со строкой форматирования:
Цитировать
QString str;
str = QDateTime::currentDateTime().toString("hh:mm:ss");
а как задать формат вида: число, месяц, год, часы, минут, секунды??
если задавать без параметров, то пишет:
Код:
Пн 28. дек 16:14:27 2009 This is log-file


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 28, 2009, 17:50
Отвечу по textInput:
Код:
void MainWindow::logFile()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                 "C:\\Pr1",
                                                 tr("Text files (*.txt)"));
    QFile file1(fileName);
    if (file1.open(QIODevice::ReadOnly))
    {
        QTextStream stream(&file1);
        textInput->setText(stream.readAll());
    }
    file1.close();
}
Откроется стандартный Windows-диалог выбора файла. Но textInput вам надо добавить
на форму(MainWindow) в дизайнере, точно так, как textEdit(рассчет).


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 19:06
проблема была в том, что я перепутал местами параметры в
Код:
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "C:\\Pr1", tr("Text files (*.txt)"));
на форму ничего добавлять не пришлось - все и так работает


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 20:05
вобщем, надо в тексте, который в textInput заменить все символы "а" на "абв", и вывести в textOutput. я понимаю, что надо текст перевести из string в char а потом уже сравнивать символы с шаблоном и в случае совпадения менять
только вот как это реализовать на КуТэ - я не знаю... подскажите, ну или ссылку дайте, где про это написано


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 20:43
как сделать, чтоб в лог писалось из всей программы? т.е.
main.cpp - это пишется
Код:
int main (int argc, char **argv)
 {
     QApplication app(argc, argv);
     QSplashScreen splash(QPixmap("./image/zastavka.png"));
     QFile file("./log.txt");
     file.open(QIODevice::WriteOnly);
     QTextStream out(&file);
     out << "|-------------------------------------------------------------|\r\n";
     out << "|                                                             |\r\n";
     out << "|                                                             |\r\n";
     QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << "|                     Log-file is created                     |\r\n";
     out << "|                                                             |\r\n";
     out << "|                                                             |\r\n";
     out << "|-------------------------------------------------------------|\r\n";
     str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << str << " Program is running\r\n";
     splash.show();
     MainWindow w;
     loadModules(&splash) ;
     getchar();
     splash.finish(&w);
     w.show();
     str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << str << " Application is started\r\n";
     file.close();
     return app.exec();
 }
proga1.cpp а это уже не пишется
Код:
void MainWindow::rasschet()
{
    int notH, notM;  //Объявление переменных
    const int SiH=3600, SiM=60;
    QString inSec;
    textEdit->clear();
    inSec = spinBox->text(); //Ввод
    qDebug() << inSec;
    iS = inSec.toInt();

    file->open(QIODevice::WriteOnly);
    QTextStream out(file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " Input number: " << iS << "\r\n";

    qDebug() << iS;
    //Вычисление
    oH = (iS / SiH); //Количество часов
    notH = iS - (oH * SiH); //Убираем количество часов
    oM = (notH / SiM); //Количество минут
    notM = notH - (oM * SiM); //Убираем количество минут
    oS = notM; //Оставшееся число равно количеству секунд
    textEdit->setText(tr("The entered number of seconds %1 corresponds %2 hours, %3 minutes, %4 seconds").arg(iS).arg(oH).arg(oM).arg(oS));
    str = QDateTime::currentDateTime().toString("hh.mm.ss");

    out << str << iS << " corresponds " << oH << ":" << oM << ":" << oS << "\r\n";
}


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 28, 2009, 21:06
Мне кажется вы просто файл забыли закрыть в конце: file->close()


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 28, 2009, 22:34
Код:
void MainWindow::rasschet()
{
    int notH, notM;  //Объявление переменных
    const int SiH=3600, SiM=60;
    QString inSec;
    textEdit->clear();
    inSec = spinBox->text(); //Ввод
    qDebug() << inSec;
    iS = inSec.toInt();

    file->open(QIODevice::WriteOnly);
    QTextStream out(file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " Input number: " << iS << "\r\n";

    qDebug() << iS;
    //Вычисление
    oH = (iS / SiH); //Количество часов
    notH = iS - (oH * SiH); //Убираем количество часов
    oM = (notH / SiM); //Количество минут
    notM = notH - (oM * SiM); //Убираем количество минут
    oS = notM; //Оставшееся число равно количеству секунд
    textEdit->setText(tr("The entered number of seconds %1 corresponds %2 hours, %3 minutes, %4 seconds").arg(iS).arg(oH).arg(oM).arg(oS));
    str = QDateTime::currentDateTime().toString("hh.mm.ss");

    out << str << iS << " corresponds " << oH << ":" << oM << ":" << oS << "\r\n";
    file -> close();
}
все равно не работает


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 28, 2009, 22:38
Покажите конструктор этого file.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 29, 2009, 00:21
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include <QTranslator>
#include <QFile>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------Наследуемся
{
    Q_OBJECT
public:
    int iS, oS, oM, oH;
    QTranslator* translator;
    QFile* file;
    QString* str;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
..................


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 29, 2009, 00:27
Это он обьявляется, а создаётся где? new QFile( ... )


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 29, 2009, 01:50
слишком мало сюда до этого кода вставил...
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include <QTranslator>
#include <QFile>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------Наследуемся
{
    Q_OBJECT
public:
    int iS, oS, oM, oH;
    QTranslator* translator;
    QFile* file;
    QString* str;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        translator = new QTranslator(this);
        file = new QFile(this);
        setupUi(this);


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 29, 2009, 02:54
А имя ему где задаётся? Сейчас угадаю - нигде. Поэтому метод file->open(...) возвращает false, а остальные операции на QTextStream не делают ничего. Задайте имя лога первым параметром в конструкторе QFile( "log.txt", this ) и пользуйтесь только этим экземпляром для логирования. И после записи вызывайте file->flush(), чтобы если программа закрешится содержимое лога не потерялось.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 29, 2009, 08:07
Den2009. Сделайте следующее:
- установите другой режим записи: file.open(QIODevice::Append);
- указывайте полное имя файла: QFile file("C:\\Pr1\\log.txt"), а то у меня , например, создался еще один файл log.txt в подкаталоге debug.
- и действительно, как говорил Dendy, почаще сбрасывайте на диск( flush() ).
Вот так в лог записываются все ваши действия:
Код:
#include <QApplication>
#include <QTranslator>
#include <QFile>
#include <QtGui>
#include <QString>
#include <QTextStream>
#include <QDate>
#include "proga1.h"

 int main (int argc, char **argv)
 {
     QApplication app(argc, argv);
     //QSplashScreen splash(QPixmap("./image/zastavka.png"));
     QFile file("C:\\Pr1\\log.txt");//<<================
     file.open(QIODevice::Append);//<<================
     QTextStream out(&file);
     out << "|-------------------------------------------------------------|\r\n";
     out << "|                                                             |\r\n";
     out << "|                                                             |\r\n";
     QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << "|                     Log-file is created                     |\r\n";
     out << "|                                                             |\r\n";
     out << "|                                                             |\r\n";
     out << "|-------------------------------------------------------------|\r\n";
     str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << str << " Program is running\r\n";
     file.flush(); //<<===================
     qDebug() << "after file.flush()";
     MainWindow w;
     //loadModules(&splash) ;
     getchar();
     //splash.finish(&w);
     w.show();
     str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << str << " Application is started\r\n";
     file.close();
     return app.exec(); 
 }
В других файлах аналогично.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 29, 2009, 11:19
а вот если установить полный путь файла, то при запуске из другого каталога, где будет создан лог?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 29, 2009, 11:36
сделал немного не так
сначала открываю с параметром только запись, а во всех остальных случаях с параметром append таким образом, каждый раз при запуске приложения создается новый лог..
как писать в лог закрытие окна или приложения??


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 29, 2009, 15:27
В proga1.cpp переопределите ф-ию void MainWindow::closeEvent(QCloseEvent *event).
proga1.cpp
Код:
...
void MainWindow::closeEvent(QCloseEvent *event)
{
    file->open(QIODevice::Append);
    QTextStream out(file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " Application finished " << "\r\n";
    file->close();
     
    event->accept();
}
Не забудьте  в proga1.h прописать:
Код:
...
    void helpBrowser();
    void logFile();
    void closeEvent(QCloseEvent *event);
А вообще-то логи пишутся всегда т.е. лог не очищается при старте программы. Если установили мандриву, посмотрите файл /var/log/messages.   


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 29, 2009, 22:31
сделал почти на каждое окно, кроме помощи... там не получается.. вот код:
Код:
void MainWindow::helpBrowser()
{
    this->setWindowModality(Qt::NonModal);
    HelpBrowser* helpbrowser = new HelpBrowser("doc", "./help/index.html");
    helpbrowser->setWindowTitle(tr("Help"));
    helpbrowser->resize(500, 400);
    helpbrowser->setMaximumSize(500, 400);
    helpbrowser->setMinimumSize(500, 400);
    helpbrowser->show();
    //-------LOG
    QFile file("./log.txt");
    file.open(QIODevice::Append);
    QTextStream out(&file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " Help browser is show\r\n";
    file.flush();
    file.close();
    //-------endLog
}
т.е. на открытие есть, а как сделать на закрытие - хз..
и почему-то при закрытии других окон, запись о закрытии пишется 2 раза
делал так:
about
Код:
#include <QtGui>
#include "proga1_about.h"

MyAbout::MyAbout(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(pushButton, SIGNAL(pressed()), this, SLOT(close()));
}
bool MyAbout::event(QEvent* e)
{
    if (e->type() == QEvent::LanguageChange)
    {
        retranslateUi(this);
        return true;
    }
    return QWidget::event(e);
}
void MyAbout::closeEvent(QCloseEvent *event)
{
    QFile file("./log.txt");
    file.open(QIODevice::Append);
    QTextStream out(&file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " About program is close " << "\r\n";
    file.flush();
    file.close();
    event->accept();
}


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 29, 2009, 23:05
Вам ведь в предыдущем посте показали как - с помощью closeEvent(). А если пишется два раза - так поставьте брейкпоинт и посмотрите почему.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 30, 2009, 01:09
ну как сделать - разобрался... а вот с брейкпойнтом - проблема:
при запуске отладки пишется, что "завершился поток хх из ххх" и все... больше ничего не происходит...
в настройках пишет, что отсутствует помощник отладчика... при нажатии на "Пересобрать" в журнале такая запись:
http://file.qip.ru/file/114293475/ab322546/log_debug_helper.html
 (http://file.qip.ru/file/114293475/ab322546/log_debug_helper.html)
сюда не влезло - больше 20000 символов, пришлось залить на файлообменник...
в PATH путь до QT прописан


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 30, 2009, 01:43
Не пересобирается - и бог с ним, для остановки на брейкпоинте это неважно. Думаю достаточно в настройках задать путь к исполняемому файлу и рабочую директорию. Сам Creator'ом не пользуюсь, подсказать почему не запускает программу в отладчике не могу.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 30, 2009, 02:19
может и не важно, но программа в отладчике не запускается... чем другим можно воспользоваться для этих целей?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 30, 2009, 02:22
Убедитесь, что программа собрана с дебажными символами. Можно просто запустить программу и уже в ходе выполнения подключиться к ней Creator'ом. Debug -> Attach To Running Process...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 30, 2009, 02:40
дебажные символы, это qDebug?
Можно просто запустить программу и уже в ходе выполнения подключиться к ней Creator'ом. Debug -> Attach To Running Process...
после этого креатор виснет


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 30, 2009, 11:34
Den2009. Поменяйте в файле proga1_about.ui сигнал pressed() на clicked(), либо
triggered() , потому что pressed():
Цитировать
void QAbstractButton::pressed ()   [signal]
This signal is emitted when the button is pressed down.

See also released() and clicked().
Видимо идет 2 event-a , когда нажимаете и когда отпускаете.
proga1_about.ui
Код:
...
<sender>pushButton</sender>
   <signal>clicked()</signal>
Проверил, для about пишется 1 раз.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 30, 2009, 12:56
спс, помогло... видать действительно 2 раза event был...

как этому присваивать значение по-другому? хочу сделать, чтоб в зависимости от выбранного языка грузился html с разных папок
Код:
    HelpBrowser* helpbrowser = new HelpBrowser("doc", "./help/index.html");
т.е. if (xxx = true) {
грузим отсюда }
if (xxx = false) {
грузим с другого места }
булеву переменную я объявил..



Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Декабрь 30, 2009, 19:27
Пропишите переменную helpbrowser, и работайте с ней:
proga1_h
Код:
...
#include "proga1_helpbrowser.h"
class MainWindow : public QMainWindow, Ui::MainWindow
{
    Q_OBJECT
public:
    HelpBrowser *helpbrowser;
    bool english; // english - true, russian - false
    int iS, oS, oM, oH;
    QTranslator* translator;
    QFile* file;
    QTextEdit * textInput;
    QDockWidget *dockWidget;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        english = false;
...
proga1.cpp
Код:
...
void MainWindow::helpBrowser()
{
    this->setWindowModality(Qt::NonModal);
         
    if (english)
    {
        helpbrowser   = new HelpBrowser("C:\\Pr1", "log.txt");
    }
    else
        helpbrowser   = new HelpBrowser("C:\\Pr1", "eng.ts");
...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 30, 2009, 21:35
вобщем, требуется открывать лог по нажатию кнопки... интересует не сам процесс, а как написать, что лог надо открывать программой по умолчанию для просмотра txt (например, блокнотом)


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Dendy от Декабрь 30, 2009, 21:39
QDesktopServices::openUrl()


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Декабрь 31, 2009, 02:28
как все просто оказалось... даже странно, что заработало с первого раза  ;D


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 05, 2010, 02:48
Код:
{
QString textrep = textInput->toPlainText();
textrep.replace("1", " 1 in the Morze code is .---- \r\n");
textrep.replace("2", " 2 in the Morze code is ..--- \r\n");
textrep.replace("3", " 3 in the Morze code is ...-- \r\n");
textrep.replace("4", " 4 in the Morze code is ....- \r\n");
textrep.replace("5", " 5 in the Morze code is ..... \r\n");
textrep.replace("6", " 6 in the Morze code is -.... \r\n");
textrep.replace("7", " 7 in the Morze code is --... \r\n");
textrep.replace("8", " 8 in the Morze code is ---.. \r\n");
textrep.replace("9", " 9 in the Morze code is ----. \r\n");
textrep.replace("0", " 0 in the Morze code is ----- \r\n");
textOutput->setPlainText(textrep);
}
подскажите, пожалуйста, как сделать:
1.
Код:
" 2 in the Morze code is ..--- \r\n"
этот текст другого цвета
2. как сюда вставить счетчик количества проведенных замен
3. как сделать, чтобы эта строка
Код:
"  in the Morze code is "
выводилась на языке приложения
делал так:
Код:
textrep.replace("1", tr(" 1 in the Morze code is .---- \r\n"));
но, каждый раз, открывая файл перевода, она оказывается непереведенной...
я думаю, что сюда надо вставить константу, пробовал сделать так:
Код:
QString str2 = tr(" in the Morze code is ");
textrep.replace("1", " 1" << str2 << ".---- \r\n");
но компилятор ругается:
Код:
C:/Pr2/proga2.cpp:12: error: no match for 'operator<<' in '" 1" << str2'


Название: Re: Помогите новичку (совсем новичку)
Отправлено: niXman от Январь 05, 2010, 02:58
Код
C++ (Qt)
textrep.replace("1", " 1" + str2 + ".---- \r\n");
 


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 05, 2010, 03:55
помогло... теперь осталось 2 пункта...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Alex Custov от Январь 05, 2010, 04:17
помогло... теперь осталось 2 пункта...

за два месяца хождений по мукам и изучения языка и Qt методом тыка, можно было бы самостоятельно изучить язык хотя бы на среднем уровне, и неплохо разобраться в Qt, благо документация есть, и даже онлайн журнал.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 05, 2010, 14:41
как под линуксом сделать открывание лога в текстовом редакторе??
Код:
void MainWindow::logFile()

    QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+"./log.txt"));
}
такой код не работает... собирается все без ошибок, но при нажатии на кнопку лог не открывается


Название: Re: Помогите новичку (совсем новичку)
Отправлено: BRE от Январь 05, 2010, 14:46
Код
C++ (Qt)
void MainWindow::logFile()
{  
   QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+"/log.txt"));
}
 


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 05, 2010, 19:11
хочу, чтоб приложение при запуске было на русском языке, делаю так:
Код:
#include <QApplication>
#include <QTPlugin>
#include <QTGui>
#include <QTranslator>
#include <QtCore>

 Q_IMPORT_PLUGIN(qjpeg)
 Q_IMPORT_PLUGIN(qgif)
 Q_IMPORT_PLUGIN(qkrcodecs)

#include "proga1.h"

 int main (int argc, char **argv)
 {
     QApplication app(argc, argv);

     MainWindow w;

     QTranslator *translator = new QTranslator;
     qApp->removeTranslator(translator);
     translator->load("./eng.qm", ".");
     qApp->installTranslator(translator);
     retranslateUi(w);

     w.show();
     return app.exec();
 }
но компилятор выдает ошибку:
Код:
C:/Pr1/main.cpp:53: error: 'retranslateUi' was not declared in this scope
в чем причина?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Alex Custov от Январь 05, 2010, 19:29
в чем причина?

в том, что писать программы методом тыка не самая лучшая идея


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Январь 05, 2010, 21:25
Один из вариантов сделать сразу по-русски:
main.cpp
Код:
...
     MainWindow w ;
     QTranslator *translator = new QTranslator;
     translator->load("eng.qm", "C:\\Pr1");
     qApp->installTranslator(translator);
     w.myRetranslateUi();
proga1.h
Код:
...
    void logFile();
    void closeEvent(QCloseEvent *event);
    void myRetranslateUi();
proga1.cpp
Код:
...
void MainWindow::myRetranslateUi()
{
    retranslateUi(this);
}



Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 05, 2010, 22:18
сразу по-русски делается... я так делал:
Код:
     QTranslator *translator = new QTranslator;
     translator->load("eng.qm", "C:\\Pr1");
     qApp->installTranslator(translator);
работало, но язык не переключался... счас тоже не переключается... английский поставить уже нельзя


Название: Re: Помогите новичку (совсем новичку)
Отправлено: gmorgunov от Январь 05, 2010, 23:08
Я не понял, что вам нужно. Думал хотите вызвать retranslateUI() из main.cpp.
Тогда еще проще:
main.cpp
Код:
...
     MainWindow w ;
     w.triggeredRussian();
А myRetranslateUi() уберите. Проверил, работает.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 20, 2010, 22:06
чтоб не плодить темы, подниму свою ))

вобщем, программа такая:
вводятся длины сторон треугольника, идет проверка на возможность построить треугольник, и если возможно, то в новом окне (QGraphicsView) он рисуется.

вопрос: т.к. начало координат в левом верхнем углу, то треугольник относительно привычных получится вниз головой.. есть ли стандартные функции, чтоб перевернуть изображение на 180?

и еще: кнопка нарисовать изначально отключена (сделал отключенной в дизайнере), она должна включаться, есль условие возможности построения треугольника выполняется, однако не работает.. делаю так:
Код:
    if (((a+b)<=c) or ((b+c)<=a) or ((a+c)<=b) or ((a-b)>c) or ((a-c)>b) or ((b-a)>c) or ((b-c)>a) or ((c-a)>b) or ((c-b)>a))
    {
        textEdit->setText(tr("Невозможно получить треугольник из данных отрезков"));
    }
    else
    {
        textEdit->setText(tr("Из данных отрезков возможно построить треугольник"));
        pushButton_3->isEnabled();
    }


Название: Re: Помогите новичку (совсем новичку)
Отправлено: SABROG от Январь 20, 2010, 22:32
В MyImage можно передать родителя (this), потом обращаться к родителю через qobject_cast<MainWindow *>(parent()), создать метод, который будет возвращать твои координаты. Вместо double'ов можно использовать QPolygonF:

Код
C++ (Qt)
QPolygonF polygon;
        polygon << QPointF(x1, y1) << QPointF(x2, y2) << QPointF(x3, y3);
 

Или структуру:

Код
C++ (Qt)
static const QPointF points[3] = {
   QPointF(10.0, 80.0),
   QPointF(20.0, 10.0),
   QPointF(80.0, 30.0)
};
 

А затем использовать метод QPainter::drawPolygon()

Метод QWidget::isEnabled() возвращает true или false, он нужен для проверки состояния кнопки, а не для установки. Тебе нужно использовать метод QWidget::setEnabled(true).

Код
C++ (Qt)
if (((a+b)<=c) or ((b+c)<=a) or ((a+c)<=b) or ((a-b)>c) or ((a-c)>b) or ((b-a)>c) or ((b-c)>a) or ((c-a)>b) or ((c-b)>a))
 

Не припоминаю, чтобы в C++ был оператор "or", может быть "||" ?


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 20, 2010, 22:44
сделал так:
Код:
this->setWindowModality(Qt::NonModal);
    QGraphicsView *view = new QGraphicsView;
    QGraphicsScene *scene = new QGraphicsScene();
    view->setScene(scene);
    QPolygonF polygon;
    polygon << QPointF(ax, ax) << QPointF(bx, by) << QPointF(cx, cy);
    scene->addPolygon(polygon);
    view->show();
все работает, но треугольник отображен перевернутым, т.к. начало координат в верхнем левом, а не как нам привычно в нижнем левом.. есть ли стандартные средства для того, чтоб перевернуть на 180??

и еще: при вводе больших значений, часть треугольника не показывается, появляются scrollbar
задаю минимальные размеры объекта:
Код:
view->setMinimumSize(wi, he);
но, почему-то не работает...


Название: Re: Помогите новичку (совсем новичку)
Отправлено: SABROG от Январь 20, 2010, 23:11
сделал так:
Код:
this->setWindowModality(Qt::NonModal);
    QGraphicsView *view = new QGraphicsView;
    QGraphicsScene *scene = new QGraphicsScene();
    view->setScene(scene);
    QPolygonF polygon;
    polygon << QPointF(ax, ax) << QPointF(bx, by) << QPointF(cx, cy);
    scene->addPolygon(polygon);
    view->show();
все работает, но треугольник отображен перевернутым, т.к. начало координат в верхнем левом, а не как нам привычно в нижнем левом.. есть ли стандартные средства для того, чтоб перевернуть на 180??

Так попробуй
Код
C++ (Qt)
QGraphicsPolygonItem *polygonItem = scene->addPolygon(polygon);
polygonItem->setRotation(180.0);
 

и еще: при вводе больших значений, часть треугольника не показывается, появляются scrollbar
задаю минимальные размеры объекта:
Код:
view->setMinimumSize(wi, he);
но, почему-то не работает...
Попробуй этот метод:
void QGraphicsView::fitInView ( const QGraphicsItem * item, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio )

Вместо item подставляй polygonItem. Должен уменьшить треугольник до такой степени, чтобы влезал в виджет.


Название: Re: Помогите новичку (совсем новичку)
Отправлено: Den2009 от Январь 20, 2010, 23:33
переворот сделал проще:
Код:
view->rotate(180);

а с размером: у меня ограничение на максимальную длину линии - 500... и при вводе больше 300, виджет уже не показывает треугольник полностью..
поэтому, я подумаю, как можно растянуть виджет, если не получится, то придется сжимать треугольник...
спасибо за помощь