初学QT,布局有点问题,未解决...

guiguiyiha 2011-03-13 09:12:13
#include "mainwindow.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
place_buttons();
}

void MainWindow::place_buttons()
{
led_button = new QPushButton(tr("LED"),this);
pwm_button = new QPushButton(tr("PWM"),this);
pic_button = new QPushButton(tr("PIC"),this);
adc_button = new QPushButton(tr("ADC"),this);
mp3_button = new QPushButton(tr("MP3"),this);
rtc_button = new QPushButton(tr("RTC"),this);

QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addWidget(led_button);
leftLayout->addWidget(pwm_button);
leftLayout->addWidget(pic_button);

QVBoxLayout *rightLayout = new QVBoxLayout;
rightLayout->addWidget(adc_button);
rightLayout->addWidget(mp3_button);
rightLayout->addWidget(rtc_button);

QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
setLayout(mainLayout);

setWindowTitle(tr("Main UI"));
}

MainWindow::~MainWindow()
{

}

为什么rtc那个button把别的button覆盖掉了呢?
...全文
91 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
guiguiyiha 2011-03-15
  • 打赏
  • 举报
回复
这个还要结账。。。。。。ok
残剑待飞雪 2011-03-15
  • 打赏
  • 举报
回复
坐等楼主结贴
gemfield 2011-03-14
  • 打赏
  • 举报
回复
《Qt的布局系统》一文即将发布在我的博客上 :)
残剑待飞雪 2011-03-14
  • 打赏
  • 举报
回复
兄弟,当结贴时要结贴呀
guiguiyiha 2011-03-13
  • 打赏
  • 举报
回复
多谢了,有点小明白了,呵呵。。3Q
残剑待飞雪 2011-03-13
  • 打赏
  • 举报
回复
如果一定要从QMainWindow派生的话,最后要这样调用

centralWidget = new QWidget();

this->setCentralWidget(centralWidget);
centralWidget->setLayout(mainLayout);

残剑待飞雪 2011-03-13
  • 打赏
  • 举报
回复
另外要实现你要的功能不能从QMainWindow派生,要从QWidget派生。


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>

class MainWindow : public QWidget
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();

void putButtons();

private:
QPushButton *led_button;
QPushButton *pwm_button;
QPushButton *pic_button;
QPushButton *adc_button;
QPushButton *mp3_button;
QPushButton *rtc_button;

QVBoxLayout *leftLayout;
QVBoxLayout *rightLayout;

QHBoxLayout *mainLayout;
};

#endif // MAINWINDOW_H



#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QWidget(parent)
{
putButtons();
}

MainWindow::~MainWindow()
{
delete mainLayout;
delete leftLayout;
delete rightLayout;
delete led_button;
delete pwm_button;
delete pic_button;
delete adc_button;
delete mp3_button;
delete rtc_button;
}

void MainWindow::putButtons()
{
mainLayout = new QHBoxLayout;
leftLayout = new QVBoxLayout;
rightLayout = new QVBoxLayout;

led_button = new QPushButton(tr("LED"));
pwm_button = new QPushButton(tr("PWM"));
pic_button = new QPushButton(tr("PIC"));
adc_button = new QPushButton(tr("ADC"));
mp3_button = new QPushButton(tr("MP3"));
rtc_button = new QPushButton(tr("RTC"));

leftLayout->addWidget(led_button);
leftLayout->addWidget(pwm_button);
leftLayout->addWidget(pic_button);

rightLayout->addWidget(adc_button);
rightLayout->addWidget(mp3_button);
rightLayout->addWidget(rtc_button);

mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);

this->setLayout(mainLayout);
}


这样就得到你想要的效果了
guiguiyiha 2011-03-13
  • 打赏
  • 举报
回复
我见书上都没有用delete,百度了下。。。。
有人说Qt本身的类会自动释放, 其他自定义类都需要手动delete
我的问题出现在什么地方?新手求教.....
残剑待飞雪 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 guiguiyiha 的回复:]
#include "mainwindow.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
place_buttons();
}

void MainWindow::place_buttons()
{
led_butto……
[/Quote]


极不严谨的代码!!!!!!

内存泄漏呀!!!!!!!!(潜在危险极大)

new delete要对使用。
按你的代码,谁来释放局部new生成的指针呢!

guiguiyiha 2011-03-13
  • 打赏
  • 举报
回复
我是左边3个,右边3个的。。。。。
念茜 2011-03-13
  • 打赏
  • 举报
回复
因为他是最后一个加载的

16,216

社区成员

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

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