Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: maria123252 от Июнь 27, 2017, 16:02



Название: [РЕШЕНО]Вызов дополнительных виджетов
Отправлено: maria123252 от Июнь 27, 2017, 16:02
есть небольшой проект, в котором по кнопке создается новый виджет. Проблема в том, что когда для кнопок на дополнительном виджете начинаю прописывать код, кнопки на дополнительном виджете не работают. Связку между главным окном и виджетами вроде сделала (родитель-предок). Но мне кажется, что я неправильно вызываю дополнительные виджеты. Подскажите, пожалуйста, советом.

void Client_mkpu::on_control_channel_clicked()      // кнопка "Управление каналами"
{
    QWidget *widgetControlChannel = new QWidget;
    Ui::management_channels ui_management_channels;
    ui_management_channels.setupUi(widgetControlChannel);
    widgetControlChannel->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint);
    widgetControlChannel->show();
}

Вызываю вот так виджет, а хотелось бы вызывать неновый виджет, а перейти к моему виджету и его классу


Название: Re: Вызов дополнительных виджетов
Отправлено: Racheengel от Июнь 28, 2017, 11:22
Мне кажется, что первое, что надо сделать - это widgetControlChannel оформить отдельным классом-наследником от QWidget.


Название: Re: Вызов дополнительных виджетов
Отправлено: maria123252 от Июнь 28, 2017, 12:17
Мне кажется, что первое, что надо сделать - это widgetControlChannel оформить отдельным классом-наследником от QWidget.
Вот класс наследник, это всё сделано

#include "ui_management_channels.h"
#include "Client_mkpu.h"

namespace Ui {
    class management_channels;
}

class management_channels : public Client_mkpu, private Ui::management_channels
{
    Q_OBJECT

public:
    explicit management_channels(Client_mkpu *parent = 0);
    ~management_channels();

private slots:

private:
    Ui::management_channels *ui_management_channels;
};
//=========================================
management_channels::management_channels(Client_mkpu *parent) :
    Client_mkpu(parent),
    ui_management_channels(new Ui::management_channels)
{
    ui_management_channels->setupUi(this);
}

management_channels::~management_channels()
{
    delete ui_management_channels;
}


Название: Re: Вызов дополнительных виджетов
Отправлено: kambala от Июнь 28, 2017, 12:28
виджет нужного класса надо создавать через
Код
C++ (Qt)
management_channels *widgetControlChannel = new management_channels(this);
вместо
Код
C++ (Qt)
QWidget *widgetControlChannel = new QWidget;
Ui::management_channels ui_management_channels;
ui_management_channels.setupUi(widgetControlChannel);
если я правильно понял суть вопроса


Название: Re: Вызов дополнительных виджетов
Отправлено: maria123252 от Июнь 28, 2017, 12:41
виджет нужного класса надо создавать через
Код
C++ (Qt)
management_channels *widgetControlChannel = new management_channels(this);
вместо
Код
C++ (Qt)
QWidget *widgetControlChannel = new QWidget;
Ui::management_channels ui_management_channels;
ui_management_channels.setupUi(widgetControlChannel);
если я правильно понял суть вопроса
и в дальнейшем я перейду на класс и буду пользоваться функциями в классе?


Название: Re: Вызов дополнительных виджетов
Отправлено: maria123252 от Июнь 28, 2017, 13:39
реализовала по вашей рекомендации, но теперь по кнопке выходит виджет, с наложением от главного окна
void Client_mkpu::on_telemetry_mkpu_clicked()       // кнопка "Телеметрия МКПУ"
{
    telemetry_mkpu *widgetTelemetryMkpu = new telemetry_mkpu(this);
    widgetTelemetryMkpu->show();
}


Название: Re: Вызов дополнительных виджетов
Отправлено: kambala от Июнь 28, 2017, 15:14
я ж не говорил выкинуть установку флагов окна :)


Название: Re: Вызов дополнительных виджетов
Отправлено: maria123252 от Июнь 28, 2017, 15:40
я ж не говорил выкинуть установку флагов окна :)
а если их оставить, то получается следующее.


Название: Re: Вызов дополнительных виджетов
Отправлено: kambala от Июнь 28, 2017, 21:49
а, там не хватает флага Qt::Window