q2 главное стартовое окно. У него есть кнопка QButton pushButton. При нажатии на неё должно появляться другое окно из класса online с выводом списка, который передается параметром в конструкторе q2. Видел примеры кода в интернете, делал так же, но почему-то по нажатию ничего не происходит
main.cpp
#include "q2.h"
#include "online.h"
#include <QtWidgets/QApplication>
#include <string>
#include <stack>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
stack <string> s;
s.push("Roman");
s.push("Marina");
q2 w(s);
w.show();
return a.exec();
}
q2.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_q2.h"
#include "ui_online.h"
#include "online.h"
#include <string>
class q2 : public QMainWindow
{
Q_OBJECT
public:
q2(QWidget *parent = Q_NULLPTR);
q2(stack <string> s);
public slots:
void CreateOnline(stack <string> sta)
{
online* one = new online;
one->online::showOnline(sta);
one->QWidget::show();
}
private:
Ui::q2Class ui;
};
online.h
#include <QWidget>
#include <QStandardItemModel>
#include "ui_online.h"
#include <string>
#include <stack>
#include <QListView>
using namespace std;
class online : public QWidget
{
Q_OBJECT
public:
online(QWidget *parent = Q_NULLPTR);
void showOnline(stack <string> s);
private:
Ui::online ui;
};
online.cpp
online::online(QWidget *parent) : QWidget(parent)
{
ui.setupUi(this);
}
void online::showOnline(stack <string> s)
{
QStandardItemModel *model = new QStandardItemModel;
QStandardItem *item;
while (!s.empty())
{
string g = s.top();
s.pop();
QString qstr = QString::fromStdString(g);
item = new QStandardItem(qstr);
model->appendRow(item);
}
ui.listView->setModel(model);
}
q2.cpp
q2::q2(QWidget *parent): QMainWindow(parent)
{
ui.setupUi(this);
QObject::connect(ui.pushButton, SIGNAL(clicked()), qApp, SLOT(close()));
}
q2::q2(stack <string> s)
{
ui.setupUi(this);
QObject::connect(ui.pushButton, SIGNAL(clicked()), qApp, SLOT(CreateOnline(s)));
QObject::connect(ui.out, SIGNAL(clicked()), this, SLOT(close()));
}
У вас слот не подключается в конструкторе q2::q2(stack<string>)
. Так как во-первых вы пытаететесь подключаться к qApp
, а у него такого слота нет. Во-вторых connect
не поддерживает ни параметры по умолчанию, ни передачу их из вне, то есть SLOT(CreateOnline(s))
вообще ни к месту и как оно скомпилировалось не понятно:
q2::q2(stack <string> s)
{
ui.setupUi(this);
QObject::connect
(
ui.pushButton
, SIGNAL(clicked())
, qApp // видимо имелось в виду this
, SLOT(CreateOnline(s)) // здесь s не передастся
);
QObject::connect(ui.out, SIGNAL(clicked()), this, SLOT(close()));
}
Исправить можно с помощью подключения лямбды например:
q2::q2(stack <string> s)
{
ui.setupUi(this);
QObject::connect
(
ui.pushButton
, &QPushButton::clicked
, [this, s]() -> void // лямбда захватывает s
{
this->CreateOnline(s);
}
);
QObject::connect(ui.out, SIGNAL(clicked()), this, SLOT(close()));
}
Подробней про новый способ подлючения слотов (англ.)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как сделать так, чтобы после вывода 20 рандомных чисел пиcалось есть чётные числа или нет?
Написал функцию создания матрицы и подсчета её определителя, но не могу написать функцию вывода матрицыВместо всех строк и столбцов вывод...