[SOLVED] QPushButton. I click on the button, but nothing not happend.
-
wrote on 17 Jul 2012, 08:07 last edited by
I deleted the old "okButton".
I created a new button.@<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>140</x>
<y>50</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>@And in the "Slot dialog" I selected "clicked(bool)" event.
@void setRefreshSpeed::on_pushButton_clicked(bool checked)
{ ... }@But nothing.
I doing something wrong. :( -
wrote on 17 Jul 2012, 08:10 last edited by
Don't rely on these automatic use-a-specific-name-to-connect features. It is a nightmare to no end, and IMHO it should never have been introduced.
Simply create a slot that has a name that actually describes what happens, not on what condition it is triggered. Then, explicitly connect the buttons clicked() signal with that slot.
It will make your life easier as you go along.
-
wrote on 17 Jul 2012, 08:56 last edited by
[quote author="Andre" date="1342512606"]Simply create a slot that has a name that actually describes what happens, not on what condition it is triggered. Then, explicitly connect the buttons clicked() signal with that slot.[/quote]
I-sty, our wiki has "a simple example about QPushButton and its signals":http://qt-project.org/wiki/How_to_Use_QPushButton.
-
wrote on 17 Jul 2012, 09:38 last edited by
[quote author="leon.anavi" date="1342515413"]
I-sty, our wiki has "a simple example about QPushButton and its signals":http://qt-project.org/wiki/How_to_Use_QPushButton.
[/quote]Thanks Leon, but the button isn't display.
setrefreshspeed.cpp
@#include <QPushButton>
#include "setrefreshspeed.h"
#include "ui_setrefreshspeed.h"
#include "mainwindow.h"//
// Global variables
//setRefreshSpeed::setRefreshSpeed(QWidget *parent) :
QDialog(parent),
ui(new Ui::setRefreshSpeed)
{
ui->setupUi(this);QPushButton *button = new QPushButton(this); button->setText("Apply"); button->setGeometry(QRect(QPoint(150, 50), QSize(75, 23))); connect(button, SIGNAL(clicked()), this, SLOT(apply()));
}
setRefreshSpeed::~setRefreshSpeed()
{
delete ui;
}void setRefreshSpeed::apply()
{
QApplication::beep();
//MainWindow::freq = ui->spinBox->value();
//ui->setupUi(this);
//setRefreshSpeed::close();
}
@mainwindow.cpp
@void MainWindow::on_actionOther_triggered()
{
Ui::setRefreshSpeed something;
QDialog *d = new QDialog;
something.setupUi(d);
d->show();
}
@ -
wrote on 17 Jul 2012, 10:35 last edited by
You need to add the button to the layout and then for the mainwindow/dialog u need to set the layout by calling setLayout(m_layout);
-
wrote on 17 Jul 2012, 10:47 last edited by
@#include "setrefreshspeed.h"
#include "ui_setrefreshspeed.h"
#include "mainwindow.h"#include <QPushButton>
#include <QtCore/QCoreApplication>
#include <QVBoxLayout>setRefreshSpeed::setRefreshSpeed(QWidget *parent) :
QDialog(parent),
ui(new Ui::setRefreshSpeed)
{
ui->setupUi(this);QVBoxLayout * vlayout = new QVBoxLayout(this); button = new QPushButton("Apply", this); button->setGeometry(QRect(QPoint(150, 50), QSize(75, 23))); connect(button, SIGNAL(released()), this, SLOT(apply())); vlayout->addWidget(button); this->setLayout(vlayout);
}
setRefreshSpeed::~setRefreshSpeed()
{
delete ui;
}void setRefreshSpeed::apply()
{
QApplication::beep();
}
@I created one vlayout, I added button to it, but nothing.
-
wrote on 17 Jul 2012, 10:55 last edited by
The example at the wiki works fine. Using layout is recommended but not mandatory. I guess that your button is not displayed because your UI and the following line:
[quote author="I-sty" date="1342522046"]
@
ui->setupUi(this);
@[/quote]
-
wrote on 17 Jul 2012, 11:08 last edited by
You can "use Qt designer":http://doc.trolltech.com/main-snapshot/designer-connection-mode.html to set up the signal\slot connection.
Alternatively, why not try this (if you want to do it manually in your constructor):
@connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(apply()));@
(I assumed your UI button is still called pushButton?)
-
wrote on 17 Jul 2012, 11:41 last edited by
[quote author="goblincoding" date="1342523306"]You can "use Qt designer":http://doc.trolltech.com/main-snapshot/designer-connection-mode.html to set up the signal\slot connection.
Alternatively, why not try this (if you want to do it manually in your constructor):
@connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(apply()));@
(I assumed your UI button is still called pushButton?)[/quote]
I set a other slot, called "slot1", with Qt designer.
I debuged, and i gave 3 errors."Debugging starts
Object::connect: No such slot QDialog::slot1() in ./ui_setrefreshspeed.h:57
Object::connect: (sender name: 'pushButton')
Object::connect: (receiver name: 'setRefreshSpeed')
Debugging has finished
"This is the line number 57:
@QObject::connect(pushButton, SIGNAL(clicked()), setRefreshSpeed, SLOT(slot1()));
@ -
wrote on 17 Jul 2012, 11:43 last edited by
Did you actually create a slot with that name?
-
wrote on 17 Jul 2012, 11:47 last edited by
[quote author="Andre" date="1342525437"]Did you actually create a slot with that name?[/quote]
Yes.
-
wrote on 17 Jul 2012, 11:48 last edited by
Show us the complete code then, please.
-
wrote on 17 Jul 2012, 11:49 last edited by
Can I upload here the files? Or I can only copying?
-
wrote on 17 Jul 2012, 11:51 last edited by
No, you cannot upload files here. You could use pastebin for code sections, or perhaps a public dropbox folder.
-
wrote on 17 Jul 2012, 11:52 last edited by
[quote author="I-sty" date="1342525774"]Can I upload here the files? Or I can only copying?[/quote]
Your wish . You can zip the project folder upload it somewhere and paste the link here or write all the files.
-
wrote on 17 Jul 2012, 11:54 last edited by
You can do this kind of codes automatically with only using Qt Creator.
It binds events and... with using some dialog windows and wizards!
-
wrote on 17 Jul 2012, 11:55 last edited by
"on the Google Drive":https://docs.google.com/folder/d/0B2_XIe25TBZFYUdDU0FIRVZxMTA/edit
-
wrote on 17 Jul 2012, 13:01 last edited by
Your problem is this:
@
void MainWindow::on_actionOther_triggered()
{
Ui::setRefreshSpeed something;
QDialog *d = new QDialog;
something.setupUi(d);
d->show();
}
@You're creating QDialog object, not a refreshSpeed object and QDialog does not have a slot1() (as your compiler rightfully pointed out). You also do not need to explicitly create or setup the UI (that's kind of the whole point with Qt Designer Form classes :) ). This is what you want:
@
void MainWindow::on_actionOther_triggered()
{
//Ui::setRefreshSpeed something;
setRefreshSpeed *d = new setRefreshSpeed;
d->setAttribute( Qt::WA_DeleteOnClose );
//something.setupUi(d);
d->show();
}
@ -
wrote on 18 Jul 2012, 08:28 last edited by
[quote author="goblincoding" date="1342530066"]Your problem is this:
@
void MainWindow::on_actionOther_triggered()
{
Ui::setRefreshSpeed something;
QDialog *d = new QDialog;
something.setupUi(d);
d->show();
}
@You're creating QDialog object, not a refreshSpeed object and QDialog does not have a slot1() (as your compiler rightfully pointed out). You also do not need to explicitly create or setup the UI (that's kind of the whole point with Qt Designer Form classes :) ). This is what you want:
@
void MainWindow::on_actionOther_triggered()
{
//Ui::setRefreshSpeed something;
setRefreshSpeed *d = new setRefreshSpeed;
d->setAttribute( Qt::WA_DeleteOnClose );
//something.setupUi(d);
d->show();
}
@[/quote]Thanks, goblincoding! :D
I rewrote, and works perfectly.
@void MainWindow::on_actionOther_triggered()
{
short x = freq;
setRefreshSpeed *d = new setRefreshSpeed;
d->setAttribute(Qt::WA_DeleteOnClose);
d->exec();if (freq != x){ timer->start(freq); ui->action1s->setChecked(false); ui->action2s->setChecked(false); ui->action3s->setChecked(false); ui->actionOther->setChecked(true); }
}@
-
wrote on 18 Jul 2012, 08:34 last edited by
So, the topic is solved. Not? :)
This problem is resolved. I'll write the next. :D
12/24