Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для gore-lykovoe
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414

Не работает виджет

03.08.2012, 12:55. Показов 1374. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть готовый виджет Menu, унаследованный от QMenu, не знаю, как заставить его работать...
Menu.h
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
26
27
28
29
30
#ifndef MENU_H
#define MENU_H
 
#include <QtGui/QMenu>
#include <QtCore/QString>
 
class QLabel;
class QWidgetAction;
class QFrame;
 
// This menu class can create header in top of menu
class Menu : public QMenu
{
    private:
        QString headerText;
        // Action on the top of menu
        QWidgetAction *headerAction;
        QFrame *headerActionFrame;
        QLabel *headerLabel;
        QLabel *iconLabel;
        int iconSize;
    public:
        Menu(bool useSpecialHeader = true);
        ~Menu();
        void setHeaderIcon(const QIcon &newHeaderIcon);
        void setHeaderText(const QString &newHeaderText);
};
 
 
#endif


Menu.cpp
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <QtGui/QWidgetAction>
#include <QtGui/QFrame>
#include <QtGui/QHBoxLayout>
#include <QtGui/QFont>
#include <QtGui/QLabel>
#include <QtGui/QStyle>
#include <QtGui/QIcon>
#include "Menu.h"
 
Menu::Menu(bool useSpecialHeader) {
    // Init
    headerAction = 0;
    headerActionFrame = 0;
    headerLabel = 0;
    iconLabel = 0;
    // Create header action if useSpecialHeader == true
    if (useSpecialHeader) {
        headerAction = new QWidgetAction(this);
        headerAction->setEnabled(false);
    
        headerActionFrame = new QFrame;
        headerActionFrame->setFrameShape(QFrame::Box);
    
        headerAction->setDefaultWidget(headerActionFrame);
    
        QHBoxLayout *headerActionFrameLayout = new QHBoxLayout();
        headerActionFrameLayout->setMargin(3);
        headerActionFrameLayout->setSpacing(3);
        headerActionFrame->setLayout(headerActionFrameLayout);
 
        iconLabel = new QLabel;
        headerLabel = new QLabel;
        
        iconSize = style()->pixelMetric(QStyle::PM_SmallIconSize);
        headerActionFrameLayout->insertWidget(-1,iconLabel,0);
        headerActionFrameLayout->insertWidget(-1,headerLabel,20);
        QFont font = headerLabel->font();
        font.setBold(true);
        headerLabel->setFont(font);
    
    
        addAction(headerAction);
    }
}
 
Menu::~Menu() {
    if (headerAction != 0) {
        delete headerLabel;
        delete iconLabel;
        delete headerActionFrame;
        delete headerAction;
    }
}
 
void Menu::setHeaderText(const QString &headerText) {
    if (headerLabel != 0)
        headerLabel->setText(headerText);
}
 
void Menu::setHeaderIcon(const QIcon &icon) {
    if (iconLabel != 0)
        iconLabel->setPixmap(icon.pixmap(iconSize,iconSize));
}


Собственно тут в конструкторе и пытаюсь с ним работать, но menuBar не виден, хотя если выполнить
C++ (Qt)
1
2
QMenu *pmnu = new QMenu("File");
ui->menuBar->addMenu(pmnu);
он будет виден.
mainwindow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "Menu.h"
#include "QMenu"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    Menu *pmnu = new Menu("File");
    //QMenu *pmnu = new QMenu("File");
    pmnu->addAction("Open");
    pmnu->addAction("Save as...");
    pmnu->addAction("About");
    ui->menuBar->addMenu(pmnu);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2012, 12:55
Ответы с готовыми решениями:

не работает виджет
не работает виджет &lt;a class=&quot;fx-widget&quot; data-widget=&quot;economic-calendar&quot; data-format=&quot;fullwidth&quot;...

Не работает виджет на wordpress
Парни, всем привет, проблема такая: 1. есть сайт alarmasystems.ru , в левой колонке даты проектов должны выводиться правильно, а сейчас...

Yii2 не работает виджет
привет всем! только учусь использовать yii2... помогите пожалуйста с таким вопросом. есть самый простой виджет Test &lt;? ...

5
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
03.08.2012, 14:24
а Q_OBJECT инопланетяне украли?
1
 Аватар для gore-lykovoe
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
03.08.2012, 15:44  [ТС]
Цитата Сообщение от l_a_m Посмотреть сообщение
а Q_OBJECT инопланетяне украли?
Из класса Menu? Так в нем же нет сигналов и слотов. Да и реализация Menu - не моя и должна быть рабочая.
Но я все равно попробывал вставить и получил на это уже ошибки:
Menu.obj:-1: error: LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Menu::metaObject(void)const " (?metaObject@Menu@@UBEPBUQMetaObject@@XZ )
Menu.obj:-1: error: LNK2001: unresolved external symbol "public: virtual void * __thiscall Menu::qt_metacast(char const *)" (?qt_metacast@Menu@@UAEPAXPBD@Z)
Menu.obj:-1: error: LNK2001: unresolved external symbol "public: virtual int __thiscall Menu::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Menu@@UAEHW4Call@QMetaObje ct@@HPAPAX@Z)
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
03.08.2012, 16:10
выкиньте и добавьте заново в проект файлы меню, вроде должно полегчать....
1
 Аватар для gore-lykovoe
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
03.08.2012, 16:17  [ТС]
Цитата Сообщение от l_a_m Посмотреть сообщение
выкиньте и добавьте заново в проект файлы меню, вроде должно полегчать....
Да, скомпилировалось без ошибок, но тул-бар по-прежнему не видно.
0
73 / 69 / 1
Регистрация: 19.05.2010
Сообщений: 167
06.08.2012, 15:56
В menu.h конструктор объявлен так:
C++ (Qt)
1
Menu(bool useSpecialHeader)
А в mainwindow.cpp вызывается так:
C++ (Qt)
1
Menu *pmnu = new Menu("File");
соответственно строка преобразуется в bool и вызывается
C++ (Qt)
1
new Menu(true)
Текст заголовка остается пустым
По хорошему, в определении конструктора класса Menu требуется дописать вызов конструктора класса родителя
C++ (Qt)
1
Menu::Menu(bool useSpecialHeader) : QMenu(0)
В итоге: следует более внимательно изучать интерфейс используемого класса
PS можно было не выкидывать файлы, а в меню QtCreator'а выполнить команды Сборка - Очистить все, Сборка - запустить qmake
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2012, 15:56
Помогаю со студенческими работами здесь

Не работает виджет регулировки яркости
На ноутбуке не регулируется яркость экрана через Центр управления -&gt; Управление питанием. Через sysfs регулировать удается. Если записать...

Не работает Виджет Галереии в своей теме
Всем доброго времени суток. Я создал свою тему используя сервис underscores.me/ Установил плагин NextGEN Gallery by Photocrati. ...

Не работает виджет слайдшоу после скачивания копии сайта с сервера
Есть сайт http://bit.ly/1jDrB4N После простого скачивания всех файлов через ftp и последующего локального запуска index.html ...

Виджет погоды перестал работать, пишет - нет подключения, хотя сеть есть, интернет работает нормально
Виджет погоды WeatherCenterRU.v2.6.2, почему -то перестал работать. Пишет - нет подключения, хотя сеть есть, интернет работает нормально.

Виджет
Добрый всем день! Сталкнулся с такой проблемой....Как сделать виджет, чтоб в нем могла отображаться точна такая же погода как на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru