Название: Помогите новичку (совсем новичку)
Отправлено: 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() написал 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
сделал так: конструктор выдал только такую ошибку: 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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <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></string> </property> <property name="whatsThis"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <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></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) имел страный вид. Встречались такие теги: Со знаком минус "-" и их довольно много.До правки выдавала: 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 Далее создайте 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 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. как сделать, чтобы эта строка выводилась на языке приложения делал так: 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
переворот сделал проще: а с размером: у меня ограничение на максимальную длину линии - 500... и при вводе больше 300, виджет уже не показывает треугольник полностью.. поэтому, я подумаю, как можно растянуть виджет, если не получится, то придется сжимать треугольник... спасибо за помощь
|