自定义类
class jdcompany : public QDialog
{
Q_OBJECT
public:
jdcompany( QWidget* parent = 0, const char* name = 0, bool modal = false, WFlags fl = (Qt::WStyle_Customize|Qt::WStyle_NoBorder|Qt::WDestructiveClose));
~jdcompany();
public:
QScrollView *view1;
QWidget* widget1;
QMultiLineEdit * edit1;
protected:
virtual bool eventFilter(QObject *target, QEvent *event);
public slots:
virtual void jdscrollviewup();
virtual void jdscrollviewdown();
signals:
void sig_uppage();
void sig_downpage();
};
以下是类的实现函数
jdcompany::jdcompany( QWidget* parent, const char* name, bool modal, WFlags fl)
: QDialog( parent, name, modal, fl )
{
resize( 320, 240 );
setMinimumSize( QSize( 320, 240 ) );
setMaximumSize( QSize( 320, 240 ) );
setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, sizePolicy().hasHeightForWidth() ) );
view1 = new QScrollView(this);
CHECK_PTR( view1 );
view1->setGeometry(0,0,320,240);
view1->setHScrollBarMode(QScrollView::AlwaysOff);
view1->setVScrollBarMode(QScrollView::AlwaysOn);
widget1 = new QWidget(this);
CHECK_PTR(widget1 );
widget1->resize(320,400);
edit1 = new QMultiLineEdit(widget1);
CHECK_PTR(edit1 );
edit1->setGeometry(0,0,320,400);
edit1->setReadOnly ( true );
edit1->setEdited ( false );
edit1->setWordWrap( QMultiLineEdit::WidgetWidth );
edit1->setWrapPolicy( QMultiLineEdit::Anywhere );
edit1->setText(QString :: fromUtf8("测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程 序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序1测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序测试程序2"));
view1->addChild(widget1);
showFullScreen();
view1->installEventFilter(this);
edit1->installEventFilter(this);
connect(this,SIGNAL(sig_uppage()),this,SLOT(jdscrollviewup()));
connect(this,SIGNAL(sig_downpage()),this,SLOT(jdscrollviewdown()));
}
jdcompany::~jdcompany()
{
delete edit1;
delete widget1;
delete view1;
}
void jdcompany::jdscrollviewdown()
{
view1->scrollBy (0, 160);
}
void jdcompany::jdscrollviewup()
{
view1->scrollBy (0, -160);
}
bool jdcompany::eventFilter(QObject *target, QEvent *event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
switch( keyEvent->key() )
{
case Qt::Key_Enter:
printf("Key_Enter\n");
close();
printf("close();\n");
update();
keypressflag = 0;
return true;
case Qt::Key_Left:
printf("Key_Left\n");
close();
printf("close();\n");
update();
keypressflag = 0;
return true;
case Qt::Key_Up:
emit sig_uppage();
printf("sig_uppage();\n");
keypressflag = 0;
return true;
case Qt::Key_Right:
return true;
case Qt::Key_Down:
emit sig_downpage();
printf("sig_downpage();\n");
keypressflag = 0;
return true;
default:
return QDialog::eventFilter(target, event);
break;
}
}
return QDialog::eventFilter(target, event);
}
以上程序可以实现带滚动条的文字显示窗口,也可以实现翻页(case Qt::Key_Up:和case Qt::Key_Down:能正常执行),我想实现当按下Key_Enter或Key_Left时关闭当前带滚动条的文字显示窗口,回到其父窗口,通过打印跟踪,printf("Key_Enter\n")和printf("Key_Left\n")都执行了(按键捕获到了)但两个case中的printf("close();\n")都未执行,无法关闭当前窗口回到父窗口,请问朋友们,错在哪里?怎么解决这个问题?不胜感激!我的编译环境是fedora9、Qtopia2.2.0,最终是在2440上运行测试的