Russian Qt Forum
Июнь 02, 2024, 00:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Ошибка в программе. Сигналы и слоты.  (Прочитано 21151 раз)
bars268
Гость
« : Декабрь 13, 2012, 19:28 »

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget wgt;
    QTextEdit*      edit = new QTextEdit();
    QTextEdit*   text = new QTextEdit();
    QPushButton*    but  = new QPushButton("Go");

    QBoxLayout* lo = new QBoxLayout(QBoxLayout::TopToBottom);
    lo->addWidget(edit,1);
    lo->addWidget(text,1);
    lo->addWidget(but, 1);
    wgt.setLayout(lo);



    text->setReadOnly(true);

    wgt.resize(600,200);
    wgt.show();
    lbl.show();
    QObject::connect(&but,SIGNAL(clicked()), &text,SLOT(AddColor(edit->toPlainText())));

    return a.exec();
}

Ошибка где то в присоединении QObject::connect
Но я не могу понять что именно там не так
функция AddColor(Qstring)

Текст ошибки
\main.cpp:44: ошибка: no matching function for call to 'QObject::connect(QPushButton**, const char*, QTextEdit**, const char*)'
Записан
mutineer
Гость
« Ответ #1 : Декабрь 13, 2012, 19:32 »

Амперсанды лишние. в connect надо передвать указатели, а не указатели на указатели

Код:
SLOT(AddColor(edit->toPlainText()))
Это вот тоже неправильно
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Декабрь 13, 2012, 19:33 »

Текст ошибки
\main.cpp:44: ошибка: no matching function for call to 'QObject::connect(QPushButton**, const char*, QTextEdit**, const char*)'
Тебе компилятор явно сказал, что он не хочет принимать "указатель на указатель".
От каких великих знаний перед but и text появилось & ?
Записан

Qt 5.11/4.8.7 (X11/Win)
bars268
Гость
« Ответ #3 : Декабрь 13, 2012, 19:35 »

Амперсанды лишние. в connect надо передвать указатели, а не указатели на указатели

Код:
SLOT(AddColor(edit->toPlainText()))
Это вот тоже неправильно
Спасибо огромное! Я не уследил по неопытности(
А как правильно вызывать функцию AddColor(edit->toPlainText())?
Записан
mutineer
Гость
« Ответ #4 : Декабрь 13, 2012, 19:37 »

1) У QTextEdit нет метода AddColor
2) Что в макросе SLOT делает edit->toPlainText() ? Что оно должно символизировать и где ты увидел возможность так писать? Доку по сигналам/слотам читал?
Записан
bars268
Гость
« Ответ #5 : Декабрь 13, 2012, 19:39 »

1) У QTextEdit нет метода AddColor
Функцию AddColor я написал сам.
2) Что в макросе SLOT делает edit->toPlainText() ? Что оно должно символизировать и где ты увидел возможность так писать? Доку по сигналам/слотам читал?
Читал, но, видимо, не понял до конца, вот и прошу тут помощи
Записан
mutineer
Гость
« Ответ #6 : Декабрь 13, 2012, 19:41 »

ты не мог ее написать классу QTextEdit, потому что это Qt-класс (ну разве что ты дописал ее в исходники Qt и пересобрал, но это имеет мало смысла)

В макросы SIGNAL() и SLOT() пишется имя метода и типы его параметров, а не значения
Записан
Bepec
Гость
« Ответ #7 : Декабрь 13, 2012, 19:42 »

Шлее, страница помоему 80, глава "Сигналы и слоты". Почитай, хуже не станет.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Декабрь 13, 2012, 19:43 »

Читал, но, видимо, не понял до конца, вот и прошу тут помощи
Это читал?
Записан

Qt 5.11/4.8.7 (X11/Win)
bars268
Гость
« Ответ #9 : Декабрь 13, 2012, 19:44 »

Ничего я не дописывал, я просто написал функцию, которая возвращает QString
А потом методом Settext пытался засунуть то что получилось из функции в QTextEdit
Записан
bars268
Гость
« Ответ #10 : Декабрь 13, 2012, 19:44 »

Шлее, страница помоему 80, глава "Сигналы и слоты". Почитай, хуже не станет.
у меня щас рядом лежит его книга, по Qt 4.8 но что то до меня никак не доходит(
Записан
mutineer
Гость
« Ответ #11 : Декабрь 13, 2012, 19:45 »

Ничего я не дописывал, я просто написал функцию, которая возвращает QString
А потом методом Settext пытался засунуть то что получилось из функции в QTextEdit

Код полностью покажи, а особенно то место, в котором эта функция должна была стать слотом объекта text
Записан
bars268
Гость
« Ответ #12 : Декабрь 13, 2012, 19:46 »

Код:
#include <QtGui/QApplication>
#include <QWidget>
#include <QPushButton>
#include <QTextBrowser>
#include <QBoxLayout>
#include <QTextEdit>
#include <QString>
#include <QLabel>

QString AddColor(QString text);
QString ColorChoose();

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget wgt;
    QTextEdit*      edit = new QTextEdit("");
    QTextEdit*  text = new QTextEdit();
    QPushButton*    but  = new QPushButton("Go");


    QBoxLayout* lo = new QBoxLayout(QBoxLayout::TopToBottom);
    lo->addWidget(edit,1);
    lo->addWidget(text,1);
    lo->addWidget(but, 1);
    wgt.setLayout(lo);



    text->setReadOnly(true);

    wgt.resize(600,200);
    wgt.show();
    //QObject::connect(but,SIGNAL(clicked()), text,SLOT())));

    return a.exec();
}

QString AddColor(QString text)
{
    QString Text2;
    QString temp;
    for (int i=0;i<text.length();i++)
    {
        temp=text[i];
        Text2.append("[color=");
        Text2.append(ColorChoose());
        Text2.append("]");
        Text2.append(temp);
        Text2.append("[/color]");
    }
    return Text2;
}

QString ColorChoose()
{
    QString color;
    int range=15;
    int min=1;
    int colorID=rand() % (range+1) + min;
    switch (colorID)
    {
    case 1:
        color="Blue";
        break;
    case 2:
        color="Red";
        break;
    case 3:
        color="Yellow";
        break;
    case 4:
        color="Purple";
        break;
    case 5:
        color="Green";
        break;
    case 6:
        color="Olive";
        break;
    case 7:
        color="Crimson";
        break;
    case 8:
        color="Magenta";
        break;
    case 9:
        color="OrangeRed";
        break;
    case 10:
        color="DeepPink";
        break;
    case 11:
        color="DarkOrange";
        break;
    case 12:
        color="Tomato";
        break;
    case 13:
        color="Lime";
        break;
    case 14:
        color="Aqua";
        break;
    default:
        color="Black";
        break;
    }
    return color;
}
Записан
mutineer
Гость
« Ответ #13 : Декабрь 13, 2012, 19:47 »

AddColor никоим образом не является слотом объекта text, и вообще ничьим слотом не является. Коннектиться к ней бесполезно. С++ учил?
Записан
bars268
Гость
« Ответ #14 : Декабрь 13, 2012, 19:48 »

То есть для слота и сигнала мне нужно создавать свой класс, унаследованный от QObject?
Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 19.