Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Mari As
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 6
1

QMdiSubWindow

23.05.2016, 21:40. Просмотров 972. Ответов 6
Метки нет (Все метки)

I have wtitten a vode from Max Schlee, but it doesn'twork.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MDIProgram::slotWindows()
{
    m_pmnuWindows->clear();
    QAction* pact = m_pmnuWindows->addAction("&Cascade",m_pma,SLOT(cascadeSubWindows()));
    pact->setEnabled(!m_pma->subWindowList().isEmpty());
    pact = m_pmnuWindows->addAction("&Tile",m_pma,SLOT(tileSubWindows()));
    pact->setEnabled(!m_pma->subWindowList().isEmpty());
    m_pmnuWindows->addSeparator();
 
    QList<QMdiSubWindow *> listDoc = m_pma->subWindowList();
 
    for (int i = 0; i < listDoc.size(); ++i)
    {
        pact = m_pmnuWindows->addAction(listDoc.at(i)->windowTitle());
        pact->setCheckable(true);
        pact->setChecked(m_pma->activeSubWindow() == listDoc.at(i));
        connect(pact, SIGNAL(triggered()), m_psigMapper, SLOT(map()));
        m_psigMapper->setMapping(pact, listDoc.at(i));
    }
}
error: C2027: use of undefined type 'QMdiSubWindow'
error: C2227: left of '->windowTitle' must point to class/struct/union/generic type
error: C2664: 'void QSignalMapper::setMapping(QObject *,int)' : cannot convert parameter 2 from 'QMdiSubWindow *const ' to 'int'

Where is my mistake??
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2016, 21:40
Ответы с готовыми решениями:

Использование библиотек FFmpeg в QMdiSubWindow
На ГитХабе есть пример использования библиотек FFmpeg для просмотра камер видеонаблюдения по...


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

Или воспользуйтесь поиском по форуму:
6
0x90h
338 / 298 / 115
Регистрация: 01.10.2015
Сообщений: 915
23.05.2016, 21:52 2
C++ (Qt)
1
#include <QMdiSubWindow>
Is there this string in your MDIProgram.h ?
0
Mari As
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 6
23.05.2016, 22:09  [ТС] 3
No, but when i write it, new errors occured

: moc_mainwindow.obj:-1: error: LNK2019: unresolved external symbol "private: void __thiscall MDIProgram::slotSaveAs(void)" (?slotSaveAs@MDIProgram@@AAEXXZ) referenced in function "private: static void __cdecl MDIProgram::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall@MDIProgram@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z)


debug\untitled.exe:-1: error: LNK1120: 1 unresolved externals
0
0x90h
338 / 298 / 115
Регистрация: 01.10.2015
Сообщений: 915
23.05.2016, 22:12 4
upload your project to forum
0
Mari As
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 6
23.05.2016, 22:22  [ТС] 5
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
64
65
#ifndef MDI_H
#define MDI_H
 
#include <QMainWindow>
#include <QWidget>
#include <QString>
#include <QAction>
#include <QPixmap>
#include <QTextEdit>
#include <QMenu>
#include <QToolBar>
#include <QStatusBar>
#include <QMenuBar>
#include <QSignalMapper>
#include <QMessageBox>
#include <QList>
#include <QApplication>
#include <QMdiArea>
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QSignalMapper>
 
class QMenu;
class QMdiArea;
class QSignalMapper;
class DocWindow;
 
class MDIProgram : public QMainWindow
{
    Q_OBJECT
private:
    QMdiArea* m_pma;
    QMenu* m_pmnuWindows;
    QSignalMapper* m_psigMapper;
    DocWindow* MDIProgram::createNewDoc();
public:
    MDIProgram(QWidget* pwgt = 0);
private slots:
    void slotChangeWindowTitle(const QString&);
private slots:
    void slotNewDoc ( );
    void slotLoad ( );
    void slotSave ( );
    void slotSaveAs ( );
    void slotAbout ( );
    void slotWindows ( );
    void slotSetActiveSubWindow(QWidget*);
};
class DocWindow: public QTextEdit
{
    Q_OBJECT
private:
    QString FileName;
public:
    DocWindow(QWidget* pwgt = 0);
signals:
    void changeWindowTitle(const QString&);
public slots:
    void slotLoad ();
    void slotSave ();
    void slotSaveAs();
};
 
#endif // MDI_H
Добавлено через 30 секунд
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include "mdi.h"
 
MDIProgram::MDIProgram(QWidget* pwgt/*=0*/) : QMainWindow(pwgt)
{
    QAction* pactNew = new QAction("New File", 0);
    pactNew->setText("&New");
    pactNew->setShortcut(QKeySequence("CTRL+N"));
    pactNew->setToolTip("New Document");
    pactNew->setStatusTip("Create a new file");
    pactNew->setWhatsThis("Create a new file");
    //pactNew->setIcon(QPixmap(filenew));
    connect(pactNew, SIGNAL(triggered()), SLOT(slotNewDoc()));
 
    QAction* pactOpen = new QAction("Open File", 0);
    pactOpen->setText("&Open...");
    pactOpen->setShortcut(QKeySequence("CTRL+O"));
    pactOpen->setToolTip("Open Document");
    pactOpen->setStatusTip("Open an existing file");
    pactOpen->setWhatsThis("Open an existing file");
    //pactOpen->setIcon(QPixmap(fileopen));
    connect(pactOpen, SIGNAL(triggered()), SLOT(slotLoad()));
 
    QAction* pactSave = new QAction("Save File", 0);
    pactSave->setText("&Save");
    pactSave->setShortcut(QKeySequence("CTRL+S"));
    pactSave->setToolTip("Save Document");
    pactSave->setStatusTip("Save the file to disk");
    pactSave->setWhatsThis("Save the file to disk");
    //pactSave->setIcon(QPixmap(filesave));
    connect(pactSave, SIGNAL(triggered()), SLOT(slotSave()));
 
    QToolBar* ptbFile = new QToolBar("File Operations");
    ptbFile->addAction(pactNew);
    ptbFile->addAction(pactOpen);
    ptbFile->addAction(pactSave);
    addToolBar(Qt::TopToolBarArea, ptbFile);
 
    QMenu* pmnuFile = new QMenu("&File");
    pmnuFile->addAction(pactNew);
    pmnuFile->addAction(pactOpen);
    pmnuFile->addAction(pactSave);
    pmnuFile->addAction("Save &As...", this, SLOT(slotSaveAs()));
    pmnuFile->addSeparator();
    pmnuFile->addAction("&Quit",qApp,SLOT(closeAllWindows()),QKeySequence("CTRL+Q"));
 
    menuBar()->addMenu(pmnuFile);
 
    m_pmnuWindows = new QMenu("&Windows");
    menuBar()->addMenu(m_pmnuWindows);
    connect(m_pmnuWindows, SIGNAL(aboutToShow()), SLOT(slotWindows()));
    menuBar()->addSeparator();
 
    QMenu* pmnuHelp = new QMenu("&Help");
    pmnuHelp->addAction("&About", this, SLOT(slotAbout()), Qt::Key_F1);
    menuBar()->addMenu(pmnuHelp);
 
    m_pma = new QMdiArea;
    m_pma->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    m_pma->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
 
    setCentralWidget(m_pma);
 
    m_psigMapper = new QSignalMapper(this);
    connect(m_psigMapper,SIGNAL(mapped(QWidget*)),this,SLOT(slotSetActiveSubWindow(QWidget*)));
    statusBar()->showMessage("Ready", 3000);
}
void MDIProgram::slotNewDoc()
{
    createNewDoc()->show();
}
DocWindow* MDIProgram::createNewDoc()
{
    DocWindow* pdoc = new DocWindow;
    m_pma->addSubWindow(pdoc);
    pdoc->setAttribute(Qt::WA_DeleteOnClose);
    pdoc->setWindowTitle("Unnamed Document");
   // pdoc->setWindowIcon(QPixmap(filenew));
    connect(pdoc,SIGNAL(changeWindowTitle(const QString&)),SLOT(slotChangeWindowTitle(const QString&)));
    return pdoc;
}
void MDIProgram::slotChangeWindowTitle(const QString& str)
{
    qobject_cast<DocWindow*>(sender())->setWindowTitle(str);
}
void MDIProgram::slotLoad()
{
    DocWindow* pdoc = createNewDoc();
    pdoc->slotLoad();
    pdoc->show();
}
void MDIProgram::slotSave()
{
    DocWindow *pdoc =(DocWindow*)m_pma->activeSubWindow();
    if (pdoc)
    {
        pdoc->slotSave();
    }
}
 
void MDIProgram::slotAbout()
{
    QMessageBox::about(this, "Application", "MDI Example");
}
void MDIProgram::slotWindows()
{
    m_pmnuWindows->clear();
    QAction* pact = m_pmnuWindows->addAction("&Cascade",m_pma,SLOT(cascadeSubWindows()));
    pact->setEnabled(!m_pma->subWindowList().isEmpty());
    pact = m_pmnuWindows->addAction("&Tile",m_pma,SLOT(tileSubWindows()));
    pact->setEnabled(!m_pma->subWindowList().isEmpty());
    m_pmnuWindows->addSeparator();
 
    QList<QMdiSubWindow*> listDoc = m_pma->subWindowList();
 
    for (int i = 0; i < listDoc.size(); ++i)
    {
        pact = m_pmnuWindows->addAction(listDoc.at(i)->windowTitle());
        pact->setCheckable(true);
        pact->setChecked(m_pma->activeSubWindow() == listDoc.at(i));
        connect(pact, SIGNAL(triggered()), m_psigMapper, SLOT(map()));
        m_psigMapper->setMapping(pact, listDoc.at(i));
    }
}
void MDIProgram::slotSetActiveSubWindow(QWidget* pwgt)
{
    if (pwgt)
    {
        m_pma->setActiveSubWindow(qobject_cast<QMdiSubWindow*>(pwgt));
    }
}
DocWindow::DocWindow(QWidget* pwgt/*=0*/) : QTextEdit(pwgt)
{
 
}
void DocWindow::slotLoad()
{
    QString str = QFileDialog::getOpenFileName();
    if (str.isEmpty())
    {
        return;
    }
    QFile file(str);
    if (file.open(QIODevice::ReadOnly))
    {
        QTextStream stream(&file);
        setPlainText(stream.readAll());
        file.close();
        FileName = str;
        emit changeWindowTitle(FileName);
    }
}
void DocWindow::slotSaveAs()
{
    QString str = QFileDialog::getSaveFileName(0, FileName);
    if (!str.isEmpty())
    {
        FileName = str;
        slotSave();
    }
}
void DocWindow::slotSave()
{
    if (FileName.isEmpty())
    {
        slotSaveAs();
        return;
    }
    QFile file(FileName);
    if (file.open(QIODevice::WriteOnly))
    {
        QTextStream(&file) << toPlainText();
        file.close();
        emit changeWindowTitle(FileName);
    }
}
Добавлено через 23 секунды
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "mdi.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MDIProgram w;
    w.show();
 
    return a.exec();
}
0
0x90h
338 / 298 / 115
Регистрация: 01.10.2015
Сообщений: 915
23.05.2016, 23:46 6
Лучший ответ Сообщение было отмечено Mari As как решение

Решение

What version of Qt is used in your project?

Добавлено через 10 минут
Comment line number 45 in mdi.h, this function (void slotSaveAs ( );) was declared, but no implemented in .cpp
1
Mari As
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 6
24.05.2016, 17:36  [ТС] 7
Yes, you are right.. I have noticed it today, thanks..
0
24.05.2016, 17:36
Ответ Создать тему
Опции темы

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