Добавить текст в QTextEdit, используя QPushButton - PullRequest
0 голосов
/ 05 июня 2011

Просто простая программа для добавления текста в textedit при нажатии кнопки ... что-то не так здесь ??


#include&ltQPushButton>
#include&ltQApplication>
#include&ltQTextEdit>
#include&ltQWidget>
#include&ltQHBoxLayout>
#include&ltQLabel>

int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QHBoxLayout *layout=new QHBoxLayout;
QTextEdit *text = new QTextEdit(); 
QWidget window;
QPushButton *button;

layout->addWidget(text);
button = new QPushButton();
button->setText(QChar(i+48));

QObject::connect(button,SIGNAL(clicked()),text,SLOT(setPlainText("hai")));

layout->addWidget(button);
window.setLayout(layout);
window.resize(500, 500);
window.show();

return app.exec();
}

Ответы [ 3 ]

1 голос
/ 05 июня 2011

Вы не можете использовать connect таким образом. Вы не можете передать параметры SLOT, которых нет в подключенном SIGNAL.

Вам нужно будет подключить сигнал clicked() к своему собственному слоту (без аргументов) и вызвать функцию setPlainText самостоятельно (или подать новый сигнал с параметром QString).

Другой вариант - использовать QSignalMapper, как описано в разделе расширенного использования Сигналы и слоты .

0 голосов
/ 05 июня 2011

Ваш сигнал и слот несовместимы.Qt предоставляет документацию для этого.

Попытайтесь посетить эту страницу .

В этом говорится: «Механизм сигналов и слотов является типобезопасным: подпись сигнала должна совпадать с подписьюпринимающий слот. (На самом деле слот может иметь более короткую сигнатуру, чем сигнал, который он получает, поскольку он может игнорировать дополнительные аргументы.) Поскольку сигнатуры совместимы, компилятор может помочь нам обнаружить несоответствия типов. Сигналы и слоты слабо связаны: класскоторый излучает сигнал, не знает и не заботится о том, какие слоты принимают сигнал. "

Механизм слотов сигналов можно сравнить (или свести к минимуму) с вызовом функции.Вы вызываете функцию (слот) в месте, где излучается сигнал.Теперь представьте, что функция ожидает несколько аргументов и значение по умолчанию отсутствует.Но вы пытаетесь вызвать функцию.Что случится?.Вот что происходит в вашем коде.

0 голосов
/ 05 июня 2011

Я думаю, что это не сработает, вы не можете задать слоту аргумент по умолчанию внутри оператора connect.Макросы SLOT на самом деле просто преобразуют свой аргумент в строку и ищут имя слота в списке зарегистрированных слотов для класса text.

Вы должны вызвать свой собственный слот, который не принимает аргументов извонки setPlainText вручную с заданным текстом.Возможно, у Qt есть некоторый вспомогательный класс в этом направлении, но ваше решение не должно работать.

Кстати, вы на самом деле пробовали это и получили ошибку, или вы просто опубликовали это здесь, не пытаясь просто попробовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...