Привет всем!
Появился непонятный глюк с QTextEdit. В общем создал свой класс, который наследует только QTextEdit. В классе пока (теперь) ничего нет. Создаю объект в главном окне (на центральном виджете). Устанавливаю геометрию сего виджета и все. Запускаю, все нормально отображается. Далее ввожу текст в мое поле, пытаюсь выделить посимвольно, но ничего не получается. Удается выделить только либо все слово целиком, либо всю строку (или параграф). Т.е. отдельные буквы в слове мышью не получается выделить (когда мышью пытаюсь выделить, даже синей подсветки выделения НЕТ!).
Думал какие глюки, для проверки создал непосредственно объект QTextEdit - но там все как и должно быть. Что за бред?
class MyTextEdit : public QTextEdit
{
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setupUi(this);
MyTextEdit *my = new MyTextEdit();
my->setParent( this );
my->setGeometry(100,100,50,40);
}
Класс:
#ifndef TEXTEDIT_H
#define TEXTEDIT_H
#include <QTextEdit>
#include <QMouseEvent>
#include "FindDialog.h"
class TextEdit : public QTextEdit
{
Q_OBJECT
public:
TextEdit(QWidget *parent = 0);
private:
QWidget *mw;
bool hidden;
signals:
void hideMenu();
void showMenu();
protected:
virtual void mouseMoveEvent(QMouseEvent *e);
public slots:
void Find(bool wholeWords, bool caseSensitive, int direction, QString &text);
void toBeginning();
void toEnd();
};
#endif // TEXTEDIT_H
#include "TextEdit.h"
#include <QDebug>
TextEdit::TextEdit(QWidget *parent) : QTextEdit(parent)
{
//this->setMouseTracking(true);
// mw = parent;
// hidden = true;
}
void TextEdit::mouseMoveEvent(QMouseEvent *e)
{
// if(mw->windowState() == Qt::WindowFullScreen)
// {
// if(!e->y()) emit showMenu();
// else emit hideMenu();
// }
}
void TextEdit::Find(bool wholeWords, bool caseSensitive, int direction, QString &text)
{
// QTextDocument::FindFlags flag1, flag2, flag3;
// if(wholeWords) flag1 = QTextDocument::FindWholeWords;
// if(caseSensitive) flag2 = QTextDocument::FindCaseSensitively;
// if(direction == FindDialog::Up) flag3 = QTextDocument::FindBackward;
// this->find(text, flag1 | flag2 | flag3);
}
void TextEdit::toBeginning()
{
// this->moveCursor(QTextCursor::End);
}
void TextEdit::toEnd()
{
// this->moveCursor(QTextCursor::Start);
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTextDocument>
#include <QTextCursor>
#include "TextEdit.h"
#include "Parser.h"
#include "FileInfoDialog.h"
#include "BookInfoDialog.h"
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
enum Dialogs
{
bookInfoDialog, fileInfoDialog
};
TextEdit *textEdit;
private:
Ui::MainWindow *ui;
Parser *parser;
int MBH, SBH, MPH;
bool hidden;
// TextViewer *viewer;
// QTextDocument *doc;
// QFont titleFont, textFont, subtitleFont;
// QString t, fontSize;
// QBrush nh;
protected:
virtual void resizeEvent(QResizeEvent *e);
virtual void mouseMoveEvent(QMouseEvent *e);
private slots:
void Open();
void Quit();
void FileInfo();
void BookInfo();
void fullScreenMode();
void normalScreenMode();
void Find();
void AddBookmark();
inline void zoomIn() {textEdit->zoomIn();}
inline void zoomOut() {textEdit->zoomOut();}
void hideMenu();
void showMenu();
signals:
void dialogOpened(int dialogType);
void selectedText(QString &text, int pos);
};
#endif // MAINWINDOW_H
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "FindDialog.h"
#include "AddBookmarkDialog.h"
#include <QFile>
#include <QMessageBox>
#include <QFileDialog>
#include <QMouseEvent>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// ui->statusBar->resize(this->width(),20);
SBH = ui->statusBar->height();
MPH = ui->menuBar->height()+ui->mainToolBar->height();
MBH = ui->menuBar->height();
textEdit = new TextEdit(this);
// parser = new Parser(textEdit);
textEdit->setGeometry(0,MPH,this->width(),this->height()-MPH-SBH);
// textEdit->setFrameShape(QFrame::NoFrame);
// textEdit->setReadOnly(true);
// connect(ui->OpenAct, SIGNAL(triggered()), this, SLOT(Open()));
// connect(ui->QuitAct, SIGNAL(triggered()), this, SLOT(Quit()));
// connect(ui->FileInfoAct, SIGNAL(triggered()), this, SLOT(FileInfo()));
// connect(ui->BoobInfoAct, SIGNAL(triggered()), this, SLOT(BookInfo()));
// connect(ui->ZoomInAct, SIGNAL(triggered()), this, SLOT(zoomIn()));
// connect(ui->ZoomOutAct, SIGNAL(triggered()), this, SLOT(zoomOut()));
// connect(ui->FullScreenModeAct, SIGNAL(triggered()), this, SLOT(fullScreenMode()));
// connect(ui->NormalScreenModeAct, SIGNAL(triggered()), this, SLOT(normalScreenMode()));
// connect(ui->FindAct, SIGNAL(triggered()), this, SLOT(Find()));
// connect(ui->FirstPageAct, SIGNAL(triggered()), textEdit, SLOT(toBeginning()));
// connect(ui->LastPageAct, SIGNAL(triggered()), textEdit, SLOT(toEnd()));
// connect(ui->AddBookmarkAct, SIGNAL(triggered()), this, SLOT(AddBookmark()));
// connect(this, SIGNAL(dialogOpened(int)), parser, SLOT(getDialog(int)));
// connect(textEdit, SIGNAL(hideMenu()), this, SLOT(hideMenu()));
// connect(textEdit, SIGNAL(showMenu()), this, SLOT(showMenu()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Open()
{
// QString fileName = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("Открыть книгу"), QDir::currentPath(), QString::fromLocal8Bit("Файлы FB2 *.fb2"));
// if (fileName.isEmpty()) return;
// QFile file(fileName);
// if (!file.open(QFile::ReadOnly | QFile::Text))
// {
// QMessageBox::warning(this, tr("fb2Reader"), QString::fromLocal8Bit("Невозможно прочесть файл %1:\n%2.").arg(fileName).arg(file.errorString()));
// return;
// }
// parser->Parse(&file);
}
void MainWindow::Quit()
{
// this->close();
}
void MainWindow::resizeEvent(QResizeEvent *e)
{
// textEdit->resize(this->width(), this->height()-ui->menuBar->height()-ui->mainToolBar->height()-SBH);
}
void MainWindow::FileInfo()
{
// emit dialogOpened(fileInfoDialog);
}
void MainWindow::BookInfo()
{
// emit dialogOpened(bookInfoDialog);
}
void MainWindow::fullScreenMode()
{
// hidden = true;
// // ui->menuBar->move(0,-ui->menuBar->height());
// // ui->mainToolBar->move(0, -ui->menuBar->height()-ui->mainToolBar->height());
// ui->NormalScreenModeAct->setEnabled(true);
// ui->FullScreenModeAct->setEnabled(false);
// ui->FullScreenModeAct->setVisible(false);
// ui->NormalScreenModeAct->setVisible(true);
// this->showFullScreen();
// textEdit->move(0,0);
// textEdit->resize(this->width(),this->height()-SBH);
// textEdit->setMouseTracking(true);
}
void MainWindow::normalScreenMode()
{
// hidden = false;
// ui->NormalScreenModeAct->setEnabled(false);
// ui->FullScreenModeAct->setEnabled(true);
// ui->FullScreenModeAct->setVisible(true);
// ui->NormalScreenModeAct->setVisible(false);
// // ui->menuBar->move(0,0);
// // ui->mainToolBar->move(0,ui->menuBar->height());
// textEdit->move(0,ui->menuBar->height()+ui->mainToolBar->height());
// this->showNormal();
// textEdit->setMouseTracking(false);
// textEdit->raise();
}
void MainWindow::Find()
{
// FindDialog *dialog = new FindDialog(this);
// connect(dialog, SIGNAL(searchParameters(bool,bool,int,QString&)), textEdit, SLOT(Find(bool,bool,int,QString&)));
// dialog->show();
}
void MainWindow::hideMenu()
{
// if(/*ui->menuBar->pos().y() != -MBH*/!hidden)
// {
// //ui->menuBar->move(0,-ui->menuBar->height());
// //ui->mainToolBar->move(0,-ui->menuBar->height()-ui->mainToolBar->height());
// hidden = true;
// ui->menuBar->lower();
// ui->mainToolBar->lower();
// }
}
void MainWindow::showMenu()
{
// if(/*ui->menuBar->pos().y() != 0*/hidden)
// {
// //ui->menuBar->move(0,0);
// //ui->mainToolBar->move(0,ui->menuBar->height());
// ui->menuBar->raise();
// ui->mainToolBar->raise();
// hidden = false;
// }
}
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
}
void MainWindow::AddBookmark()
{
// AddBookmarkDialog *dialog = new AddBookmarkDialog(this,textEdit);
// // connect(this, SIGNAL(selectedText(QString&,int)), dialog, SLOT(selectedText(QString&,int)));
// // emit selectedText(textEdit->textCursor().selectedText(), textEdit->textCursor().anchor());
// dialog->show();
}
Гениально!
Вот уж не подумал бы, что тут надо аргумент специально передавать...
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)