LINUX.ORG.RU

Вызов метода при передаче имени объекта в функцию

 , ,


0

1

Доброго всем времени дня. Пытаюс вызвать метод при передаче имени объекта в функцию.

Подгружаю данные в таблицу: Direction_0_1 = new QTableWidget(0, 0, Direction_0);

По нажатию кнопки колонки должны изменить ширину по размеру данных. В первом случае всё работает: connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol())); .... void MainWindow::SetAutocol() { Direction_0_1->resizeColumnsToContents(); }

Во втором нет: connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol(Direction_0_1))); .... void MainWindow::SetAutocol(QTableWidget *table) { table->resizeColumnsToContents(); }

Компилятор не ругается, но результат нулевой. Есть идеи?

P.S. Я в Qt и С++ новичёк. Учу потихоньку. Прошу сильно не ругать.

SLOT() лишь макро. Там по просту берется нужная декларация метода.

Чтоб передать аргумент в обработчик сигнала, необходимо его указать в emit:

emit someSignal(argument);

Поскольку у тебя сигнал исходит не из твоего кода, то не можешь явно передать аргумент. Можно, например, сделать замыкание (C++11 и выше):

connect(resizeAllCollumns, SIGNAL(clicked), [this] () { Direction_0_1->resizeColumnsToContents(); });
... но оно есть ровно также как и твой первый вариант, только с ненужным выпендрежем.

KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

Спасибо огромное за ответ! Я пытался вызвать метод напрямую. Всё компилится но не работает: connect(resizeallcol, SIGNAL(clicked()), this, SLOT(Direction_0_1->resizeColumnsToContents()));

Попробовал вариант «с выпендрёжем»: mainwindow.cpp:447: error: no matching function for call to ‘MainWindow::connect(QPushButton*&, const char [11], MainWindow::on_checkBox_toggled(bool)::<lambda()>)’ connect(resizeallcol, SIGNAL(clicked()), [this] () {Direction_0_1->resizeColumnsToContents();}); Будем грызть дальше...

Deusex25
() автор топика
Ответ на: комментарий от Deusex25

А ларчик просто открывался: connect(resizeallcol, SIGNAL(clicked()), Direction_0_1, SLOT(resizeColumnsToContents()));

Deusex25
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.