crossplatform.ru

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


  Ответ в Функция автозаполнения для QLineEdit
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 22.2.2009, 17:02
  FladeX, ошибка простая, она связана со знанием работы MOC,
Цитата(FladeX @ 22.2.2009, 19:49) *
#include <main.moc>
надо перенести после объявления и реализации класса, т.к. его еще не встречается в коде, вот MOC инезнает ничего о нем.

вот как должно быть: Прикрепленный файл  test.zip ( 1.12 килобайт ) Кол-во скачиваний: 175


П.С. не делай qmake -project
файл проекта уже есть, надо только:
qmake
make

П.П.С. я тебе неспроста говорил:
Цитата(Litkevich Yuriy @ 20.2.2009, 6:13) *
П.С. пока непоздно, перенеси весь класс MyWidget в отдельную пару файлов mywidget.h и mywidget.cpp, не взирая на компактность примера.
от гемороя сразу бы избавился
FladeX Дата 22.2.2009, 16:49
  Нет..
На одном форуме вроде подсказали как надо, но все равно не до конца.. Сейчас пытаюсь доделать тот вариант.
Собираю
qmake -project
qmake
make

Ошибки... Каждый раз разные. запутался в конец..

Код:
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include <QVBoxLayout>
#include <main.moc>

class MyWidget : public QWidget
    Q_OBJECT
{
public:
    MyWidget(QWidget *parent = 0);
//
private:
    QLineEdit *x1edit;
//
public slots:
    void setValue();
};

void MyWidget::setValue()
{
    x1edit->setText("123");
};

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QVBoxLayout *layout = new QVBoxLayout;
    QGridLayout *grid = new QGridLayout;

    QLabel *x1label = new QLabel(tr("x1="));
    QLabel *y1label = new QLabel(tr("y1="));
    QLabel *x2label = new QLabel(tr("x2="));
    QLabel *y2label = new QLabel(tr("y2="));
    QLabel *slabel = new QLabel(tr("S="));

    x1edit = new QLineEdit;
    QLineEdit *y1edit = new QLineEdit;
    QLineEdit *x2edit = new QLineEdit;
    QLineEdit *y2edit = new QLineEdit;
    QLineEdit *sedit = new QLineEdit;

    QPushButton *automode = new QPushButton(tr("Auto"));
    QPushButton *resetmode = new QPushButton(tr("Reset"));
    QPushButton *gomode = new QPushButton(tr("Go!"));

    grid->addWidget(x1label, 0, 0);
    grid->addWidget(y1label, 1, 0);
    grid->addWidget(x2label, 2, 0);
    grid->addWidget(y2label, 3, 0);
    grid->addWidget(slabel, 4, 0);

    grid->addWidget(x1edit, 0, 1);
    grid->addWidget(y1edit, 1, 1);
    grid->addWidget(x2edit, 2, 1);
    grid->addWidget(y2edit, 3, 1);
    grid->addWidget(sedit, 4, 1);

    grid->addWidget(automode, 5, 1);
    grid->addWidget(resetmode, 6, 1);
    grid->addWidget(gomode, 7, 1);

    layout->addLayout(grid);
    setLayout(layout);

    connect(resetmode, SIGNAL(clicked()), x1edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), y1edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), x2edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), y2edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), sedit, SLOT(clear()));

    connect(automode, SIGNAL(clicked()), this, SLOT(setValue()));
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyWidget widget;
    widget.show();
    return app.exec();
}


Сборка и ошибки:
linux-85og:/home/fladex/Qt/Rectangle # qmake -project                                                              
linux-85og:/home/fladex/Qt/Rectangle # qmake
linux-85og:/home/fladex/Qt/Rectangle # make
/usr/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -I. -I. main.cpp -o main.moc                                                                                                            
main.cpp:0: Warning: No relevant classes found. No output generated.                                              
g++ -c -pipe -O2 -march=i586 -mtune=i686 -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -I. -I. -o main.o main.cpp                                                            
main.cpp:12: error: expected `{' before ‘public’                                                                  
main.cpp:12: error: expected unqualified-id before ‘public’                                                        
main.cpp:12: error: uninitialized const ‘staticMetaObject’
main.cpp:12: error: virtual outside class declaration
main.cpp:12: error: non-member function ‘const QMetaObject* metaObject()’ cannot have cv-qualifier
main.cpp:12: error: virtual outside class declaration
main.cpp:12: error: virtual outside class declaration
main.cpp:12: error: expected unqualified-id before ‘private’
main.cpp:24: error: invalid use of incomplete type ‘class MyWidget’
main.cpp:11: error: forward declaration of ‘class MyWidget’
main.cpp:29: error: invalid use of incomplete type ‘class MyWidget’
main.cpp:11: error: forward declaration of ‘class MyWidget’
main.cpp: In function ‘int main(int, char**)’:
main.cpp:82: error: aggregate ‘MyWidget widget’ has incomplete type and cannot be defined
make: *** [main.o] Ошибка 1
Litkevich Yuriy Дата 21.2.2009, 16:58
  FladeX, ты победил свое творение или нет?
SABROG Дата 20.2.2009, 23:21
 
Цитата(FladeX @ 20.2.2009, 18:17) *
Q_OBJECT добавил, main.moc тоже добавил. Не компилируется теперь.
Погуглил про main.moc - как я понял это в моем случае и не нужно...

Ну если не нужно, тогда объясни что ты понял.
Цитата(FladeX @ 20.2.2009, 18:17) *
Q_OBJECT добавил,

Куда?
Цитата(FladeX @ 20.2.2009, 18:17) *
main.moc

Куда? Как собирал?

И совсем будет замечательно, если ты запостиш сюда ошибку, которую тебе выдало, а также исходный код, который получился в итоге и набор команд, которыми ты все это добро собирал.
FladeX Дата 20.2.2009, 18:17
  Q_OBJECT добавил, main.moc тоже добавил. Не компилируется теперь.
Погуглил про main.moc - как я понял это в моем случае и не нужно...
Litkevich Yuriy Дата 20.2.2009, 17:08
 
Цитата(FladeX @ 20.2.2009, 17:42) *
Не работает.
а ты все замечания учти, а потом уже пробуй
SABROG Дата 20.2.2009, 15:09
 
Цитата(FladeX @ 20.2.2009, 14:42) *
Не работает. Вообще не появляется окно, хотя компилится все нормально...

Читай мой пост выше про Q_OBJECT макрос и #include "main.moc"
FladeX Дата 20.2.2009, 14:42
  Не работает. Вообще не появляется окно, хотя компилится все нормально...
SABROG Дата 20.2.2009, 14:19
 
Цитата(FladeX @ 20.2.2009, 14:05) *
На примере x1edit можете показать "как надо"? Был бы весьма признателен.

connect(automode, SIGNAL(clicked()), this, SLOT(setValue()));
FladeX Дата 20.2.2009, 14:05
  Ткните плиз пальцем, где и что не так:
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include <QVBoxLayout>

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = 0);
private:
    QVBoxLayout *layout;
    QGridLayout *grid;
    QLineEdit *x1edit;
public slots:
    void setValue();
};

void MyWidget::setValue()
{
    x1edit->setText("123");
};

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    //QVBoxLayout *layout = new QVBoxLayout;
    //QGridLayout *grid = new QGridLayout;

    QLabel *x1label = new QLabel(tr("x1="));
    QLabel *y1label = new QLabel(tr("y1="));
    QLabel *x2label = new QLabel(tr("x2="));
    QLabel *y2label = new QLabel(tr("y2="));
    QLabel *slabel = new QLabel(tr("S="));

    //QLineEdit *x1edit = new QLineEdit;
    QLineEdit *y1edit = new QLineEdit;
    QLineEdit *x2edit = new QLineEdit;
    QLineEdit *y2edit = new QLineEdit;
    QLineEdit *sedit = new QLineEdit;

    QPushButton *automode = new QPushButton(tr("Auto"));
    QPushButton *resetmode = new QPushButton(tr("Reset"));
    QPushButton *gomode = new QPushButton(tr("Go!"));

    grid->addWidget(x1label, 0, 0);
    grid->addWidget(y1label, 1, 0);
    grid->addWidget(x2label, 2, 0);
    grid->addWidget(y2label, 3, 0);
    grid->addWidget(slabel, 4, 0);

    grid->addWidget(x1edit, 0, 1);
    grid->addWidget(y1edit, 1, 1);
    grid->addWidget(x2edit, 2, 1);
    grid->addWidget(y2edit, 3, 1);
    grid->addWidget(sedit, 4, 1);

    grid->addWidget(automode, 5, 1);
    grid->addWidget(resetmode, 6, 1);
    grid->addWidget(gomode, 7, 1);

    layout->addLayout(grid);
    setLayout(layout);

    connect(resetmode, SIGNAL(clicked()), x1edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), y1edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), x2edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), y2edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), sedit, SLOT(clear()));

    connect(automode, SIGNAL(clicked()), x1edit, SLOT(setValue()));
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyWidget widget;
    widget.show();
    return app.exec();
}

На примере x1edit можете показать "как надо"? Был бы весьма признателен.
ЗЫ. Трудно разобраться с ООП после скриптовых языков...
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 14:18