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()));
}
Подробней про новый способ подлючения слотов (англ.)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как сделать так, чтобы после вывода 20 рандомных чисел пиcалось есть чётные числа или нет?
Написал функцию создания матрицы и подсчета её определителя, но не могу написать функцию вывода матрицыВместо всех строк и столбцов вывод...