Название: Слоты. Передача значения по нажатию кнопки Отправлено: passwd root от Декабрь 14, 2011, 08:35 Есть создание элементов в цикле, в том числе и кнопок.
При нажатии кнопки должна вызваться функция которая обработает строку(имя файла для открытия). Как вызвать и определить так слот.(Все время говорит , что нет такого слота) void MainWindow::bookmark() { QWidget *window = new QWidget; window->setWindowTitle("Bookmark"); QFile file("notgeneral.tmp"); QGridLayout *layout = new QGridLayout; if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); for(int i=0;!in.atEnd();i++) { QString str = in.readLine(); QStringList fields = str.split("$"); QLabel *label=new QLabel; label->setText(fields[0]); QPushButton *button1= new QPushButton; button1->setText("-"); QPushButton *button2= new QPushButton; button2->setText("+"); QPushButton *button3= new QPushButton; button3->setText("Play"); layout->addWidget(label,i,0); layout->addWidget(button1,i,1); layout->addWidget(button2,i,2); layout->addWidget(button3,i,3); connect(button1,SIGNAL(clicked()),SLOT()); connect(button2,SIGNAL(clicked()),SLOT()); connect(button3,SIGNAL(clicked()),SLOT(O("/home/user/conds.mkv"))); } } QPushButton *Add= new QPushButton; Add->setText("Add Serial"); layout->addWidget(Add); window->setLayout(layout); connect(Add,SIGNAL(clicked()),SLOT(add())); window->show(); } Public slot: O(QString name); O(QString name) { open(name);} Только изучаю Qt. Долго искал ответ так и не нашел Лучше ответ с примером. Заранее спасибо Название: Re: Слоты. Передача значения по нажатию кнопки Отправлено: kambala от Декабрь 14, 2011, 08:53 только ведь задавали точно такой же вопрос, можно было бы и поиском воспользоваться.
у слота не может быть параметров больше, чем у сигнала. в данном случае у сигнала 0 параметров. если строка фиксированная, то, естественно, нет смысла этим заморачиваться. в ином случае - QSignalMapper, в документации к нему есть отличный пример. Название: Re: Слоты. Передача значения по нажатию кнопки Отправлено: passwd root от Декабрь 23, 2011, 17:12 Спасибо, с этим разобрался.
void MainWindow::add() { QSignalMapper *signalMapper = new QSignalMapper(); QWidget *window2 = new QWidget; QLineEdit *name=new QLineEdit(); QHBoxLayout *layout = new QHBoxLayout; QPushButton *button= new QPushButton; name->setText("ааа"); layout->addWidget(name); layout->addWidget(button); window2->setLayout(layout); connect(button, SIGNAL(clicked()), signalMapper, SLOT(map())); signalMapper->setMapping(button ,QString(name->text())); connect(signalMapper, SIGNAL(mapped(const QString &)), SLOT(clicked1(const QString &))); window2->show(); } По нажатию кнопки должно в функцию отправиться нынешнее состояние QLineEdit , но всегда отправляется ааа , даже если значение менял.(в поле) Где я допустил ошибку? Название: Re: Слоты. Передача значения по нажатию кнопки Отправлено: kambala от Декабрь 23, 2011, 17:15 name->text() возвращает строку в момент обращения к ней, а не хранит указатель на строку. если тебе просто нужно считывать текст какого-то текстэдита, то добавь его в класс и используй его напрямую.
Название: Re: Слоты. Передача значения по нажатию кнопки Отправлено: passwd root от Декабрь 23, 2011, 17:59 не совсем понял. Можно пример ?
Название: Re: Слоты. Передача значения по нажатию кнопки Отправлено: kambala от Декабрь 23, 2011, 18:30 тут лучше создать класс-наследник для того виджета, который ты создаешь в add(), тогда и никаких сигналмапперов не нужно будет.
Код
Название: Re: Слоты. Передача значения по нажатию кнопки Отправлено: passwd root от Декабрь 23, 2011, 20:35 Выдает море ошибок. Например , что нет поля name(после public:). Все это впихнул в mainwindow.cpp. А проще как нибудь нельзя?
Большое спасибо за быстрые ответы.(кроме этого форума не где спросить по Qt). Еще вопросы:есть один виджет(который в первом самом сообщении) , который при формирование получает данные из файла, при нажатии на кнопке в нем вызывается функция(получает из виджета строку через signalMapper) , которая меняет значение в файле, но значение на форме изменится только , если закрыть и по новой открыть. Как мне это изменить ? В Qt работаю из под ubuntu, как мне в ней собрать exe файл ? и как переносить библиотеки и файлы ? Название: Re: Слоты. Передача значения по нажатию кнопки Отправлено: kambala от Декабрь 23, 2011, 21:20 Выдает море ошибок. Например , что нет поля name(после public:). Все это впихнул в mainwindow.cpp. А проще как нибудь нельзя? класс MyWidget вынеси в отдельные файлы класса - так будет лучше, чем громоздить его прямо в mainwindow. ну и пообъявляй или заинклудь используемые классы там (QLineEdit, QPushButton).проще? это и есть проще :) которая меняет значение в файле, но значение на форме изменится только , если закрыть и по новой открыть. Как мне это изменить ? видимо надо после этой операции перечитать файл заново (хотя лучше конечно использовать сохраненные значения, чем напрягать файловую систему лишний раз)В Qt работаю из под ubuntu, как мне в ней собрать exe файл ? и как переносить библиотеки и файлы ? где-то на форуме описывалось как это сделать, поищи. в крайнем случае собери под виндой :) |