求助:自定义继承的QWidget类无法添加在主程序框内显示

FMadot 2013-05-09 12:11:03
我的主程序MainWindow是继承QWidget的,然后又从QWidget继承了一个DataPicture类重载了paintEvent用来绘制图像。现在想把它加到主窗口的QVBoxLayout里 但是总是不显示出来,如果我不把它父类设置为mainwindow并且不添加到布局里的话,那在datapicture的独立窗口中是可以正确显示的,但是设置父类并且加到布局里就显示不出来了,在datapicture下面还添加了一行QLabel,发现当添加进布局时,这个QLabel会稍微往下移几个像素,无法理解啊。。。。。
...全文
407 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
超开心~ 2013-05-09
  • 打赏
  • 举报
回复
把布局代码贴上来看看。
FMadot 2013-05-09
  • 打赏
  • 举报
回复
class PicWidget : public QWidget
{
  Q_OBJECT
public:
  explicit PicWidget(QWidget *parent = 0);
//  QSize sizeHint();
  void setFile(QFile* sfile, QDataStream* sin,FrameParam* sframeparam);
  //Helper helper;
  INT32 framenumber;
private:
  QFile* file;
  QDataStream* in;
  FrameParam *frameparam;
protected:
  void paintEvent(QPaintEvent *event);
signals:
  
public slots:

  
};
这个是我继承的DataPicture类
FMadot 2013-05-09
  • 打赏
  • 举报
回复
这个是构建picwidget时不指定mainwindow指针并且不加入layout的情况,
这个是指定父窗口mainwindow并且加入layout的情况
FMadot 2013-05-09
  • 打赏
  • 举报
回复
引用 5 楼 chengchaooppo 的回复:
datapicture被隐藏在下面了。把主窗口放大一点就出来了。
恩多谢!我发现问题所在了 因为我在datapicture下面还有个variablewindow,拉大窗口时自动会把variablewindow变大,所以就看不见datapicture了我把variablewindow设置成fixed了 谢谢!
超开心~ 2013-05-09
  • 打赏
  • 举报
回复



datapicture被隐藏在下面了。把主窗口放大一点就出来了。
FMadot 2013-05-09
  • 打赏
  • 举报
回复
引用 3 楼 chengchaooppo 的回复:
把布局代码贴上来看看。
感谢回复!
void MainWindow::setupUi(){
  setWindowTitle("黑白上位机0.99beta");

  datapicture=new PicWidget(this);
  datapicture->show();

  label1=new QLabel("帧数",this);
  chooseframeslider=new QSlider(Qt::Horizontal,this);
  chooseframespinbox=new QSpinBox(this);
  playbutton=new QPushButton("播放",this);
  label2=new QLabel("变量窗口",this);
  variablewindow=new QTextBrowser(this);
  groupbox1=new QGroupBox("从SD卡导入数据",this);

  label1_1=new QLabel("SD卡",this);
  label1_2=new QLabel("保存路径",this);
  sdlist=new QComboBox(this);
  datasavepath=new QLineEdit(this);
  datasavepathchoose=new QToolButton(this);
  datasavepathchoose->setText("...");
  refreshdevice=new QPushButton("刷新设备",this);
  importdata=new QPushButton("导入",this);
  openafterimport=new QCheckBox("导入后自动打开",this);
  groupbox2=new QGroupBox("打开数据文件",this);

  opendatafile=new QPushButton("打开...",this);
  groupbox3=new QGroupBox("插件功能",this);

  label3_1=new QLabel("插件功能暂未开通",this);


  QHBoxLayout *mainlayout=new QHBoxLayout;
  QVBoxLayout *leftlayout=new QVBoxLayout;
  QVBoxLayout *rightlayout=new QVBoxLayout;
  QHBoxLayout *leftmiddlelayout=new QHBoxLayout;
  QVBoxLayout *groupbox1layout=new QVBoxLayout;
  QHBoxLayout *groupbox1layout1=new QHBoxLayout;
  QHBoxLayout *groupbox1layout2=new QHBoxLayout;
  QHBoxLayout *groupbox1layout3=new QHBoxLayout;
  QVBoxLayout *groupbox2layout=new QVBoxLayout;
  QVBoxLayout *groupbox3layout=new QVBoxLayout;
  
  //构建左边的样式
  leftlayout->addWidget(datapicture);
  leftmiddlelayout->addWidget(label1);
  leftmiddlelayout->addWidget(chooseframeslider);
  leftmiddlelayout->addWidget(playbutton);
  leftmiddlelayout->addWidget(chooseframespinbox);
  leftlayout->addLayout(leftmiddlelayout);
  leftlayout->addWidget(label2);
  leftlayout->addWidget(variablewindow);

  //构建groupbox1的样式
  groupbox1layout1->addWidget(label1_1);
  groupbox1layout1->addWidget(sdlist);
  groupbox1layout->addLayout(groupbox1layout1);
  groupbox1layout2->addWidget(label1_2);
  groupbox1layout2->addWidget(datasavepath);
  groupbox1layout2->addWidget(datasavepathchoose);
  groupbox1layout->addLayout(groupbox1layout2);
  groupbox1layout->addWidget(refreshdevice);
  groupbox1layout3->addWidget(openafterimport);
  groupbox1layout3->addWidget(importdata);
  groupbox1layout->addLayout(groupbox1layout3);
  groupbox1->setLayout(groupbox1layout);

  //构建groupbox2样式
  groupbox2layout->addWidget(opendatafile);
  groupbox2->setLayout(groupbox2layout);

  //构建groupbox3样式
  groupbox3layout->addWidget(label3_1);
  groupbox3->setLayout(groupbox3layout);



  rightlayout->addWidget(groupbox1);
  rightlayout->addWidget(groupbox2);
  rightlayout->addWidget(groupbox3);

  mainlayout->addLayout(leftlayout);
  mainlayout->addLayout(rightlayout);
  setLayout(mainlayout);


}
以上 分为左右两个QVBoxLayout 左边那个里面从上到下添加datapicture 一个QHBoxLayout,内包含一个label 一个slider 一个pushbutton和一个spinbox 然后QVBoxLayout继续添加label和variablewindow. 就是把datapicture添加到第一个里面后不显示 只是顶部稍微多空了点距离。是不是因为窗口尺寸的问题?但是我datapicture->resize()什么的都试过了,没反应

16,223

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧