• 5208阅读
  • 5回复

能否探讨一下屏幕显示的编程规则? [复制链接]

上一主题 下一主题
离线vc2009
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-10
在Qt中有许多的可显示控件,如简单的QPushButton,在入门编程解说中,常以它为例子。我写了个显示控件组织的试验程序如下:
int main(int argc, char *argv[])
{
1) QApplication app(argc, argv);

2) QWidget myWidget;
3) myWidget.setGeometry(0,0,600,300);

4) QGraphicsScene scene(0,0,600,300);
5) QGraphicsView view(&scene,&myWidget);
6) view.setGeometry(50,50,100,200);

7) QPushButton b("+++++++++++++++++");

8) scene.addText(" Hello, world!");
9) scene.addWidget(&b);

10) QPainter painter(&view);
11) QPen myPen(Qt::blue,3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
12) painter.setPen(myPen);

13) scene.addLine(120,120,280,280,myPen);

14) QGraphicsTextItem myTextItem(" Good!");
15) scene.addItem(&myTextItem);


16) QGraphicsEllipseItem myEllipseItem;
17) const QRectF mySceneRectF(50,50,50,50);
18) myEllipseItem.setRect(mySceneRectF);
19) scene.addItem(&myEllipseItem);


20) myWidget.show();

21) return app.exec();
}

         该程序执行后,QPushButton会在View中显示。若把7行改为: QPushButton b("+++++++++++++++++",&myWidget);则它显示在Widget中而不是View中,下面的9行scene.addWidget(&b); 相当于没有起到任何作用。

        如果要在Qt Designer中,建立一个简单的窗口程序,在test6.h文件中加入: 
 QGraphicsScene myScene;
 QGraphicsView myView;
如下:

#ifndef TEST6_H
#define TEST6_H
#include <QtGui/QMainWindow>
#include <QGraphicsView>
#include <QGraphicsScene>
#include "ui_test6.h"
class test6 : public QMainWindow
{
 Q_OBJECT
public:
 test6(QWidget *parent = 0, Qt::WFlags flags = 0);
 ~test6();
private:
 QGraphicsScene myScene;
 QGraphicsView myView;
 Ui::test6Class ui;
};
#endif // TEST6_H


在test6.cpp中加入:
QGraphicsScene myScene(mySceneRectF,ui.centralWidget);
QGraphicsView myView(&myScene,ui.centralWidget);

如下:

#include "test6.h"
test6::test6(QWidget *parent, Qt::WFlags flags)
 : QMainWindow(parent, flags)
{
 ui.setupUi(this);
 const QRectF mySceneRectF(0,0,100,180);
 QGraphicsScene myScene(mySceneRectF,ui.centralWidget);
 QGraphicsView myView(&myScene,ui.centralWidget);

}
test6::~test6()
{
}

却不能显示View。若把这三行放在ui.setupUi(this);之前的,程序都不能运行了,有Win32运行时故障。


请高手给点指导:
究竟该如何组织可显示的控件?有什么样的机制啊?
在Qt Designer中设计好的界面,如何可以手工添加、或删除可显示的控件呐?

离线vc2009
只看该作者 1楼 发表于: 2009-07-10
自己先顶下了。
Qt Designer中讲到在应用中使用客户组件的问题,把由Qt Designer设计的窗口作为一个客户组件,怎么能够通过增加代码来改变用Qt Designer设计出来的界面啊?
有没有高手知道的,给指导一下啊!先谢了啊。
离线vc2009
只看该作者 2楼 发表于: 2009-07-10
自己先顶下了。
Qt Designer中讲到在应用中使用客户组件的问题,把由Qt Designer设计的窗口作为一个客户组件,怎么能够通过增加代码来改变用Qt Designer设计出来的界面啊?
有没有高手知道的,给指导一下啊!先谢了啊。
离线浪漫天使
只看该作者 3楼 发表于: 2009-07-10
方法一 右键-》提升为
方法二 自己写designer的plugin。

这里有个例子 http://www.qtcn.org/bbs/read.php?tid=17240
[ 此帖被浪漫天使在2009-07-10 17:31重新编辑 ]
离线vc2009
只看该作者 4楼 发表于: 2009-07-11
谢谢楼上的帮助,让我学习了自定义插件。
楼主能够帮忙看一下上面的代码,要在一个View中显示Text,用Scene.addText("----"),可以显示。
若先建立QGraphicsTextItem,再用scene.addItem函数就显示不了了,用其它的QGraphicsItem情况也一样,不知道是怎么回事啊?
QGraphicsTextItem myTextItem(" Good!");
scene.addItem(&myTextItem);
离线vc2009
只看该作者 5楼 发表于: 2009-07-14
Re:能否探讨一下屏幕显示的编程规则?(搞定)
自己来顶一下,改为类指针,一切OK,Qt的QGraphicsView Framework架构很不错,我把英文的文档已经翻译成中文了,有类似需要的程序员值得浏览一下的。
快速回复
限100 字节
 
上一个 下一个