在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中设计好的界面,如何可以手工添加、或删除可显示的控件呐?