• 4955阅读
  • 5回复

困扰我好多天的问题:布局 [复制链接]

上一主题 下一主题
离线gaojinwei
 
只看楼主 倒序阅读 楼主  发表于: 2011-11-06
关键词: 布局
大家好,我用Qt写了一个界面,如下:
window.open('http://www.qtcn.org/bbs/attachment/Mon_1111/59_114673_ba03327e2b5616e.png?24');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >
先贴代码:
自定义的绘图类:
#ifndef PAINTAREA_H
#define PAINTAREA_H
#include <QWidget>
#include <QTimer>
#define pi  3.14159                  //定义π数值
class PaintArea : public QWidget
{    
Q_OBJECT
public:    PaintArea();    
int Data[350][700];            
QRgb value;  
int m_min;    
int m_max;    
int Num;    
int g_bkBright;    
int temp;    
void ReadData();                      
void RectShow();                      
void FanShow();                        
QTimer *timer;    
void start();    
void pause();    
void saveimage();
protected:    
void paintEvent(QPaintEvent *);    
private:    
QImage image;                          
QImage tempimage;                      
QRgb backColor;                  
private slots:    
void timerUpDate();              
#endif // PAINTAREA_H

//PaintArea.cpp

PaintArea::PaintArea()
{    
image = QImage(500,650,QImage::Format_RGB32);    
tempimage=QImage(500,650,QImage::Format_RGB32);    
backColor = qRgb(255,255,255);                    
image.fill(backColor);   }

void PaintArea::paintEvent(QPaintEvent *)
{    QPainter painter(this);    
painter.drawImage(0,0,image);
}
...............................................略


mainwindow.cpp


MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),  
ui(new Ui::MainWindow)
{    ui->setupUi(this);    
  resize(800,650);    
  area = new PaintArea;      //一个类调用另一个类,把指针传给area,用new+类名  
//area->show();    
  setCentralWidget(area);  
   //将scrollArea加入到主窗口的中心区     }
运行程序之后是我上的第一个图的效果。

我现在想问的问题是:我在QtDesiger中布置了其它的控件,但是使用了setCentralWidget(area)之后,其它的空间都被覆盖了。所以我想在主窗口中的一个widget中绘图,好几天了也没搞定,我想要的效果如下:



由于基础差,最近四五天我把什么提升法,插件法,splitter。。。。(其实我也不太明白到底怎么用)都用了一遍,实在没办法了,到论坛求助了。各位看看我应该怎么做?
第二个问题是,做Mainwindow 一定要有setCentralWidget么?

离线jdwx

只看该作者 1楼 发表于: 2011-11-06
回 楼主(gaojinwei) 的帖子
第二个问题是,做Mainwindow 一定要有setCentralWidget么?  答案是:一定要有一个widget,只能是一个
要是用复杂布局做CentralWidget,那就在一个widget里做复杂布局,用这个widget做CentralWidget
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线gaojinwei
只看该作者 2楼 发表于: 2011-11-06
谢谢楼上回答,如果我想实现我第二张图里的布局,应该怎么做呢?
离线jdwx

只看该作者 3楼 发表于: 2011-11-06
回 2楼(gaojinwei) 的帖子
在头文件里添加:
QHBoxLayout *hlayout ;
QWidget *centerwidget ;
QWidget *leftwidget ;
QWidget *rightwidget ;


在cpp文件构造函数里添加:
QHBoxLayout *hlayout = new QHBoxLayout;
QWidget *centerwidget = new QWidget(this);
QWidget *leftwidget = new QWidget(this);
QWidget *rightwidget = new QWidget(this);
hlayout->addWidget(leftwidget);
hlayout->addWidget(rightwidget);
centerwidget->setLayout(hlayout);
setCentralWidget(centerwidget);
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 4楼 发表于: 2011-11-06
在设计师里往中间放两个widget,之后你“查看源码”,就知道是怎么实现的了
QMainWindow只能有一个centralWidget,但是没人能阻止你在这个widget里放其他的东西
所以只要将其他的复杂布局都在centralWidget里设置就好了

你似乎是想在设计师里添加一个自己写的widget?确实用提升法能解决的,可以先在打算放自定义widget的地方放进去一个QWidget(你的自定义widget就是继承这个的吧),然后将它提升为自定义widget。至于这个自定义widget的代码该放到什么位置,好像还真不太好说清……如果你遇到问题再说吧……

另外看你的预览图,好像没给centralWidget设置布局……?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 5楼 发表于: 2011-11-07
其实QMainWindow和QDialog,QWidget在UI编辑器用法一样,在里面摆放好控件后布局,
最后一定要在窗体没有控件的地方单击,添加一个布局,OK。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个