crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в TextEdit
Введите ваше имя
Подтвердите код

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

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Antrix Дата 16.11.2008, 21:29
  Ну а почему тогда, если создаю точно такую же функцию а не слот, компилятор не ругается?

Раскрывающийся текст
#ifndef _MainWindow_h_
#define _MainWindow_h_

#include <QMainWindow>
#include "ui_Form.h"
#include "AServer.h"
#include "AClient.h"
#include <QTextDocument>

class MainWindow : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT
public:
    MainWindow(QMainWindow* parent = 0);


    void test(QTextDocument a);

private:
    AServer* server;
    AClient* client;
    bool serverEnableFlag;//флаг работе сервера
    bool clientEnableFlag;//флаг работы клиента
    bool cilentDisconnectedFlag;//флаг отсоединения клиента
    QString nickName;//ник
    QString nickNameOutput;//отформатированый ник
    QString setNick(QString nick);//форматирование ника

signals:
    //сигнал посылки текста
    void sendText(const QTextDocument&);
    void sendText(const QString&);
    //сигнал посылки ника
    void sendNick(QString);

public slots:
    //слот установки режима сервера
    void slotSetServerMode();
    //слот установки режима клиента
    void slotSetClientMode();
    //слот посылки текста
    void slotSendText();
    //слот смены ника
    void slotChangeNick();
    //слот ошибки сокета клиента
    void slotClientError();

    //слот вывода текста
    void slotTextOutput(QString);
    void slotTextOutput(QTextDocument*);
    
};

#endif
Litkevich Yuriy Дата 16.11.2008, 18:51
  Antrix, я что-то сразу не сообразил в Асистент посмотреть, теперь смотрю и вижу:

QTextDocument ( QObject * parent = 0 ) 
QTextDocument ( const QString & text, QObject * parent = 0 )
~QTextDocument ()
т.е. конструктор копирования не доступен.
Если функция объявленна так:
void test(QTextDocument a);

и соответственно ты ее вызываешь так:
QTextDocument   td;
...
test(td);
компилятор должен будет вызвать конструктор копирования, которого нет, вот он и ругается.
Antrix Дата 16.11.2008, 16:50
  Вот:

Раскрывающийся текст
/****************************************************************************
** Meta object code from reading C++ file 'MainWindow.h'
**
** Created: Sun 16. Nov 11:56:19 2008
** by: The Qt Meta Object Compiler version 59 (Qt 4.4.1)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/

#include "../../../MainWindow.h"
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'MainWindow.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 59
#error "This file was generated using the moc from 4.4.1. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif

QT_BEGIN_MOC_NAMESPACE
static const uint qt_meta_data_MainWindow[] = {

// content:
1, // revision
0, // classname
0, 0, // classinfo
11, 10, // methods
0, 0, // properties
0, 0, // enums/sets

// signals: signature, parameters, type, tag, flags
12, 11, 11, 11, 0x05,
36, 11, 11, 11, 0x05,
54, 11, 11, 11, 0x05,

// slots: signature, parameters, type, tag, flags
72, 11, 11, 11, 0x0a,
92, 11, 11, 11, 0x0a,
112, 11, 11, 11, 0x0a,
127, 11, 11, 11, 0x0a,
144, 11, 11, 11, 0x0a,
162, 11, 11, 11, 0x0a,
186, 11, 11, 11, 0x0a,
219, 217, 11, 11, 0x0a,

0 // eod
};

static const char qt_meta_stringdata_MainWindow[] = {
"MainWindow\0\0sendText(QTextDocument)\0"
"sendText(QString)\0sendNick(QString)\0"
"slotSetServerMode()\0slotSetClientMode()\0"
"slotSendText()\0slotChangeNick()\0"
"slotClientError()\0slotTextOutput(QString)\0"
"slotTextOutput(QTextDocument*)\0a\0"
"test(QTextDocument)\0"
};

const QMetaObject MainWindow::staticMetaObject = {
{ &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,
qt_meta_data_MainWindow, 0 }
};

const QMetaObject *MainWindow::metaObject() const
{
return &staticMetaObject;
}

void *MainWindow::qt_metacast(const char *_clname)
{
if (!_clname) return 0;
if (!strcmp(_clname, qt_meta_stringdata_MainWindow))
return static_cast<void*>(const_cast< MainWindow*>(this));
if (!strcmp(_clname, "Ui::MainWindow"))
return static_cast< Ui::MainWindow*>(const_cast< MainWindow*>(this));
return QMainWindow::qt_metacast(_clname);
}

int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QMainWindow::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
switch (_id) {
case 0: sendText((*reinterpret_cast< const QTextDocument(*)>(_a[1]))); break;
case 1: sendText((*reinterpret_cast< const QString(*)>(_a[1]))); break;
case 2: sendNick((*reinterpret_cast< QString(*)>(_a[1]))); break;
case 3: slotSetServerMode(); break;
case 4: slotSetClientMode(); break;
case 5: slotSendText(); break;
case 6: slotChangeNick(); break;
case 7: slotClientError(); break;
case 8: slotTextOutput((*reinterpret_cast< QString(*)>(_a[1]))); break;
case 9: slotTextOutput((*reinterpret_cast< QTextDocument*(*)>(_a[1]))); break;
case 10: test((*reinterpret_cast< QTextDocument(*)>(_a[1]))); break;
}
_id -= 11;
}
return _id;
}

// SIGNAL 0
void MainWindow::sendText(const QTextDocument & _t1)
{
void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}

// SIGNAL 1
void MainWindow::sendText(const QString & _t1)
{
void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 1, _a);
}

// SIGNAL 2
void MainWindow::sendNick(QString _t1)
{
void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 2, _a);
}
QT_END_MOC_NAMESPACE
Litkevich Yuriy Дата 16.11.2008, 14:02
  Antrix, выкладывай moc_MainWindow.cpp
Antrix Дата 16.11.2008, 13:11
 
Вот объявление класса
#ifndef _MainWindow_h_
#define _MainWindow_h_

#include <QMainWindow>
#include "ui_Form.h"
#include "AServer.h"
#include "AClient.h"
#include <QTextDocument>

class MainWindow : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT
public:
    MainWindow(QMainWindow* parent = 0);

private:
    AServer* server;
    AClient* client;
    bool serverEnableFlag;//флаг работе сервера
    bool clientEnableFlag;//флаг работы клиента
    bool cilentDisconnectedFlag;//флаг отсоединения клиента
    QString nickName;//ник
    QString nickNameOutput;//отформатированый ник
    QString setNick(QString nick);//форматирование ника

signals:
    //сигнал посылки текста
    void sendText(const QTextDocument&);
    void sendText(const QString&);
    //сигнал посылки ника
    void sendNick(QString);

public slots:
    //слот установки режима сервера
    void slotSetServerMode();
    //слот установки режима клиента
    void slotSetClientMode();
    //слот посылки текста
    void slotSendText();
    //слот смены ника
    void slotChangeNick();
    //слот ошибки сокета клиента
    void slotClientError();

    //слот вывода текста
    void slotTextOutput(QString);
    void slotTextOutput(QTextDocument*);

    void test(QTextDocument a);
    
};

#endif

Реализация
#include <QMessageBox>
#include "MainWindow.h"
#include "AServer.h"
#include "AClient.h"
#include "InputDialog.h"
#include "NickDialog.h"
#include "ui_Form.h"
#include <QTextDocument>
#include <QtSql>
#include <QSqlDatabase>
#include "DataBase.h"

const int Port = 5555;

MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent)
{    
    . . .
}




void MainWindow::test(QTextDocument a)
{

}



Ошибка:

------ Build started: Project: chat, Configuration: Debug Win32 ------
MOC MainWindow.h
Compiling...
moc_MainWindow.cpp
.\tmp\moc\debug_shared\moc_MainWindow.cpp(95) : error C2248: 'QTextDocument::QTextDocument' : cannot access private member declared in class 'QTextDocument'
        c:\qt\4.4.1\include\qtgui\../../src/gui/text/qtextdocument.h(276) : see declaration of 'QTextDocument::QTextDocument'
        c:\qt\4.4.1\include\qtgui\../../src/gui/text/qtextdocument.h(106) : see declaration of 'QTextDocument'
main.cpp
MainWindow.cpp
AServer.cpp
Generating Code...
c:\qt\4.4.1\bin\chat\mainwindow.cpp(164) : warning C4700: uninitialized local variable 'documentBuffer' used
Build log was saved at "file://c:\QT\4.4.1\bin\chat\tmp\obj\debug_shared\BuildLog.htm"
chat - 1 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Litkevich Yuriy Дата 15.11.2008, 16:41
  Antrix, я вообще не понял о чем ты. можешь привести объявление класса и реализацию слота?
Antrix Дата 15.11.2008, 15:16
  А если писать
void test(QTextDocument*); вместо void test(QTextDocument);- то ошибка уже не возникает. Так в чем же дело это баг, или я что то не правильно делаю?
Antrix Дата 15.11.2008, 13:55
  Нет дело не в том, вот я переименовал слот:
public slots:
void test(QTextDocument);
Ошибка таже.
molchanoviv Дата 15.11.2008, 12:40
  потому-что slot это ключевое слово для moc
Antrix Дата 15.11.2008, 10:27
  Еще один вопрос: почему когда я создаю функцию void f(QTextDocument); - то компилятор не выдаёт ошибок, а если я создаю слот
public slots: void slot(QTextDocument); - то выдает вот такую ошибку:

------ Build started: Project: chat, Configuration: Debug Win32 ------
MOC NickDialog.h
MOC MainWindow.h
MOC InputDialog.h
MOC DataBase.h
MOC AServer.h
MOC AClient.h
UIC NickForm.ui
UIC Form.ui
UIC DialogForm.ui
Compiling...
moc_NickDialog.cpp
moc_MainWindow.cpp
.\tmp\moc\debug_shared\moc_MainWindow.cpp(92) : error C2248: 'QTextDocument::QTextDocument' : cannot access private member declared in class 'QTextDocument'
        c:\qt\4.4.1\include\qtgui\../../src/gui/text/qtextdocument.h(276) : see declaration of 'QTextDocument::QTextDocument'
        c:\qt\4.4.1\include\qtgui\../../src/gui/text/qtextdocument.h(106) : see declaration of 'QTextDocument'
moc_InputDialog.cpp
moc_DataBase.cpp
moc_AServer.cpp
moc_AClient.cpp
main.cpp
NickDialog.cpp
MainWindow.cpp
.\MainWindow.cpp(161) : warning C4100: 'outputText' : unreferenced formal parameter
InputDialog.cpp
DataBase.cpp
AServer.cpp
AClient.cpp
Generating Code...
Build log was saved at "file://c:\QT\4.4.1\bin\chat\tmp\obj\debug_shared\BuildLog.htm"
chat - 1 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Компилятор - visual studio 2005 + qt
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 8.12.2019, 3:39