Можно ли переименовать подокно qt?

Я настроил вспомогательное окно в QMdiArea моего главного окна. Затем я сделал QDialog, в котором я хочу, чтобы пользователь вводил название заголовка для окна Sub. Но я всегда получаю сообщение об ошибке при попытке изменить windowTitle () на эту переменную.

Есть ли способ обновить windowTitle ()?

moduleName.cpp

#include "stdafx.h"#include "moduleName.h"#include "iwb4.h"#include <Windows.h>
#include <QtGui/QAction>
#include <qdom.h>
#include <qmdiarea.h>
#include "ui_module_name.h"#include "ui_iwb4.h"#include <qmdisubwindow.h>

moduleName::moduleName(QDialog *parent)
: QDialog(parent)
{
ui.setupUi(this);
show();

// connect ok button to save the module name
connect(ui.okButton, SIGNAL(pressed()), this, SLOT(okClicked()));
}

moduleName::~moduleName()
{

}

void moduleName::okClicked()
{
iwb4 iwb;
QTextDocument* tName = ui.textEdit->document();
iwb.p_name = tName->toPlainText();

moduleName::close();

iwb.name();
}

moduleName.h

#ifndef MODULENAME_H
#define MODULENAME_H

#include <QtGui/QWidget>
#include "ui_module_name.h"

class moduleName : public QDialog
{
Q_OBJECT

public:
moduleName(QDialog *parent = 0);
~moduleName();

public slots:
void okClicked();

protected:
Ui::Dialog ui;

};

#endif // MODULENAME_H

iwb4.cpp

#include "stdafx.h"#include "iwb4.h"#include <Windows.h>
#include "ui_iwb4.h"#include <QtGui/QAction>
#include <qdom.h>
#include <qmdiarea.h>
#include "ui_module_name.h"#include "moduleName.h"#include <qmdisubwindow.h>iwb4::iwb4(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
iwb4::showMaximized();

p_name = " ";

// new module button
connect(ui.actionNewModule, SIGNAL(triggered()), this, SLOT(makeModule()));
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

iwb4::~iwb4()
{

}void iwb4::newModule(QString name)
{
m_file = new QFile("C:\\Users\\Hanna\\Desktop\\iwb\\Projekt\\iwb4\\iwb4\\Datenmodell\\module.xml");
m_file->open(QFile::ReadWrite | QFile::Text);
QDomDocument doc;
doc.setContent(m_file);
m_file->close();

m_dockWidget = new QDockWidget(m_parent);
m_dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
m_dockWidget->showMaximized();
m_dockWidget->setTitleBarWidget(new QWidget());
m_pTableWidget = new QTableWidget(m_dockWidget);
m_dockWidget->setWidget(m_pTableWidget);
addDockWidget(Qt::LeftDockWidgetArea, m_dockWidget);

m_pTableWidget->setRowCount(10);

QDomElement elem = doc.documentElement();
m_pTableWidget->setColumnCount(elem.childNodes().count());
for (int i = 0; i < elem.childNodes().count(); i++)
{
QString header = elem.childNodes().at(i).toElement().attribute("Name");
m_TableHeader += header;
}

m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);
m_pTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
m_pTableWidget->verticalHeader()->setVisible(false);
m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
m_pTableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_pTableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_pTableWidget->setShowGrid(true);
m_pTableWidget->resizeColumnsToContents();
m_pTableWidget->resizeRowsToContents();
m_pTableWidget->setMaximumWidth(400);
m_pTableWidget->setMaximumHeight(300);

connect( m_pTableWidget, SIGNAL( cellDoubleClicked (int, int) ),
this, SLOT( cellSelected( int, int ) ) );
}

void iwb4::makeModule()
{
QString name;
name = p_name;

newModule(name);

QDockWidget *dock = m_dockWidget;
m_subWindow = ui.mdiArea->addSubWindow(dock);
ui.mdiArea->DontMaximizeSubWindowOnActivation;
dock->show();
dock->activateWindow();

// make rename option in right click menu
QMenu *menu = m_subWindow->systemMenu();
rename = new QAction(tr("Rename"),menu);
menu->addAction(rename);
connect(rename, SIGNAL(triggered()), this, SLOT(newName()));
}

void iwb4::newName()
{
moduleName* p_nameDialog = new moduleName();
}

void iwb4::name()
{
QString name = p_name;
m_subWindow->setWindowTitle(name);
}

iwb4.h

#ifndef IWB4_H
#define IWB4_H

#include <QtGui/QMainWindow>
#include "ui_iwb4.h"
class iwb4 : public QMainWindow
{
Q_OBJECT

public:
iwb4(QWidget *parent = 0, Qt::WFlags flags = 0);
~iwb4();

private:

private slots:
void makeModule();

public slots:
void newName();

public:
void newModule(QString name);
void name();

QFile* m_file;
QDockWidget* m_dockWidget;
QTableWidget* m_pTableWidget;
QMdiSubWindow* m_subWindow;
QStringList m_TableHeader;

QString p_name;

QAction *rename;

protected:
Ui::iwb4Class ui;

};

#endif // IWB4_H

введите описание изображения здесь

Спасибо за вашу помощь.

2

Решение

windowTitle() возвращает копию, поэтому эта строка бесполезна (вы изменяете только копию):

window->windowTitle() = name;

Вместо этого просто используйте setWindowTitle непосредственно:

window->setWindowTitle(name);
0

Другие решения

windowTitle () просто возвращает просто еще одну копию заголовка окна, поэтому изменение его не изменит заголовок, который вы хотите изменить.

Если вам нужно изменить заголовок, то используйте напрямую setWindowTitle (name); ,

window-> setWindowTitle (окно-> WindowTitle ()); это бесполезное утверждение, потому что вы снова устанавливаете заголовок окна в исходное название.

0

void iwb4::name()
{
QString name;
name = p_name;
QMdiSubWindow* window;
window = m_subWindow;
window->windowTitle() = name;
window->setWindowTitle(window->windowTitle());
}

window->windowTitle( ) это добытчик.

window->setWindowTitle( ) это сеттер.

Задача getters — получить значение, а задача setters — обновить значение.

Таким образом, работает это будет работать:

void iwb4::name()
{
QString name;
name = "MyNewWindowName";
m_subWindow->setWindowTitle( name );
}

У вас здесь такая же проблема:

void iwb4::makeModule()
{
QString name;
name = p_name;

newModule(name);

QDockWidget *dock = m_dockWidget;
m_subWindow = ui.mdiArea->addSubWindow(dock);
ui.mdiArea->DontMaximizeSubWindowOnActivation;
ui.mdiArea->windowTitle() = name;
ui.mdiArea->setWindowTitle(ui.mdiArea->windowTitle());
dock->show();
dock->activateWindow();

// make rename option in right click menu
QMenu *menu = m_subWindow->systemMenu();
rename = new QAction(tr("Rename"),menu);
menu->addAction(rename);
connect(rename, SIGNAL(triggered()), this, SLOT(newName()));
}

Измените это на:

void iwb4::makeModule()
{
QString name;
name = p_name;

newModule(name);

QDockWidget *dock = m_dockWidget;
m_subWindow = ui.mdiArea->addSubWindow(dock);
ui.mdiArea->DontMaximizeSubWindowOnActivation;
//ui.mdiArea->windowTitle() = name; // <--
ui.mdiArea->setWindowTitle(name); // <--
dock->show();
dock->activateWindow();

// make rename option in right click menu
QMenu *menu = m_subWindow->systemMenu();
rename = new QAction(tr("Rename"),menu);
menu->addAction(rename);
connect(rename, SIGNAL(triggered()), this, SLOT(newName()));
}
0
По вопросам рекламы [email protected]