读书人

QT在MainWindow中使用Widget画网格曲线

发布时间: 2013-08-09 15:16:24 作者: rapoo

QT在MainWindow中应用Widget画网格曲线
我正在MainWindow中添加了个Widget,(ˇ?ˇ) 想~在Widget中画网格,画曲线,但是不知道怎么写Painter的指针,不太会用PaintEvent,这个Widget应该怎么用啊QT在MainWindow中使用Widget画网格曲线
[解决办法]
基本上没用过Designer,手残的坚持纯手工……,
下面是我测试你的plotter的代码和截图,



// class plotrer 基本没做改动,只是改了MainWindow让我能编译
// plotter.h
class plotter : public QWidget
{
Q_OBJECT// 你的源代码里居然没有这行,这到还行
public:// 没有这行你怎么编译的???
plotter(QWidget *parent=0);
private:
void paintEvent(QPaintEvent *event);
void drawGrid(QPainter *);
};

// plotter.cpp
plotter::plotter(QWidget *parent):QWidget(parent)
{
}

void plotter::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
drawGrid(&painter);
painter.setPen(Qt::black);
painter.drawLine(0,0,100,100);

}

void plotter::drawGrid(QPainter *painter)
{

painter->drawLine(0,0,100,100);
int Margin=40;//边缘
QRect rect;
//取得绘图区域,大小要减去旁白
//rect=QRect(Margin+300,Margin+300,width()-Margin-700,height()-Margin-500);
rect=QRect(Margin+25,Margin,width()-2*Margin-10,height()-2*Margin);
for(int i=0;i<=20;i++)
{
int x=rect.left()+(i*(rect.width()-1)/20);
painter->drawLine(x,rect.top(),x,rect.bottom());
}
for(int j=0;j<=10;j++)
{
int y=rect.bottom()-(j*(rect.height()-1)/10);
painter->drawLine(rect.left()-5,y,rect.right(),y);


}

}

// mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
plotter *plot;
};

// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
this->plot = new plotter;
this->setCentralWidget(this->plot);
}

MainWindow::~MainWindow()
{
}




QT在MainWindow中使用Widget画网格曲线

所以你的plotter是没有问题的,而你的UI Designer有没有问题就看不到了,重新试试吧,可以尝试一下用纯代码来~~
[解决办法]
引用:
Quote: 引用:


从代码里找,有没有显式的add,布局有没有什么问题,基本上我调试的过程就是这样。

用了你的方法,确实跟你的运行结果相同。不过我本来的目的是在MainWindow的大窗口下用一个Widget的控件来画网格,这样我调节Widget的位置来控制网格曲线在哪儿显示。现在的运行结果是MainWindow的整个centrWidget都给了Widget,我要想通过控制控件来调节不好弄了。
请问你有什么建议吗?


不太懂楼主的设计思路,我的代码只是帮助楼主测试了一下plotter,表示plotter没有问题,问题出在其他的地方。调节Widget的位置控制网格曲线在哪儿显示?我觉得应该是直接绘制到要显示的位置吧。要是想要调整控件的话,一般再套一层Widget,结构可以参考 将一堆组件组成MainWidget一个整体,然后放到MainWindow。我的代码只是为了测试,一般没有直接在MainWindow上添加底层组件的。

读书人网 >QT开发

热点推荐