ui detect mouse event on objects
-
for (int i = 0; i < 48; i++) { QString cbName = "IO_"; cbName.append(QString::number(i + 1)); QCheckBox* cb = ui->SITIPEMaster->findChild<QCheckBox*>(cbName); cb->setChecked(sitipe_master.ptm.id[id].io[i].value); // you can use toggled() or clicked() connect(cb, &QCheckBox::toggled, cb, [id, i](bool checked)) { // here you have 'i' }); }
-
// you can use toggled() or clicked() connect(cb, &QCheckBox::toggled, cb, [id, i](bool checked)) { // here you have 'i'
what exactly happend here?
you connect the checkbox toggled/clicked event to ???
Where can I catch this event for further use? -
@Pfanne
It's a C++ lambda, like an "anonymous function". Search forlambda
on https://wiki.qt.io/New_Signal_Slot_Syntax. @mpergand uses it here to pass thei
value from thefor
loop for you to use in the lambda code, which identifies which checkbox has been toggled. -
I take a look at QButtonGroup, this look like the right object for my usecase.
I tryed this:*.h
private slots: void on_ioGroup_clicked(int id);
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QButtonGroup* ioGroup = new QButtonGroup(this); ioGroup->addButton(ui->IO_1, 1; ioGroup->addButton(ui->IO_2, 2); connect(ioGroup, SIGNAL(buttonClicked(int)), this, SLOT(on_ioGroup_clicked(int))); } ---- void MainWindow::on_ioGroup_clicked(int id) { qDebug() << "id clicked" << id; } ``` but "on_ioGroup-clicked" will not be executed by clicking on IO_1 or IO_2.
-
yes, I also saw that "buttonClicked(int)" is not up to date!
this worked:
connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
this not:
connect(ioGroup, &QButtonGroup::idClicked(int id), this, MainWindow::on_ioGroup_clicked(int id));
-
finaly this worked:
connect(ioGroup, SIGNAL(idClicked(int)), this, SLOT(on_ioGroup_clicked(int)));
void MainWindow::on_ioGroup_clicked(int id) { qDebug() << "id clicked" << id; QAbstractButton* cb = ioGroup->button(id); qDebug() << "Object" << cb->objectName(); }
-
@Pfanne said in ui detect mouse event on objects:
this worked:
connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
Correct.
finaly this worked:
connect(ioGroup, SIGNAL(idClicked(int)), this, SLOT(on_ioGroup_clicked(int)));
Since you had it correct first why change it?
-
@mpergand said in ui detect mouse event on objects:
How to set text color as you do in red in your posts ?
Interesting. I don't know and have never set a text color in any of my posts! :) @Pl45m4 post above with red text for
Text
is the first time I have seen any color.Oh, hang on! Like
buttonClicked()
? LMAO, until today's forum update that was in green, no wonder I didn't know about red! The "color" is just up to the forum style. The important thing is that code is inmonospace
font. Use the Code icon (</>
) when you are typing in. Or`in-line codecharacters`
```
multiline code multiline code
```
First one is single-backtick inline, second one is triple-backtick above and below block. -
-
@JonB said in ui detect mouse event on objects:
Interesting. I don't know and have never set a text color in any of my posts! :) @Pl45m4 post above with red text for Text is the first time I have seen any color.
I use this text format every time I mention some Qt term or class.
QPushButton
,QObject
,Q_OBJECT
.
So did/do you ;-)
I don't know what exactly you did when writing these posts, but I used single backticks (don't know how they are called)
` QPushButton ` (now escaped to make them visible)LMAO, until today's forum update that was in green, no wonder I didn't know about red
I could swear it was red before, with some kind of red-ish background.
At least when used outside of a code section in regular paragraphs. -
@Pfanne said in ui detect mouse event on objects:
connect(ioGroup, &QButtonGroup::idClicked, this, MainWindow::on_ioGroup_clicked);
As I said earlier, you have to pass an address:
connect(ioGroup, &QButtonGroup::idClicked, this,
&
MainWindow::on_ioGroup_clicked);