Russian Qt Forum

Qt => Общие вопросы => Тема начата: tw333k от Февраль 26, 2010, 18:41



Название: Помогите нубу)
Отправлено: tw333k от Февраль 26, 2010, 18:41
Вообщем начинаю изучение QT (ПОД VS 2008). Начал написание с простой программки, и столкнулся с такой проблемой.

idabz.h
Код:
#ifndef IDABZ_H
#define IDABZ_H

#include <QtGui/QMainWindow>
#include "ui_idabz.h"

class IDABZ : public QMainWindow
{
Q_OBJECT

public:
IDABZ(QWidget *parent = 0, Qt::WFlags flags = 0);
~IDABZ();

private:
Ui::IDABZClass ui;

private slots:
void on_quitbutton_clicked();
void on_pushButton_2_clicked();
};

#endif // IDABZ_H


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

using namespace std;

IDABZ::IDABZ(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
this->setWindowState(Qt::WindowMaximized);
connect(ui.quitbutton, SIGNAL(triggered()),this,SLOT(on_quitbutton_clicked()));
}

IDABZ::~IDABZ()
{

}





main

Код:
#include <QtGui/QApplication>
#include "idabz.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
IDABZ w;
w.show();
return a.exec();
}

Выдаёт ошибку
1>moc_idabz.obj : error LNK2019: ссылка на неразрешенный внешний символ "private: void __thiscall IDABZ::on_pushButton_2_clicked(void)" (?on_pushButton_2_clicked@IDABZ@@AAEXXZ) в функции "public: virtual int __thiscall IDABZ::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@IDABZ@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>moc_idabz.obj : error LNK2019: ссылка на неразрешенный внешний символ "private: void __thiscall IDABZ::on_quitbutton_clicked(void)" (?on_quitbutton_clicked@IDABZ@@AAEXXZ) в функции "public: virtual int __thiscall IDABZ::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@IDABZ@@UAEHW4Call@QMetaObject@@HPAPAX@Z)

Вот. Прошу консультации . В книжках в основном кнопки создают не через QT Designer. Если можно посоветуете с чего учиться )

З.Ы заранее спасибо всем откликнувшимся


Название: Re: Помогите нубу)
Отправлено: tw333k от Февраль 26, 2010, 19:11
Ошибка пропадает, если из indbz.h удаляю строки отвечающие за кнопки. Но при этом кнопка при нажатие ничего не делает.


Название: Re: Помогите нубу)
Отправлено: Amigo_sa от Февраль 26, 2010, 19:14
необходимо написать реализацию слотов в idabz.cpp
Код:
void IDABZ::on_quitbutton_clicked()
{
// something
}

void IDABZ::on_pushButton_2_clicked()
{
// something
}


Название: Re: Помогите нубу)
Отправлено: tw333k от Февраль 26, 2010, 19:19
а не подскажите а что допустим надо написать для реализации выхода из программы. И вообще где можно посмотреть стандартные реализации?


Название: Re: Помогите нубу)
Отправлено: Amigo_sa от Февраль 26, 2010, 19:40
Для выхода из приложения нужно написать
Цитировать
QCoreApplication::exit ();
А вообще нужно читать кутешный Assistant - образец документации  ;)


Название: Re: Помогите нубу)
Отправлено: tw333k от Февраль 26, 2010, 19:43
спасибо) просто в английском не очень силён=/


Название: Re: Помогите нубу)
Отправлено: Пантер от Февраль 26, 2010, 19:44
Привыкнешь. :)


Название: Re: Помогите нубу)
Отправлено: SABROG от Февраль 27, 2010, 01:31
Для выхода из приложения нужно написать
Цитировать
QCoreApplication::exit ();
А вообще нужно читать кутешный Assistant - образец документации  ;)

Надо быть повнимательней с методами quit() и exit(), они возвращают управление после их вызова и ждут возвращения в главный цикл. quit() вызывает exit(). Если про эту особенность написано в документации к методу exit(), то насчет quit() она лукаво умалчивает, говоря всего-лишь, что quit() и exit(0) эквивалентны.

Код
C++ (Qt)
           qApp->exit(); //или qApp->quit(), разницы нет
           forever
               qDebug("Hitler kaput bitte!");
 

С этим кодом программа не завершится никогда. И даже с этим:

Код
C++ (Qt)
           forever {
               qDebug("Hitler kaput bitte!");
               qApp->processEvents();
           }
 

Только такое спасет отца русской демократии:
Код
C++ (Qt)
   qApp->exit();
   return;
 

Выглядит глупо, конечно, с точки зрения логики. Методам скорее бы подошло название exitLater(), quitLater().


Название: Re: Помогите нубу)
Отправлено: panAlexey от Февраль 27, 2010, 15:28
спасибо) просто в английском не очень силён=/
в таких случаях люди вспоминают о книжных магазинах.