Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
1

Invalid use of 'Ui::MainWindow::MainWindow

23.02.2017, 03:54. Просмотров 1801. Ответов 17
Метки нет (Все метки)

Доброго времени суток, не получается создать обработчик для пунктов меню созданного в дизайнере выдает ошибку:
mainwindow.cpp:13: ошибка: invalid use of 'Ui::MainWindow::MainWindow'
QObject::connect(&ui->MainWindow.action,SIGNAL(changed()),&c,SLOT(onChangedMenuOp en());
C++ (Qt)
1
2
controller c;
QObject::connect(&ui->MainWindow.action,SIGNAL(changed()),&c,SLOT(onChangedMenuOpen());
 Комментарий модератора 
Код С++ в Qt выделяется с помощью тега CPPQT.
Правила именования тем и оформления сообщений в разделе Qt
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2017, 03:54
Ответы с готовыми решениями:

Связать переменные из mainwindow.h и mainwindow.cpp
Здравствуйте! Подскажите, пожалуйста: В файле mainwindow.cpp есть некоторая переменная state...

Invalid use of incomplete type 'class UI::MainWindow'
В чем проблема? Я только начал работать с QT. Пробовал откатывать всё назад, но это не помогло.

Ошибка : QObject::connect(QNetworkReply, MainWindow): invalid null parameter
Сам код connect(reply, &QNetworkReply::downloadProgress, this, &MainWindow::onUpdateProgress); ...

MainWindow
Здравствуйте, ребят nочему nри создании каких либо виджетов , кноnки и т.д они создаются на в...

17
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 06:23 2
Может, просто this? Где это находится и что за action?
1
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 15:15  [ТС] 3
action-пункт menubar созданный в дизайнере,странная иерархия в ui->MainWindow присутствует action, но обратиться к нему нельзя по какой-то причине,зато есть отдельно указатель на action ui->action.
C++ (Qt)
1
QObject::connect(ui->action,SIGNAL(changed()),&c,SLOT(onChangedMenuOpen());
но теперь вылазит другая ошибка
Desktop_Qt_5_8_0_MinGW_32bit-Debug\debug\moc_controller.cpp:71: ошибка: undefined reference to `controller::onChangedMenuOpenStock()'
controller-мой класс объявленный в файле controller.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include <QObject>
 
class controller:public QObject
{
    Q_OBJECT
    public slots:
    void onChangedMenuOpenStock();
};
#endif // CONTROLLER_H
0
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 15:18 4
Файл controller.h подключен?
1
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 15:22  [ТС] 5
C++ (Qt)
1
2
3
4
5
6
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "controller.h"
#include "QObject"
#include "QAction"
#include "QMenuBar"
0
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 15:24 6
Имя слота не совпадает.
0
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 15:55  [ТС] 7
moc_controller.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
void controller::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
    if (_c == QMetaObject::InvokeMetaMethod) {
        controller *_t = static_cast<controller *>(_o);
        Q_UNUSED(_t)
        switch (_id) {
        case 0: _t->onChangedMenuOpenStock(); break;//ругается на эту строчку
        default: ;
        }
    }
    Q_UNUSED(_a);
}
Добавлено через 2 минуты
mainwindow.h
C++ (Qt)
1
SLOT(onChangedMenuOpenStock()
controller.h
C++ (Qt)
1
2
public slots:
    void onChangedMenuOpenStock();
Добавлено через 26 минут
Desktop_Qt_5_8_0_MinGW_32bit-Debug\debug\moc_controller.o:-1: In function `ZN10controller18qt_static_metacallEP7QObjectN11QMetaObject4 CallEiPPv':
0
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 15:59 8
Проект очисти, qmake запусти.
1
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 16:04  [ТС] 9
Цитата Сообщение от nmcf Посмотреть сообщение
Проект очисти
в смысле ?от чего очистить?
0
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 16:16 10
Ну там есть в меню "очистить проект" и qmake.
0
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 16:26  [ТС] 11
Новый проект "test", без классов и всего остального чистая форма один пункт меню----ТА же ошибка
проект Qt Widjets-> desktop
может когда создается MainWindow еще нет доступа к моим классам,connect описан в конструкторе окна
0
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 16:31 12
Из твоего описания не ясно в чём проблема. Доступ к классам не зависит от создания окна, это же типы.
0
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 16:42  [ТС] 13
Если можно тебя попросить найти минутку, создать проект Qt Widjets на форме(в дизайнере) добавить один пункт меню копипаст класс контроллер, и законнектить в конструкторе MainWindow, changed() пункта меню со слотом controller.
0
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 16:49  [ТС] 14
ВОТ
0
Вложения
Тип файла: rar test.rar (4.4 Кб, 2 просмотров)
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 17:00 15
Лучший ответ Сообщение было отмечено imjonhson как решение

Решение

Всё работает. Первую букву в названии пропустил.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include "ontroller.h"
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
 
    ontroller c;
};
 
#endif // MAINWINDOW_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    connect(ui->action_1, SIGNAL(triggered()), &c, SLOT(onChangedMenuOpenStock()));
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef ONTROLLER_H
#define ONTROLLER_H
 
#include <QObject>
 
class ontroller : public QObject
{
    Q_OBJECT
public:
    explicit ontroller(QObject *parent = 0);
 
signals:
 
public slots:
    void onChangedMenuOpenStock();
};
 
#endif // ONTROLLER_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
#include "ontroller.h"
#include <QDebug>
 
ontroller::ontroller(QObject *parent) :
    QObject(parent)
{
}
 
void ontroller::onChangedMenuOpenStock()
{
    qDebug() << "onChangedMenuOpenStock";
}
1
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 17:14  [ТС] 16
Ого... я дико извиняюсь похоже мне в другой раздел "лечение пакости"
0
Миниатюры
Invalid use of 'Ui::MainWindow::MainWindow  
9 / 9 / 8
Регистрация: 02.01.2017
Сообщений: 218
23.02.2017, 17:42  [ТС] 17
Подождите, это же не мой проект с пропущенным символом, и что самое неприятное нашел ошибку,детскую, отсутствие конструктора у controller
0
6822 / 5962 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
23.02.2017, 17:44 18
triggered для выбора.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2017, 17:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

[Решено] 2 MainWindow
Идея проста как камень. две обсалютно индентичные формы вызываються одновременно у каждой формы...

QGraphicsView в MainWindow
Суть моей задумки. Есть главное окно с меню, по нажатии на кнопку (в меню ) Size вызывается...

Перезапуск MainWindow
Создаю программу, рассчитанную на нескольких пользователей. Есть EnterDialog(наследник QWidget) и...

Не срабатывает конструктор MainWindow
Нечто странное происходит при запуске моего приложения. Я устанавливаю точки прерывания в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.