Выравнивание текста |
Здравствуйте, гость ( Вход | Регистрация )
Выравнивание текста |
Гость_Alexey_* |
22.3.2008, 0:39
Сообщение
#1
|
Гости |
При написании многооконного текстового редактора на Qt столкнулся с проблемой :
У меня 2 класса MainWindow и MdiChild. MdiChild наследует QTextEdit. В классе MdiChild есть метод
Компилятор выдает ошибку : 'setAlignment' : is not a member of 'QTextDocument' Помогите разобраться почему выскакивает такая ошибка. Я ведь наследую QTextEdit а не QTextDocument , а setAlignment является членом класса QTextEdit. Сообщение отредактировал Admin - 22.3.2008, 9:49
Причина редактирования: Не забываем про тэг коде, и правильно выбираем раздел ;)
|
|
|
Litkevich Yuriy |
22.3.2008, 0:59
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
хм, по моему ты форум перепутал,здесь ни слова о переводах
|
|
|
Admin |
22.3.2008, 10:13
Сообщение
#3
|
Администратор Группа: Администратор Сообщений: 646 Регистрация: 9.10.2007 Из: crossplatform.ru Пользователь №: 1 Спасибо сказали: 17 раз(а) Репутация: 2 |
|
|
|
Litkevich Yuriy |
22.3.2008, 10:45
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Цитата Помогите разобраться почему выскакивает такая ошибка. Я ведь наследую QTextEdit а не QTextDocument может всетаки напутал с наследованием, если нет покажи исходник |
|
|
Гость_Alexey_* |
22.3.2008, 13:29
Сообщение
#5
|
Гости |
Исходник
CODE //mdichild.h
#ifndef MDICHILD_H #define MDICHILD_H #include <QTextEdit> class MdiChild : public QTextEdit { Q_OBJECT public: MdiChild(); void newFile(); bool loadFile(const QString &fileName); bool save(); bool saveAs(); bool saveFile(const QString &fileName); void ALeft(); void ARight(); void ACenter(); QString userFriendlyCurrentFile(); QString currentFile() { return curFile; } protected: void closeEvent(QCloseEvent *event); private slots: void documentWasModified(); private: bool maybeSave(); void setCurrentFile(const QString &fileName); QString strippedName(const QString &fullFileName); QString curFile; bool isUntitled; }; #endif //mdichild.cpp #include <QtGui> #include "mdichild.h" MdiChild::MdiChild() { setAttribute(Qt::WA_DeleteOnClose); isUntitled = true; connect(textEdit->document(), SIGNAL(contentsChanged()), this, SLOT(documentWasModified())); } void MdiChild::ALeft() { document()->setAlignment(Qt::AlignLeft); } void MdiChild::ARight() { document()->setAlignment(Qt::AlignRight); } void MdiChild::ACenter() { document()->setAlignment(Qt::AlignCenter); } void MdiChild::newFile() { static int sequenceNumber = 1; isUntitled = true; curFile = tr("document%1.txt").arg(sequenceNumber++); setWindowTitle(curFile + "[*]"); } bool MdiChild::loadFile(const QString &fileName) { QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("MDI"), tr("Cannot read file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return false; } QTextStream in(&file); QApplication::setOverrideCursor(Qt::WaitCursor); setPlainText(in.readAll()); QApplication::restoreOverrideCursor(); setCurrentFile(fileName); return true; } bool MdiChild::save() { if (isUntitled) { return saveAs(); } else { return saveFile(curFile); } } bool MdiChild::saveAs() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), curFile); if (fileName.isEmpty()) return false; return saveFile(fileName); } bool MdiChild::saveFile(const QString &fileName) { QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, tr("MDI"), tr("Cannot write file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return false; } QTextStream out(&file); QApplication::setOverrideCursor(Qt::WaitCursor); out << toPlainText(); QApplication::restoreOverrideCursor(); setCurrentFile(fileName); return true; } QString MdiChild::userFriendlyCurrentFile() { return strippedName(curFile); } void MdiChild::closeEvent(QCloseEvent *event) { if (maybeSave()) { event->accept(); } else { event->ignore(); } } void MdiChild::documentWasModified() { setWindowModified(document()->isModified()); } bool MdiChild::maybeSave() { if (document()->isModified()) { int ret = QMessageBox::warning(this, tr("MDI"), tr("'%1' has been modified.\n" "Do you want to save your changes?") .arg(userFriendlyCurrentFile()), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape); if (ret == QMessageBox::Yes) return save(); else if (ret == QMessageBox::Cancel) return false; } return true; } void MdiChild::setCurrentFile(const QString &fileName) { curFile = QFileInfo(fileName).canonicalFilePath(); isUntitled = false; document()->setModified(false); setWindowModified(false); setWindowTitle(userFriendlyCurrentFile() + "[*]"); } QString MdiChild::strippedName(const QString &fullFileName) { return QFileInfo(fullFileName).fileName(); } //MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class QAction; class QMenu; class QWorkspace; class MdiChild; class QSignalMapper; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); protected: void closeEvent(QCloseEvent *event); private slots: void newFile(); void open(); void save(); void saveAs(); void cut(); void copy(); void paste(); void about(); void updateMenus(); void updateWindowMenu(); void AllignLeft(); void AllignRight(); void AllignCenter(); MdiChild *createMdiChild(); private: void createActions(); void createMenus(); void createToolBars(); void createStatusBar(); void readSettings(); void writeSettings(); MdiChild *activeMdiChild(); MdiChild *findMdiChild(const QString &fileName); QWorkspace *workspace; QSignalMapper *windowMapper; QMenu *fileMenu; QMenu *editMenu; QMenu *windowMenu; QMenu *textMenu; QMenu *helpMenu; QToolBar *fileToolBar; QToolBar *editToolBar; QToolBar *textToolBar; QAction *newAct; QAction *openAct; QAction *saveAct; QAction *saveAsAct; QAction *exitAct; QAction *cutAct; QAction *copyAct; QAction *pasteAct; QAction *closeAct; QAction *closeAllAct; QAction *tileAct; QAction *cascadeAct; QAction *arrangeAct; QAction *nextAct; QAction *previousAct; QAction *separatorAct; QAction *aboutAct; QAction *allignLeftAct; QAction *allignRightAct; QAction *allignCenterAct; }; #endif //MainWindow.cpp #include <QtGui> #include "mainwindow.h" #include "mdichild.h" MainWindow::MainWindow() { workspace = new QWorkspace; setCentralWidget(workspace); connect(workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(updateMenus())); windowMapper = new QSignalMapper(this); connect(windowMapper, SIGNAL(mapped(QWidget *)), workspace, SLOT(setActiveWindow(QWidget *))); createActions(); createMenus(); createToolBars(); createStatusBar(); updateMenus(); readSettings(); setWindowTitle(tr("Text redactor")); } void MainWindow::closeEvent(QCloseEvent *event) { workspace->closeAllWindows(); if (activeMdiChild()) { event->ignore(); } else { writeSettings(); event->accept(); } } void MainWindow::newFile() { MdiChild *child = createMdiChild(); child->newFile(); child->show(); } void MainWindow::open() { QString fileName = QFileDialog::getOpenFileName(this); if (!fileName.isEmpty()) { MdiChild *existing = findMdiChild(fileName); if (existing) { workspace->setActiveWindow(existing); return; } MdiChild *child = createMdiChild(); if (child->loadFile(fileName)) { statusBar()->showMessage(tr("File loaded"), 2000); child->show(); } else { child->close(); } } } /*********************************************/ void MainWindow::AllignLeft() { activeMdiChild()->ALeft(); } void MainWindow::AllignRight() { activeMdiChild()->ARight(); } void MainWindow::AllignCenter() { activeMdiChild()->ACenter(); } /*********************************************/ void MainWindow::save() { if (activeMdiChild()->save()) statusBar()->showMessage(tr("File saved"), 2000); } void MainWindow::saveAs() { if (activeMdiChild()->saveAs()) statusBar()->showMessage(tr("File saved"), 2000); } void MainWindow::cut() { activeMdiChild()->cut(); } void MainWindow::copy() { activeMdiChild()->copy(); } void MainWindow::paste() { activeMdiChild()->paste(); } void MainWindow::about() { QMessageBox::about(this, tr("About MDI"), tr(" Tsimbal Alexey \n gr 450502 \n 2008")); } void MainWindow::updateMenus() { bool hasMdiChild = (activeMdiChild() != 0); saveAct->setEnabled(hasMdiChild); saveAsAct->setEnabled(hasMdiChild); pasteAct->setEnabled(hasMdiChild); closeAct->setEnabled(hasMdiChild); closeAllAct->setEnabled(hasMdiChild); tileAct->setEnabled(hasMdiChild); cascadeAct->setEnabled(hasMdiChild); arrangeAct->setEnabled(hasMdiChild); nextAct->setEnabled(hasMdiChild); previousAct->setEnabled(hasMdiChild); separatorAct->setVisible(hasMdiChild); bool hasSelection = (activeMdiChild() && activeMdiChild()->textCursor().hasSelection()); cutAct->setEnabled(hasSelection); copyAct->setEnabled(hasSelection); } void MainWindow::updateWindowMenu() { windowMenu->clear(); windowMenu->addAction(closeAct); windowMenu->addAction(closeAllAct); windowMenu->addSeparator(); windowMenu->addAction(tileAct); windowMenu->addAction(cascadeAct); windowMenu->addAction(arrangeAct); windowMenu->addSeparator(); windowMenu->addAction(nextAct); windowMenu->addAction(previousAct); windowMenu->addAction(separatorAct); QList<QWidget *> windows = workspace->windowList(); separatorAct->setVisible(!windows.isEmpty()); for (int i = 0; i < windows.size(); ++i) { MdiChild *child = qobject_cast<MdiChild *>(windows.at(i)); QString text; if (i < 9) { text = tr("&%1 %2").arg(i + 1) .arg(child->userFriendlyCurrentFile()); } else { text = tr("%1 %2").arg(i + 1) .arg(child->userFriendlyCurrentFile()); } QAction *action = windowMenu->addAction(text); action->setCheckable(true); action ->setChecked(child == activeMdiChild()); connect(action, SIGNAL(triggered()), windowMapper, SLOT(map())); windowMapper->setMapping(action, child); } } MdiChild *MainWindow::createMdiChild() { MdiChild *child = new MdiChild; workspace->addWindow(child); connect(child, SIGNAL(copyAvailable(bool)), cutAct, SLOT(setEnabled(bool))); connect(child, SIGNAL(copyAvailable(bool)), copyAct, SLOT(setEnabled(bool))); return child; } void MainWindow::createActions() { newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this); newAct->setShortcut(tr("Ctrl+N")); newAct->setStatusTip(tr("Create a new file")); connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this); openAct->setShortcut(tr("Ctrl+O")); openAct->setStatusTip(tr("Open an existing file")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); saveAct = new QAction(QIcon(":/images/save.png"), tr("&Save"), this); saveAct->setShortcut(tr("Ctrl+S")); saveAct->setStatusTip(tr("Save the document to disk")); connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); saveAsAct = new QAction(tr("Save &As..."), this); saveAsAct->setStatusTip(tr("Save the document under a new name")); connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); exitAct = new QAction(tr("E&xit"), this); exitAct->setShortcut(tr("Ctrl+Q")); exitAct->setStatusTip(tr("Exit the application")); connect(exitAct, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this); cutAct->setShortcut(tr("Ctrl+X")); cutAct->setStatusTip(tr("Cut the current selection's contents to the " "clipboard")); connect(cutAct, SIGNAL(triggered()), this, SLOT(cut())); copyAct = new QAction(QIcon(":/images/copy.png"), tr("&Copy"), this); copyAct->setShortcut(tr("Ctrl+C")); copyAct->setStatusTip(tr("Copy the current selection's contents to the " "clipboard")); connect(copyAct, SIGNAL(triggered()), this, SLOT(copy())); pasteAct = new QAction(QIcon(":/images/paste.png"), tr("&Paste"), this); pasteAct->setShortcut(tr("Ctrl+V")); pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current " "selection")); connect(pasteAct, SIGNAL(triggered()), this, SLOT(paste())); closeAct = new QAction(tr("Cl&ose"), this); closeAct->setShortcut(tr("Ctrl+F4")); closeAct->setStatusTip(tr("Close the active window")); connect(closeAct, SIGNAL(triggered()), workspace, SLOT(closeActiveWindow())); closeAllAct = new QAction(tr("Close &All"), this); closeAllAct->setStatusTip(tr("Close all the windows")); connect(closeAllAct, SIGNAL(triggered()), workspace, SLOT(closeAllWindows())); tileAct = new QAction(tr("&Tile"), this); tileAct->setStatusTip(tr("Tile the windows")); connect(tileAct, SIGNAL(triggered()), workspace, SLOT(tile())); cascadeAct = new QAction(tr("&Cascade"), this); cascadeAct->setStatusTip(tr("Cascade the windows")); connect(cascadeAct, SIGNAL(triggered()), workspace, SLOT(cascade())); arrangeAct = new QAction(tr("Arrange &icons"), this); arrangeAct->setStatusTip(tr("Arrange the icons")); connect(arrangeAct, SIGNAL(triggered()), workspace, SLOT(arrangeIcons())); nextAct = new QAction(tr("Ne&xt"), this); nextAct->setShortcut(tr("Ctrl+F6")); nextAct->setStatusTip(tr("Move the focus to the next window")); connect(nextAct, SIGNAL(triggered()), workspace, SLOT(activateNextWindow())); previousAct = new QAction(tr("Pre&vious"), this); previousAct->setShortcut(tr("Ctrl+Shift+F6")); previousAct->setStatusTip(tr("Move the focus to the previous " "window")); connect(previousAct, SIGNAL(triggered()), workspace, SLOT(activatePreviousWindow())); //*******************************************// allignLeftAct = new QAction(QIcon(":/images/textleft.png"), tr("A&llign Left"), this); allignLeftAct->setShortcut(tr("Ctrl+l")); allignLeftAct->setStatusTip(tr("Allign text left")); connect(allignLeftAct, SIGNAL(triggered()), this, SLOT(AllignLeft())); allignRightAct = new QAction(QIcon(":/images/textright.png"), tr("Allign Ri&gh"), this); allignRightAct->setShortcut(tr("Ctrl+g")); allignRightAct->setStatusTip(tr("Allign text right")); connect(allignRightAct, SIGNAL(triggered()), this, SLOT(AllignRigh())); allignCenterAct = new QAction(QIcon(":/images/textcenter.png"), tr("Allign cente&r"), this); allignCenterAct->setShortcut(tr("Ctrl+r")); allignCenterAct->setStatusTip(tr("Allign text center")); connect(allignCenterAct, SIGNAL(triggered()), this, SLOT(AllignCenter())); //*******************************************// separatorAct = new QAction(this); separatorAct->setSeparator(true); aboutAct = new QAction(tr("&About"), this); aboutAct->setStatusTip(tr("Show the application's About box")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); } void MainWindow::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); fileMenu->addAction(saveAct); fileMenu->addAction(saveAsAct); fileMenu->addSeparator(); fileMenu->addAction(exitAct); editMenu = menuBar()->addMenu(tr("&Edit")); editMenu->addAction(cutAct); editMenu->addAction(copyAct); editMenu->addAction(pasteAct); textMenu = menuBar()->addMenu(tr("&Text")); textMenu->addAction(allignLeftAct); textMenu->addAction(allignRightAct); textMenu->addAction(allignCenterAct); windowMenu = menuBar()->addMenu(tr("&Window")); connect(windowMenu, SIGNAL(aboutToShow()), this, SLOT(updateWindowMenu())); menuBar()->addSeparator(); helpMenu = menuBar()->addMenu(tr("&About")); helpMenu->addAction(aboutAct); } void MainWindow::createToolBars() { fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); fileToolBar->addAction(saveAct); editToolBar = addToolBar(tr("Edit")); editToolBar->addAction(cutAct); editToolBar->addAction(copyAct); editToolBar->addAction(pasteAct); textToolBar = addToolBar(tr("Text")); textToolBar->addAction(allignLeftAct); textToolBar->addAction(allignCenterAct); textToolBar->addAction(allignRightAct); } void MainWindow::createStatusBar() { statusBar()->showMessage(tr("Ready")); } void MainWindow::readSettings() { QSettings settings("Trolltech", "MDI Example"); QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); QSize size = settings.value("size", QSize(400, 400)).toSize(); move(pos); resize(size); } void MainWindow::writeSettings() { QSettings settings("Trolltech", "MDI Example"); settings.setValue("pos", pos()); settings.setValue("size", size()); } MdiChild *MainWindow::activeMdiChild() { return qobject_cast<MdiChild *>(workspace->activeWindow()); } MdiChild *MainWindow::findMdiChild(const QString &fileName) { QString canonicalFilePath = QFileInfo(fileName).canonicalFilePath(); foreach (QWidget *window, workspace->windowList()) { MdiChild *mdiChild = qobject_cast<MdiChild *>(window); if (mdiChild->currentFile() == canonicalFilePath) return mdiChild; } return 0; } //main.cpp #include <QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { Q_INIT_RESOURCE(mdi); QApplication app(argc, argv); MainWindow mainWin; mainWin.show(); return app.exec(); } |
|
|
Litkevich Yuriy |
22.3.2008, 13:48
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
есть такие строки в mdichild.cpp:
а кто такой textEdit, он нигде необъявлен Сообщение отредактировал Litkevich Yuriy - 22.3.2008, 13:50 |
|
|
Гость_Alexey_* |
22.3.2008, 13:52
Сообщение
#7
|
Гости |
это я пытался объявить в классе mdichild QTextEdit *textEdit и попытаться с помощью него выравнивание сделать и забыл убрать, там должно быть:
CODE connect(document(), SIGNAL(contentsChanged()),
this, SLOT(documentWasModified())); |
|
|
Litkevich Yuriy |
22.3.2008, 14:04
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
посмотри объявление:
метод document () возвращает тип = указатель на QTextDocument, затем ты к нему применяешь setAlignment(), а его в классе QTextDocument нет. так что компиллер прав Сообщение отредактировал Litkevich Yuriy - 22.3.2008, 14:05 |
|
|
Litkevich Yuriy |
22.3.2008, 14:11
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
я сделал в этом файле так:
и вроде получилось то что ты хотел, ну выравнивание покрайней мере работает --- хотя нет, правое выравнивание не происходит --- в файле MainWindow.cpp в этой строке: Цитата connect(allignRightAct, SIGNAL(triggered()), this, SLOT(AllignRigh())); ошибка(жирное), должно быть AllignRight Сообщение отредактировал Litkevich Yuriy - 22.3.2008, 14:37 |
|
|
Гость_Alexey_* |
22.3.2008, 20:08
Сообщение
#10
|
Гости |
О, теперь и у меня выравнивает.Спасибо за помощ.
|
|
|
Текстовая версия | Сейчас: 14.1.2025, 8:21 |