Answer the question
In order to leave comments, you need to log in
Qt. How to use signals-slots?
In general, I can not understand how to do it. It would be nice if you showed on this example how to implement.
I decided to make a mass converter from Russian folk to Sishnye.
Here is what I coded:
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication MyApp(argc,argv);
// Меры масс
QStringList ListWeight1, ListWeight2;
// Ввод
ListWeight1 << "БЕРКОВЕЦ" << "ПУД"
<< "ФУНТ" << "ЛОТ"
<< "ЗОЛОТНИК" << "ДОЛЯ";
// Вывод
ListWeight2 << "ГРАММ" << "КИЛОГРАММ"
<< "МИЛИГРАММ" << "ТОННА";
// создать объект для хранения шрифта
QFont Font[2]; // два шрифта
Font[0].setPointSize(12); // для заголовка
Font[1].setPointSize(10); // для текста
// Базовый объект (окно)
QWidget Base; // создать базовый объект
Base.setWindowFlags(
Qt::WindowCloseButtonHint);
Base.setWindowTitle("Конвертер Масс");
Base.setFixedSize(400,250); // задать фиксированные ширину и высоту
Base.show(); // отобразить базовый объект
// Заголовок
QLabel Title(&Base); // создать объект-метку
Title.resize(200,50); // задать размер объекта
Title.move(100,0); // задать расположение объекта
Title.setAlignment(Qt::AlignCenter); // выровнивить содержиме по центру
Title.setText("КОНВЕРТЕР МАСС"); // задать отображаемый текст
Title.setFont(Font[0]); // установить настройки текста для объекта
Title.show(); // отобразить объект-метку
// Поле для значения веса (ввод)
QLineEdit Input(&Base);
Input.resize(150,30);
Input.move(25,70);
Input.setFont(Font[1]);
Input.show();
// Выпадающий список с единицами веса (ввод)
QComboBox UnitInput(&Base);
UnitInput.resize(150,30);
UnitInput.move(225,70);
UnitInput.setFont(Font[1]);
UnitInput.addItems(ListWeight1);
UnitInput.show();
// Поле для значения веса (вывод)
QLineEdit Output(&Base);
Output.resize(150,30);
Output.move(25,140);
Output.setReadOnly(true); // запрет редактирования
Output.show();
// Выпадающий список с единицами веса (вывод)
QComboBox UnitOutput(&Base);
UnitOutput.resize(150,30);
UnitOutput.move(225,140);
UnitOutput.setFont(Font[1]);
UnitOutput.addItems(ListWeight2);
UnitOutput.show();
// Кнопка для вычисления
QPushButton Button(&Base);
Button.resize(100,30);
Button.move(150,200);
Button.setText("ВЫЧИСЛИТЬ");
Button.setFont(Font[1]);
Button.show();
return MyApp.exec();
}
Answer the question
In order to leave comments, you need to log in
No, we start a new slot somewhere and send a signal to it.
There are two ways to create a new slot: either inherit from QObject or its descendant (it's convenient to inherit the main form), or use the C++11 lambda function. Since all of our forms are on the stack, it's easiest to write a lambda.
connect(&Button, &QPushButton::clicked,
&Base, [&]() {
// тут код
});
What, did you get a version of the tutorial without signal and slot examples at all? Maybe at least create a class, there are no signals and slots in main.cpp .
MyApp.exec(); - and there is an infinite loop
Make a separate class for the window. Those. something like this:
main.cpp :
#include "mainwindow.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QPushButton>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void buttonPressed();
private:
void setupUi();
QPushButton *pushButton;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setupUi();
}
MainWindow::~MainWindow()
{
}
void MainWindow::buttonPressed()
{
QMessageBox::warning(this, "Hello", "Hello, World");
}
void MainWindow::setupUi()
{
if (objectName().isEmpty())
setObjectName(QStringLiteral("MainWindow"));
resize(400, 300);
setCentralWidget(new QWidget(this));
pushButton = new QPushButton(centralWidget());
pushButton->setObjectName(QStringLiteral("pushButton"));
pushButton->setGeometry(QRect(90, 90, 92, 27));
connect(pushButton, SIGNAL(clicked(bool)), this, SLOT(buttonPressed()));
}
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TEMPLATE = app
TARGET = untitled27
INCLUDEPATH += .
HEADERS += mainwindow.h
SOURCES += main.cpp mainwindow.cpp
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question