Задать вопрос

Как привязать функцию к кнопке QButton в VS2015 QT5 C++?

Добрый вычер. Не получается привязать функцию к кнопке.
Есть 3 файла
1. main.cpp
2. other.cpp
3. header.cpp

main.cpp
#include "Header.h"
using namespace std;

int main(int argc, char *argv[])
{
	QApplication  app(argc, argv);
	QWidget win;
	QFileD ofd;
	win.setWindowTitle("Hello");
	QPushButton *ofdButton = new QPushButton("OPEN", &win);
	QPushButton *startButton = new QPushButton("START", &win);
	QPushButton *graphButton = new QPushButton("GRAPH", &win);
	QPushButton *closeButton = new QPushButton("CLOSE", &win);

	QHBoxLayout *layout = new QHBoxLayout(&win);
	layout->addWidget(ofdButton);
	layout->addWidget(startButton);
	layout->addWidget(graphButton);
	layout->addWidget(closeButton);

	QString filename;
	
	QObject::connect(ofdButton, SIGNAL(s_transmitter()), &win, SLOT(openFile(QString filename)));
	QObject::connect(closeButton, SIGNAL(clicked(bool)), &win, SLOT(close()));
	
	win.show();
	return app.exec();
}


header.cpp
#pragma once
#include <QtWidgets/QApplication>
#include <QtWidgets>
#include <QtGui>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QApplication>
#include <QFileDialog>
#include <QDebug>
#include <QString>
#include <QDialog>
#include <QHBoxLayout>

#include <iostream>


using namespace std;
using namespace cv;


class QFileD : public QWidget
{
	Q_OBJECT
public:

public slots:
	void openFile(QString filename);
signals:
	void s_transmitter();
};


other.cpp
#include "Header.h"

void QFileD::openFile(QString filename)
	{
		filename = QFileDialog::getOpenFileName(
			this,
			"Open Document",
			QDir::currentPath(),
			"All files (*.*) ;; Document files (*.doc *.rtf);; PNG files (*.png)");

		if (!filename.isNull())
		{
			qDebug() << "selected file path : " << filename.toUtf8();
		}
		emit s_transmitter();
	}


Сначала ругался на
signals:
	s_transmitter();

Добавил void
signals:
	void s_transmitter();


Стал ругаться кракозябрами с указанием на класс QfileD.

Нашел одно решение, заменить Qwidget на Йщиоусе
class QFileD : public Qwidget
на
class QFileD : public Qobject
но стали подсвечиваться все «this” как неправильные.

Вроде простая вещь, прицепить функцию к кнопке, а увяз на целый день
  • Вопрос задан
  • 1208 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
vvafree
@vvafree Автор вопроса
Всё решилось. Нашел в примере как делать. https://wiki.qt.io/How_to_Use_QPushButton/ru
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
QPushButton *ofdButton = new QPushButton("OPEN", &win);
// ...
 QObject::connect(ofdButton, SIGNAL(s_transmitter()), &win, SLOT(openFile(QString filename)));

У QPushButton нет такого сигнала, да и не должен он соединиться со слотом принимающим строку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы