Доброго всем времени дня.
Пытаюс вызвать метод при передаче имени объекта в функцию.
Подгружаю данные в таблицу:
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 и С++ новичёк. Учу потихоньку. Прошу сильно не ругать.
Re: Вызов метода при передаче имени объекта в функцию
S>В SLOT(SetAutocol(Direction_0_1)) Direction_0_1, должен быть типом, но, судя по всему, это не тип.
Нет, тут топикстартер хотел вызвать по сигналу вызвать слот с определенным параметром.
Так не выйдет -- слоты вызываются только с параметрами сигнала (можно не всеми или или вообще все проигнорить).
Нужного эффекта можно добиться, сделав мини-слот SetDir01(), в котором дернуть нужное с параметром Direction_0_1.
Или, как вариант -- взять QSignalMapper.
Re: Вызов метода при передаче имени объекта в функцию
GF>Подгружаю данные в таблицу: GF>Direction_0_1 = new QTableWidget(0, 0, Direction_0);
Лучше сразу хорошо делать, использовать QTableView
GF>По нажатию кнопки колонки должны изменить ширину по размеру данных. В первом случае всё работает: GF>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol())); GF>Во втором нет: GF>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol(Direction_0_1)));
Слот не может принимать больше параметров чем испускается в сигнале.
GF>Компилятор не ругается, но результат нулевой.
При таком синтаксисе ошибка во время исполнения, в Output выведется, и connect false вернет
GF>P.S. Я в Qt и С++ новичёк. Учу потихоньку. Прошу сильно не ругать.
А зачем тебе передавать table как параметр?
connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocolDirection_0_1()));
void MainWindow::SetAutocolDirection_0_1()
{
Direction_0_1->resizeColumnsToContents();
}
// Или даже объединить
connect(resizeallcol, &QPushButton::clicked, this, [this](){Direction_0_1->resizeColumnsToContents();});
Re[2]: Вызов метода при передаче имени объекта в функцию
Здравствуйте, Igore, Вы писали:
I>Здравствуйте, Gordon Freeman, Вы писали:
GF>>Доброго всем времени дня. GF>>Пытаюс вызвать метод при передаче имени объекта в функцию. I>Передача дополнительных данных которых нет в сигнале
GF>>Подгружаю данные в таблицу: GF>>Direction_0_1 = new QTableWidget(0, 0, Direction_0); I>Лучше сразу хорошо делать, использовать QTableView
GF>>По нажатию кнопки колонки должны изменить ширину по размеру данных. В первом случае всё работает: GF>>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol())); GF>>Во втором нет: GF>>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol(Direction_0_1))); I>Слот не может принимать больше параметров чем испускается в сигнале.
GF>>Компилятор не ругается, но результат нулевой. I>При таком синтаксисе ошибка во время исполнения, в Output выведется, и connect false вернет
GF>>P.S. Я в Qt и С++ новичёк. Учу потихоньку. Прошу сильно не ругать. I>А зачем тебе передавать table как параметр? I>
I>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocolDirection_0_1()));
I>void MainWindow::SetAutocolDirection_0_1()
I>{
I> Direction_0_1->resizeColumnsToContents();
I>}
I>// Или даже объединить
I>connect(resizeallcol, &QPushButton::clicked, this, [this](){Direction_0_1->resizeColumnsToContents();});
I>
Здравствуйте.
Спасибо всем за ответы.
Программа должна подгружать .csv файлы (коих может быть более дюжины) в таблицы. Затем в таблицах всё фильтроваться (удалять ненужное и т.д.).
Т.к. количество таблиц не фиксировано, я попытался написать универсальную ф-ю, которая выполняля бы нужные операции при передаче в неё указателя на таблицу как параметра.
Если вызываю ф-ю без параметра, при этом в теле её указывая таблицу (мини-слот как указал К13), то всё пашет: connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol()));
Проблема в том, что тогда на каждую таблицу придётся писать отдельную ф-ю.
Re[3]: Вызов метода при передаче имени объекта в функцию
Здравствуйте, Gordon Freeman, Вы писали:
GF>Здравствуйте, Igore, Вы писали:
I>>Здравствуйте, Gordon Freeman, Вы писали:
GF>>>Доброго всем времени дня. GF>>>Пытаюс вызвать метод при передаче имени объекта в функцию. I>>Передача дополнительных данных которых нет в сигнале
GF>>>Подгружаю данные в таблицу: GF>>>Direction_0_1 = new QTableWidget(0, 0, Direction_0); I>>Лучше сразу хорошо делать, использовать QTableView
GF>>>По нажатию кнопки колонки должны изменить ширину по размеру данных. В первом случае всё работает: GF>>>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol())); GF>>>Во втором нет: GF>>>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol(Direction_0_1))); I>>Слот не может принимать больше параметров чем испускается в сигнале.
GF>>>Компилятор не ругается, но результат нулевой. I>>При таком синтаксисе ошибка во время исполнения, в Output выведется, и connect false вернет
GF>>>P.S. Я в Qt и С++ новичёк. Учу потихоньку. Прошу сильно не ругать. I>>А зачем тебе передавать table как параметр? I>>
I>>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocolDirection_0_1()));
I>>void MainWindow::SetAutocolDirection_0_1()
I>>{
I>> Direction_0_1->resizeColumnsToContents();
I>>}
I>>// Или даже объединить
I>>connect(resizeallcol, &QPushButton::clicked, this, [this](){Direction_0_1->resizeColumnsToContents();});
I>>
GF>Здравствуйте. GF>Спасибо всем за ответы.
GF>Программа должна подгружать .csv файлы (коих может быть более дюжины) в таблицы. Затем в таблицах всё фильтроваться (удалять ненужное и т.д.). GF>Т.к. количество таблиц не фиксировано, я попытался написать универсальную ф-ю, которая выполняля бы нужные операции при передаче в неё указателя на таблицу как параметра. GF>Если вызываю ф-ю без параметра, при этом в теле её указывая таблицу (мини-слот как указал К13), то всё пашет: connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol())); GF>Проблема в том, что тогда на каждую таблицу придётся писать отдельную ф-ю.
А ларчик просто открвыался:
connect(resizeallcol, SIGNAL(clicked()), Direction_0_1, SLOT(resizeColumnsToContents()));
Re[4]: Вызов метода при передаче имени объекта в функцию
Здравствуйте, Gordon Freeman, Вы писали: GF>А ларчик просто открвыался: GF>connect(resizeallcol, SIGNAL(clicked()), Direction_0_1, SLOT(resizeColumnsToContents()));
Да, совсем заработался и на лямбдах зациклился , можно еще это же самое сделать не в коде, а в дизайнере. Изменение сигнал/слотов(F4),
Здравствуйте, Igore, Вы писали:
GF>>Подгружаю данные в таблицу: GF>>Direction_0_1 = new QTableWidget(0, 0, Direction_0); I>Лучше сразу хорошо делать, использовать QTableView
А в чём проблема применения QTableWidget?
Вот здесь: http://www.cyberforum.ru/qt/thread238089.html
пишут о том, что если у нас менее чем примерно 500 строк, то удобнее применять QTableWidget (обеспечивает более удобное API).
Здравствуйте, AlexGin, Вы писали:
GF>>>Подгружаю данные в таблицу: GF>>>Direction_0_1 = new QTableWidget(0, 0, Direction_0); I>>Лучше сразу хорошо делать, использовать QTableView AG>А в чём проблема применения QTableWidget?
Да ни в чем, просто при использовании QTableView у тебя появится модель(отдельно), а дальше как обычно бывает, QTableView мигрирует в QTreeView, или надо QItemSelectionModel на несколько View или отдельные делегаты для колонок или QProxyModel нужна, в общем ИМХО когда настанет час Ха лучше чтобы у тебя была модель и QTableView, чем только QTableWidget где все перемешано.
Re: Вызов метода при передаче имени объекта в функцию
Здравствуйте, Gordon Freeman, Вы писали:
GF>connect(resizeallcol, SIGNAL(clicked()), this, SLOT(SetAutocol(Direction_0_1))); GF>.... GF>void MainWindow::SetAutocol(QTableWidget *table) GF>{ GF> table->resizeColumnsToContents(); GF>}
GF>Компилятор не ругается, но результат нулевой. GF>Есть идеи?
Если я правильно понял чего ты хочешь, то лямбда твой друг: